草庐IT

c++ - 如何在 C++ 类函数中将 std::map 作为默认构造函数参数传递

尝试在Ubuntu12.04上的clang-3.3和clang-3.0中使用std::map时遇到问题:#include#include#includeclassA{public:#if0//clangcompilesoktypedefstd::mapMapKeyValue_t;voidPrintMap(constMapKeyValue_t&my_map=MapKeyValue_t())#else//clangcompilesfailvoidPrintMap(conststd::map&my_map=std::map())#endif{std::map::const_iteratori

c++ - 有没有办法弃用命名空间?

简而言之:有没有办法在gcc或clang中弃用命名空间?长:多年来,我们一直在一个包罗万象的命名空间中积累各种各样的东西。现在我们决定对其进行一些排序,并将namespace拆分为适当命名的名称;所以:namespaceutil{uint32_tcodecID(constchar*name);voidalignStrings(std::vector*strings);}应该变成namespacecodec{uint32_tcodecID(constchar*name);}namespacefmt{voidalignStrings(std::vector*strings);}只是为了增加

c++ - 为什么 clang 让我在 C++03 模式下通过非常量引用获取临时值?

Inspiredbymyobservationinapreviousquestion,我决定做一个小测试:#include#includeintmain(){charc='A';std::stringstreamss("B");//Iknowthisisbadmojo;that'swhyI'mtestingitss>>char(c);std::cout我的编译器版本:AppleLLVMversion5.1(clang-503.0.40)(basedonLLVM3.4svn)Target:x86_64-apple-darwin13.3.0Threadmodel:posix用C++03模式

c++ - gcc 中的错误,或 clang/MSVC 中的扩展

以下代码片段可以在clang和MSVS中编译,但不能在gcc中编译。templateclassclone_ptr;templateclone_ptrmake_cloned(Args...args);//note:everythingnotneededforexamplecutout,so//thisclassisneithercompletenorcorrecttemplateclassclone_ptr{public:clone_ptr():ptr(nullptr){}operatorbool(){returnptr!=nullptr;}T*operator->(){returnpt

c++ - TMP 缓慢的常见罪魁祸首是什么

我有一个项目使用了相当多的C++模板元编程。这使得编译时间很长。我知道我不能吃蛋糕也不能吃,但我想知道一些关于如何减少编译时间的提示和技巧。我已经尝试过显式实例化,虽然这在某些情况下可能有帮助,但很多时候,这些实例对于特定编译单元是唯一的,在这种情况下显式实例化无济于事。现在我们只讨论做得很好的Clang。当我在G++上尝试这个时,编译时间会爆炸式增长。对于一个文件,我放弃了等待它在45分钟后编译。在涉及到模板元编程时,是否有任何常见的罪魁祸首,即众所周知的经常有问题的事情?我应该避免哪些技术以及我应该做什么?GCC是否存在已知性能比Clang差的领域?有什么方法可以解决这个问题?我主

c++ - 如何在qt creator中使用clang静态分析器

参见本手册UsingClangStaticAnalyzer在QtCreator手册中有人可以告诉我如何设置吗?我在QtCreator的分析器设置中没有看到这个选项卡,也没有在列表中看到可用于此的插件...更新:抱歉,我看到这只是一个商业版本 最佳答案 QtCreator用户好消息:clang静态分析器将从3.7版本开始包含在QtC社区版中 关于c++-如何在qtcreator中使用clang静态分析器,我们在StackOverflow上找到一个类似的问题: h

c++ - 错误 : jump to label 'foo' crosses initialization of 'bar'

以下C++示例无法使用gcc或clang进行编译,但仅使用ICC生成警告,而使用MSVC则完全不生成任何警告:intmain(intargc,char*argv[]){if(argcg++:init.cpp:13:error:jumptolabel‘clean_up’init.cpp:4:error:fromhereinit.cpp:7:error:crossesinitializationof‘inti’clang++:init.cpp:4:9:error:cannotjumpfromthisgotostatementtoitslabelgotoclean_up;^init.cpp:

c++ - 在常数值上强制 Clang 为 "perform math early"

这与Howtoforceconstpropagationthroughaninlinefunction?有关Clang有一个集成的汇编程序;而且它不使用系统的汇编程序(通常是GNUAS(GAS))。非Clang早期执行了数学运算,一切都“正常工作”。我说“早”是因为@n.m。反对将其描述为“预处理器执行的数学运算”。但是这个想法是这个值在编译时是已知的,应该尽早评估它,就像预处理器评估#if(X%32==0)时一样。.下面,Clang3.6提示违反了约束。似乎常量没有在整个过程中传播:$exportCXX=/usr/local/bin/clang++$$CXX--versionclan

c++ - 如何使用 Clang 获取 C/C++ 程序的所有全局声明列表?

我正在尝试编写一个程序,使用Clang列出C或C++程序的所有公开导出的变量和函数。我关注了thistutorial的第5部分,但它不适用于当前版本的clang。在那之上,我得到了somehintsCompilerInstance可以使代码更短,但我不确定如何使用它。您将如何实现此功能?你能给我任何指向正确方向的指示吗?例如:是否有全局声明变量的大型哈希表,或者我是否必须遍历AST? 最佳答案 公开导出-您是指带有外部链接的符号吗?您可以使用nm在目标文件、共享库和可执行文件上,使用--extern-only--defined-on

c++ - 使用 clang AST 解析器忽略丢失的 header

我在Windows上,使用MSVC来编译我的项目,但我需要clang来使用它简洁的AST解析器,它允许我编写一个小代码生成器。问题是,clang无法解析MSVCheader(一个众所周知且可以理解的问题)。我尝试了两种选择:我包含MSVCheader文件夹,解析我的代码中包含的内置header最终会在某些时候导致fatalerror,阻止我正确解析我想要的部分。我之前所做的只是不提供任何内置header并转发声明我需要的类型。它工作正常,不知何故它不再适用于最新的Clang。我真的不知道关于丢失header的解析器策略是否发生了变化,但它每次都会导致完全失败,如包含在内,并没有太多被解