草庐IT

clang_complete

全部标签

c++ - 函数模板重载clang++

g++4.8.1和clang++3.4为下一个代码给出不同的结果://simplifiedcodefromaLoggermodule#includetemplatevoidtf(constT*){//clang++std::coutvoidtf(T){//g++std::cout我不知道哪个变体是正确的(C++03)。 最佳答案 指向函数的指针不是指向对象的指针,在C++中谈论函数指针的const特性是没有意义的。IMOg++是正确的,因为hex有资格作为指向函数的指针,但不能作为指向任何内容的const*。在第一种情况下,模板参数

c++ - 为什么复数文字在 clang 中不起作用?

当我运行此代码时onideone.com,它打印出(2,3):#include#includeintmain(){std::complexval=2+3i;std::cout但是当我在macOS10.11.6上使用clang时,我没有收到任何错误或警告,但输出是(2,0):$clang--versionAppleLLVMversion7.3.0(clang-703.0.31)Target:x86_64-apple-darwin15.6.0$clang-lc++test.cpp&&./a.out(2,0)虚部发生了什么?我做错了吗? 最佳答案

c++ - std::get_time 在 g++ 和 clang++ 中被破坏了吗?

我今天正在处理一些时间函数,并注意到使用%r(或%p)的标准转换似乎不适用于通过的输入g++或clang++上的std::get_time()。见thislivecodeversion对于g++和clang++。它确实在带有VC++的Windows下似乎可以正常工作(参见closelyrelatedquestion)。另请注意,无论是否包含imbue行,效果都是相同的。如果重要的话,我的Linux机器上的语言环境设置为"en_US.UTF-8"。#include#include#include#include#includeintmain(){std::tmt{};std::strin

c++ - 在clang++与g++中除以复数<double>

当我使用g++(4.8.1或4.9.0)或clang++(3.4)编译以下代码时,我得到不同的输出。#include#includeintmain(){std::complexc={1.e-162,0};std::coutg++:(1e+162,0)叮当++:(inf,-nan)这是clang的错误吗?更新:感谢您的回答!我报告了这个错误:http://llvm.org/bugs/show_bug.cgi?id=19820 最佳答案 标准在[complex.numbers]中说(26.4/3):Iftheresultofafunct

c++ - Clang 和 GCC 之间的 const auto std::initializer_list 区别

我试图了解在结合初始化列表和constauto时C++11的正确行为应该是什么?.对于以下代码,我在GCC和Clang之间得到了不同的行为,并且想知道哪个是正确的:#include#include#includeintmain(){conststd::initializer_listl1={1,2,3};constautol2={1,2,3};std::cout用g++编译的输出是:explicit:St16initializer_listIiEauto:St16initializer_listIKiE虽然clang++编译的版本产生:explicit:St16initializer_

c++ - 如何运行 GCC/Clang 进行静态分析? (仅警告)

如果不编译代码,我希望GCC或Clang报告警告。是否可以只运行编译器进行静态分析?我找不到传递编译器警告标志并告诉它不要编译的方法。编辑:刚刚发现clang有一个staticanalyser 最佳答案 GCC和Clang都有一个选项-fsyntax-only,它使编译器只执行语法检查而不进行任何实际编译。 关于c++-如何运行GCC/Clang进行静态分析?(仅警告),我们在StackOverflow上找到一个类似的问题: https://stackover

c++ - clang 如何引导 C/C++ 代码优化?

有人告诉我,clang是一个类似于gcc的驱动程序,用于进行预处理、编译和链接工作。在编译和链接过程中,据我所知,实际上是llvm进行优化(“-O1”,“-O2”,“-O3”,“-Os”,“-flto”)。但我就是无法理解llvm是如何参与的。似乎编译源代码甚至不需要像libLLVMCore.a这样的静态库,而是debianclang包依赖于另一个名为libllvm-3.4的包(clang版本是3.4),包含libLLVM-3.4.so(.1),clang是否使用这个共享库进行优化?查了一下clang源码,发现include/clang/Driver/Options.td里面有相关的选

c++ - 如何在使用 clang 格式的访问修饰符后缩进

如何在访问修饰符后实现以下缩进:classA{public:inta;}应该会导致classA{public:inta;//notetheindentation}clang-format只允许访问修饰符与inta在同一级别AccessModifierOffset:0导致classA{public:inta;} 最佳答案 在我工作的地方,我们偶然发现了同样的问题。由于IndentWidth参数控制无处不在的缩进(类、函数等),因此您试图实现的目标似乎是不可能的。在我看来,下一个最好的事情是保留IndentWidth=4并设置Acces

c++ - 重新解释强制转换模板非类型参数 : clang c++14 vs c++1z

考虑以下代码:templatestructfoo{};intmain(){foof;(void)f;}当使用-std=c++11或-std=c++14在clang3.8.0上编译时,程序会编译。使用-std=c++1z编译时,会出现以下错误:main.cpp:4:9:error:non-typetemplateargumentisnotaconstantexpressionfoof;^~~~~~~~无论C++模式如何,gcc5.3.0都不会编译代码,我认为这是正确的。C++14和C++1z之间的clang有什么区别,为什么它接受代码?与此处相关的C++1z中是否发生了一些变化?

c++ - clang-format:在 lambda 函数和外部 block 的大括号之前中断

我有一个lambda函数,格式如下:autocb=[](std::stringconst&_param){std::cout我想将左大括号保留在新行上,但clang-format总是将它放在第一行的末尾。是否可以配置clang-format以遵循上述样式?我当前配置的相关部分如下所示:BraceWrapping:AfterClass:trueAfterControlStatement:trueAfterEnum:trueAfterFunction:trueAfterNamespace:trueAfterStruct:trueAfterUnion:trueBeforeCatch:true