草庐IT

c++ - constexpr 可以和 volatile 结合使用吗?

以下代码段在Clang3.5中运行良好,但在GCC4.9.2中运行良好:intmain(){constexprvolatileinti=5;}有错误:error:both'volatile'and'constexpr'cannotbeusedhere如果我检查Clang生成的程序集,它会按预期显示5:movl$5,-4(%rsp)在GCC中,constexprinti=5被优化掉了,但是volatileinti=5也在程序集中显示了5。volatileconstinti=5在两个编译器中编译。事物同时是volatile和const并不是一个陌生的概念。按照标准,哪个编译器是正确的?

c++ - 将 const 限定符应用于模板参数时的不同编译器行为

考虑以下示例(godbolt):#includetemplateconstT*as_const(T*p){returnp;}voidf(){}templatevoidg(T*){std::coutvoidg(constT*){std::coutGCC和Clang都可以编译它,但生成的可执行文件会产生不同的输出:用GCC编译的版本打印A,而用Clang编译的版本打印B。你能解释一下这个区别吗?更新:正如@VTT所指出的,即使as_const被删除,也会观察到相同的差异。 最佳答案 您似乎遇到了尚未解决的标准缺陷。所以回答“哪个编译器是

c++ - 将 const 限定符应用于模板参数时的不同编译器行为

考虑以下示例(godbolt):#includetemplateconstT*as_const(T*p){returnp;}voidf(){}templatevoidg(T*){std::coutvoidg(constT*){std::coutGCC和Clang都可以编译它,但生成的可执行文件会产生不同的输出:用GCC编译的版本打印A,而用Clang编译的版本打印B。你能解释一下这个区别吗?更新:正如@VTT所指出的,即使as_const被删除,也会观察到相同的差异。 最佳答案 您似乎遇到了尚未解决的标准缺陷。所以回答“哪个编译器是

c++ - 使用 Libc++ undefined reference 使用 Clang 进行编译

第一对太长了,无法引用。当我尝试使用来自SVN的clang和libc++编译clang++-stdlib=libc++../main.cc...时出现此错误。error:undefinedreferenceto'typeinfoforcharconst*'error:undefinedreferenceto'__cxa_allocate_exception'error:undefinedreferenceto'__cxa_throw'/tmp/cc-pbn00y.o:../main.cc:functionstd::__1::deque>::__add_back_capacity():e

c++ - 使用 Libc++ undefined reference 使用 Clang 进行编译

第一对太长了,无法引用。当我尝试使用来自SVN的clang和libc++编译clang++-stdlib=libc++../main.cc...时出现此错误。error:undefinedreferenceto'typeinfoforcharconst*'error:undefinedreferenceto'__cxa_allocate_exception'error:undefinedreferenceto'__cxa_throw'/tmp/cc-pbn00y.o:../main.cc:functionstd::__1::deque>::__add_back_capacity():e

c++ - constexpr 指针值

我正在尝试声明一个初始化为某个常量整数值的constexpr指针,但是clang正在挫败我的所有尝试:尝试1:constexprint*x=reinterpret_cast(0xFF);test.cpp:1:20:note:reinterpret_castisnotallowedinaconstantexpression尝试2:constexprint*x=(int*)0xFF;test.cpp:1:20:note:castwhichperformstheconversionsofareinterpret_castisnotallowedinaconstantexpression尝试3

c++ - constexpr 指针值

我正在尝试声明一个初始化为某个常量整数值的constexpr指针,但是clang正在挫败我的所有尝试:尝试1:constexprint*x=reinterpret_cast(0xFF);test.cpp:1:20:note:reinterpret_castisnotallowedinaconstantexpression尝试2:constexprint*x=(int*)0xFF;test.cpp:1:20:note:castwhichperformstheconversionsofareinterpret_castisnotallowedinaconstantexpression尝试3

c++ - Clang C++ 交叉编译器 - 从 Mac OS X 生成 Windows 可执行文件

我使用Clang编译器在我的Mac上使用Xcode创建了一个C++应用程序。我想编译我的源文件以创建一个可以在Windows机器上运行的可执行文件,但是我无法让Clang为我生成一个可执行文件。这是我尝试过的:clang++-std=c++11-stdlib=libc++-archx86_64class1.cppclass2.cpp...-oexecutable.exe这会创建一个可执行文件,但它不会运行(Windows给我一个错误,与应用程序是16位有关-不明白这一点-不能在64位上运行)clang++-std=c++11-stdlib=libc++-targeti386-pc-wi

c++ - Clang C++ 交叉编译器 - 从 Mac OS X 生成 Windows 可执行文件

我使用Clang编译器在我的Mac上使用Xcode创建了一个C++应用程序。我想编译我的源文件以创建一个可以在Windows机器上运行的可执行文件,但是我无法让Clang为我生成一个可执行文件。这是我尝试过的:clang++-std=c++11-stdlib=libc++-archx86_64class1.cppclass2.cpp...-oexecutable.exe这会创建一个可执行文件,但它不会运行(Windows给我一个错误,与应用程序是16位有关-不明白这一点-不能在64位上运行)clang++-std=c++11-stdlib=libc++-targeti386-pc-wi

c++ - g++ 和 clang++ 不同的行为与静态成员的递归初始化

给定以下代码:#includetemplatestructfoo{staticstd::size_tvalue;};templatestd::size_tfoo::value=0u;templatestd::size_tfoo::value=1u+foo::value;intmain(){std::cout::value::value::value::value其中静态成员value模板结构foo是递归初始化的,我从g++得到不同的输出:3210来自clang++:1110看来g++初始化了foo::value递归地使用foo::value的初始化值其中clang++对foo::val