草庐IT

c++ - is_constructible 和 is_destructible 不受 friend 声明的影响

在评估std::is_constructible和std::is_destructible时,Clang和GCC似乎不遵守friend声明。关于`is_constructible,cppreference.comsays:AccesschecksareperformedasiffromacontextunrelatedtoTandanyofthetypesinArgs.Onlythevalidityoftheimmediatecontextofthevariabledefinitionisconsidered.(该站点没有解释is_destructible如何处理访问检查,但访问修饰符

c++ - 为什么编译器不能优化 std::string concat?

我尝试这样简单的代码:#include#includeintmain(){conststd::strings=std::string("a")+"b";puts(s.c_str());return0;}我希望编译器(gcc4.8.2/clang3.5.0)优化这样的代码intmain(){puts("ab");return0;}但我得不到这样的结果,我尝试了不同的选项,如“-Ofast”、“-flto”、“-static-libstdc++”,但总是在反汇编输出中看到三个函数调用:...callq0x4017e0...callq0x401690...callq0x401490第一个是调

c++ - 使用 ccache/clang 编译 Qt 代码时避免多余的警告

我遇到了与thisguy相同的问题.使用clang和ccache编译我每次遇到Q_OBJECT时都会收到此警告:warning:explicitlyassigningvalueofvariableoftype'int'toitself[-Wself-assign]这只会在使用ccache时发生,单独使用clang编译相同的代码可以正常工作。似乎有一个similarissuewithmacroexpansions这里建议的解决方案是设置环境变量CCACHE_CPP2=yes不幸的是,这似乎并不能解决我的问题,或者我做错了。我试过:从命令行构建CCACHE_CPP2=yes忍者export

c++ - 如何在命名空间范围内转发声明一个 constexpr 对象?

在clang(trunk)上,我可以转发声明一个对象,该对象稍后将使用constexpr定义,如下所示://Fwd-declarationsstructS;externconstSs;//(...later)definitionsstructS{};constexprSs{};Gcc4.8不喜欢这样,告诉我前向声明和定义在constexpr中不同。gcc说的是实话,还是这只是一个gcc错误? 最佳答案 我在我的C++11标准拷贝中找不到任何明确禁止constexpr-ness声明和定义之间的不匹配的语言,但我确实明确地看到了语言禁止

c++ - 在应用程序中嵌入 C++ 编译器

着色器不是很酷吗?您可以只输入一个普通字符串,只要它是有效的源代码,它就会编译、链接和执行。我想知道是否有一种方法可以将GCC嵌入到用户应用程序中,以便它“自给自足”,例如具有编译与自身兼容的native二进制文件的内部能力。到目前为止,我一直在从应用程序内部启动的进程中调用独立的GCC,但我想知道是否有一些API或其他东西可以允许“直接”使用而不是独立的编译器。另外,在可能的情况下,是否允许?编辑:虽然最初的问题是关于CGG的,但我也愿意了解如何嵌入LLVM/Clang的信息。现在针对无法将2+2放在一起的人进行特殊编辑:问题询问如何将GCC或Clang嵌入可执行文件中,以允许从代码

c++ - CMake 不生成 compile_commands.json

我是CMake的新手,我正在尝试创建compile_commands.json文件以与clang一起使用,但我在生成文件时遇到了一些困难,我不确定为什么。我已经能够使用cmake编译我在下面的二进制person,但在成功之后我无法让它输出编译命令。我也尝试过使用-DCMAKE_EXPORT_COMPILE_COMMANDS=ON标志,但这也没有用。到目前为止没有错误,但也没有输出。这是我的CMakeLists.txt文件的样子:cmake_minimum_required(VERSION2.6)project(Tutorial)set(CMAKE_EXPORT_COMPILE_COMM

c++ - 访问静态 constexpr float 成员时 undefined reference

此代码有效:structBlob{staticconstexprinta=10;};intmain(){Blobb;autoc=b.a;}但是如果我将int更改为float我会得到一个错误:structBlob{staticconstexprfloata=10.0f;};/tmp/main-272d80.o:Infunctionmain':main.cpp:(.text+0xe):undefinedreferencetoBlob::a'为什么我不能以这种方式使用constexprfloat?编译器:Ubuntuclang版本3.5.0-4ubuntu2(tags/RELEASE_350

c++ - 错误 : base class 'A1' has private copy constructor

在windows平台上使用Clang3.7见以下代码:classA1{public:A1(char*name){}virtual~A1(){}private:A1(constA1&){}};classB1:publicA1{public:B1():A1(""){}};我收到以下错误:MyFile(31):8:error:baseclass'A1'hasprivatecopyconstructorB1():A1(""){}^MyFile(25):2:note:declaredprivatehereA1(constA1&){}^公开A1复制构造函数,消除错误!这里发生了什么?注意:通过改变

c++ - 将库搜索路径添加到 clang

如何将/usr/local/lib添加到我的clang库搜索路径?这是我使用clang-Xlinker-v列出我的库搜索路径时看到的: 最佳答案 可以添加为环境变量吗?这应该有效:exportLIBRARY_PATH=$LIBRARY_PATH:/usr/local/lib注意,它是LIBRARY_PATH,而不是LD_LIBRARY_PATH。另一方面,如果这对您不起作用,您应该使用标志进行编译:-L/usr/local/lib这也应该足够了。编辑:顺便说一句,我不知道您为什么使用反斜杠而不是斜杠……这需要解释。总是使用斜杠。即使

c++ - 为什么 gcc 警告使用 std::tuple 和虚拟继承调用非平凡的移动赋值运算符?

在下面的例子中,gcc7给出了警告:defaultedmoveassignmentfor'B'callsanon-trivialmoveassignmentoperatorforvirtualbase'A'[-Wvirtual-move-assign]如果我创建一个std::tuple目的。Clang5没有报告任何问题。如果vector,问题也会消失从Base中删除.Example.#include#includeclassBase{public:virtual~Base();std::vectorv;};classA:publicBase{};classB:publicvirtual