草庐IT

c++ - CMake clang 和 c++0x

使用clang++时,如何让CMake在编译时使用-std=c++0x标志,但在链接时不使用?还有其他几篇关于使用clang作为编译器的帖子,但我没有找到任何关于设置c++标准的提示。这是我尝试过的:CMakeLists.txt:project(test)add_executable(mainmain.cxx)ClangOverride.txt:SET(CMAKE_C_FLAGS_INIT"-Wall-std=c99")SET(CMAKE_C_FLAGS_DEBUG_INIT"-g")SET(CMAKE_C_FLAGS_MINSIZEREL_INIT"-Os-DNDEBUG")SET(

带有 Clang 或 GCC 的 Mac 上的 C++11

我在MoutainLion上安装了Xcode4.5.2,并且我安装了最新的“命令行工具”,但是当我尝试使用g++或clang++进行编译时(以及选项-std=c++11-stdlib=libc++)我得到一个错误。使用g++:cc1plus:error:unrecognizedcommandlineoption"-std=c++11"cc1plus:error:unrecognizedcommandlineoption"-stdlib=libc++"使用clang++:clang:error:invaliddeploymenttargetfor-stdlib=libc++(requir

c++ - Clang 中不明确的运算符重载

考虑以下几点:templatestructC{};templatevoidoperator+(C&,U);structD:C{};structE{};templatevoidoperator+(C&,E);voidF(){Dd;Ee;d+e;}此代码在GCC-7和Clang-5上都能正常编译。operator+的选定重载是structE的重载。现在,如果发生以下变化:/*Put`operator+`insidetheclass.*/templatestructC{templatevoidoperator+(U);};也就是说,如果operator+被定义在inside类模板中,而不是o

c++ - 奇怪的 Clang 行为

看看这段代码:#include#includevoidfoo(int(*f)()){std::coutstd::string{returnstd::string("bla");};foo(bar);return0;}编译g++-otesttest.cpp-std=c++11导致:bla就像它应该做的那样。用编译它clang++-otesttest.cpp-std=c++11-stdlib=libc++导致:zsh:illegalhardwareinstruction./test并用它编译clang++-otesttest.cpp-std=c++11-stdlib=stdlibc++还导

c++ - 简单的 std::regex_search() 代码无法使用 Apple clang++ -std=c++14 编译

这是MCVE:#include#includestd::strings(){return"test";}intmain(){staticconststd::regexregex(R"(\w)");std::smatchsmatch;if(std::regex_search(s(),smatch,regex)){std::cout它编译得很好:$clang++-std=c++11main.cpp但不是:$clang++-std=c++14main.cpp后一种情况下的错误信息(使用-std=c++14):main.cpp:14:9:error:calltodeletedfunction'

c++ - C+ +'s "inline"- 对 GCC 和 Clang/LLVM 的提示有多强?

在C++中,关键字“inline”有两个用途。首先,它允许定义出现在多个翻译单元中。其次,它是对编译器的一个提示,一个函数应该在编译后的代码中内联。我的问题:在GCC和Clang/LLVM生成的代码中,关键字“inline”是否与函数是否内联有关系?如果是,在什么情况下?还是完全忽略了提示?请注意,这不是语言问题,而是特定于编译器的问题。 最佳答案 [警告:不是C++/GCC专家]你需要阅读inlinehere.Also,this,forGCC/C99.Theextenttowhichsuggestionsmadebyusingth

c++ - GCC 和 Clang 在 constexpr 构造函数上的不同行为

对于这个结构:structWrapper{intvalue;constexprexplicitWrapper(intv)noexcept:value(v){}Wrapper(constWrapper&that)noexcept:value(that.value){}};还有这个功能:constexprWrappermakeWrapper(intv){returnWrapper(v);}以下代码无法为Clang(AppleLLVM版本7.3.0)编译,但对于GCC(4.9+)编译正常,两者都使用-Wall-Wextra-Werror-pedantic-errors:constexprau

c++ - 成员未归零,clang++ 错误?

考虑以下代码:classA{public:inti;A(){}};classB{public:Aa;inti;};intmain(){B*p=newB{};std::coutia.i在clang++中使用-std=c++11编译,p->i结果为零,但p->a.i不是。只要它的类没有用户提供的构造函数,整个对象不应该归零吗?编辑:由于评论中有一些广泛的讨论,我认为最好在此处添加一些标准摘录:Tovalue-initializeanobjectoftypeTmeans:ifTisa(possiblycv-qualified)classtype(Clause9)withauser-provi

c++ - Clang 产生 GCC 不产生的非法指令

我发现Clang产生非法指令的情况,而gcc没有,在尝试this时问题。我的问题是:我做错了什么,还是Clang的实际问题?我将其归结为重现问题所需的最小片段。获取文件eigen.cpp:#include#defineEIGEN_MATRIXBASE_PLUGIN"eigen_matrix_addons.hpp"#includeintmain(){Eigen::Matrix2dA;A还有文件eigen_matrix_addons.hpp:friendstd::ostream&operator&>(m);}(参见here了解该文件的详细说明。简而言之,它的内容直接放在templatecl

c++ - Haskell 可以像 Clang/GCC 一样优化函数调用吗?

我想问一下Haskell和C++编译器是否可以以相同的方式优化函数调用。请看下面的代码。在以下示例中,Haskell比C++快得多。我听说Haskell可以编译到LLVM并且可以通过LLVMchannel进行优化。此外,我听说Haskell在后台进行了一些重大优化。但是以下示例应该能够以相同的性能工作。我想问:为什么我在C++中的示例基准比在Haskell中慢?是否可以进一步优化代码?(我使用的是LLVM-3.2和GHC-7.6)。C++代码:#include#includeintb(constintx){returnx+5;}intc(constintx){returnb(x)+1;