草庐IT

c++ - 如何处理clang中的 "exit-time destructor"警告?

在我的C++11代码中,我在以下情况下收到clang警告“声明需要退出时析构函数”:staticconststd::mapmymap={{1,{"A","B","C"}},{2,{"D","E","F"}}};据我了解,Google需要一个“退出时析构函数”以确定性的方式销毁main()和静态变量,以防止由于“已发布的变量”而导致退出时崩溃。那正确吗?有人能解释得更好吗?另外:我能做些什么(我不想禁用警告)?上面的代码只在一个线程的上下文中使用。看起来这就是Chromium处理这些情况的方式;这也是我的情况的正确方法吗?#defineCR_DEFINE_STATIC_LOCAL(typ

c++ - 为什么 gcc 和 clang 都会为这个程序产生不同的输出? (转换运算符与构造函数)

程序:#includestructbar_t{intvalue;templatebar_t(constT&t):value{t}{}//edit:Youcanuncommenttheseifyourcompilersupports//guaranteedcopyelision(c++17).Eitherway,it//doesn'taffecttheoutput.//bar_t()=delete;//bar_t(bar_t&&)=delete;//bar_t(constbar_t&)=delete;//bar_t&operator=(bar_t&&)=delete;//bar_t&op

c++ - g++ 和 clang++ 具有完整模板参数的不同行为

我有以下C++11代码。#includeusingIntType=unsignedlonglong;templatestructInt{};templatestructis_int:std::false_type{};templatestructis_int>:std::true_type{};intmain(){static_assert(is_int>::value,"");return0;}Clang++3.3编译代码但在g++4.8.2上静态断言失败$g++-std=c++11main.cppmain.cpp:Infunction‘intmain()’:main.cpp:15:

c++ - 从通用 lambda 调用 `this` 成员函数 - clang vs gcc

问题:传递一个通用lambda(到模板函数),该lambda捕获this并调用this没有明确的this->不会在gcc上编译。如果lambda不是通用的,或者如果lambda没有传递给任何其他函数而是就地调用,那么它会在没有显式this->的情况下进行编译。在所有情况下,Clang的代码都很酷。又是一轮clangvsgcc的时间了。谁是对的?Wandboxexampletemplatevoidcall(TF&&f){f(1);}structExample{voidfoo(int){}voidbar(){call([this](autox){foo(x);});}};intmain()

c++ - 在 clang-format 中,惩罚有什么作用?

clang-formatsytleoptionsdocumentation包括许多称为PenaltyXXX的选项。文档没有解释应该如何使用这些惩罚。你能描述一下如何使用这些惩罚值以及它们达到什么效果(也许用一个例子)? 最佳答案 当您的行超过行长限制时,clang-format将需要在某处插入一个或多个换行符。您可以将惩罚视为阻止某些断线行为的一种方式。例如,假设您有:Namespaces::Are::Pervasive::SomeReallyVerySuperDuperLongFunctionName(args);//andthe

c++ - GCC 或 Clang 关于函数参数的名称在其自己的默认参数范围内是否正确?

我有一个小玩具程序:staticintvalue=0;intfunction(int&value=value){returnvalue;}intmain(){function();}使用g++7.2编译:g++-std=c++11-Wall-Wextratest.cc-otest没问题。用clang++-3.9编译:clang++-3.9-std=c++11-Wall-Wextratest.cc-otesttest.cc:3:25:error:defaultargumentreferencesparameter'value'intfunction(int&value=value){^~

c++ - 为什么没有更多地使用clang?

就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter寻求指导。关闭9年前.我以前用C/C++进行过相当多的编程,但现在它只占我所做编程的一小部分(脚本语言更适合我所做的很多工作)。过去几天我从事了一些C编程项目,我很惊讶我一直忘记有多少小的语法细节。更糟糕的是cc/gcc通常有关于这些问题的神秘或非信息性错误消息(抱歉,我不记得任何具体示例)。我了解了clang编译器不久前决定尝试一下。错误消息更清晰,帮助我识别和修复语法中

c++ - C++1y 模式下的 Clang >= 3.3 无法解析 <cstdio> header

我有一个项目可以在g++4.8.1和clang>=3.3在c++11模式下正确编译和运行。但是,当我切换到实验性-std=c++1y模式,clang3.3(但不是g++)阻塞通过Boost.Test间接包含的header(所以我自己不能轻易更改它)///usr/include/c++/4.8/cstdio#include//Getridofthosemacrosdefinedininlieuofrealfunctions.//...#undefgets//...namespacestd{//...using::gets;//带有以下错误消息:/usr/lib/gcc/x86_64-li

c++ - 如何在 Visual Studio 2015 中使用 clang 为 Windows 编译 C++

据我了解,VisualStudio2015附带了clang。首先,我虽然这仅适用于Android和iOS应用程序,但根据thisarticle也应该可以为Windows程序使用clang++前端。但是,我找不到相应的选项。那么您能否向我解释一下,如何将使用的编译器更改为c++项目中的clang(在VS2015RC社区版中)。 最佳答案 从VS2015Update1开始,您可以通过NewProject窗口安装“ClangwithMicrosoftCodeGen”模板,浏览至Installed->Templates->VisualC++

c++ - 可以 clang-format 将大括号添加到单行if语句等

clang-format是否可以选择为所有if()/do/while语句等添加大括号?例如if(i==42)std::cout到if(i==42){std::cout使用$clang-format--versionclang-formatversion3.6.0 最佳答案 clang-tidy可以使用FIXITS对您的代码进行语法更改clang-tidyYOUR_FILE.cpp-fix-checks="readability-braces-around-statements"--COMPILE_OPTIONS更新:clang-ti