草庐IT

c++ - std::make_shared 是否执行值初始化(GCC 和 clang 不同意)?

我的意思可以用下面的例子来解释:autop=std::make_shared();是int变量默认初始化(因此具有垃圾值)或值初始化(因此具有零值)?我已经在GCC5.2和clang3.6上进行了测试,前者进行值初始化,后者进行默认初始化。我想知道标准对此有何规定?在我看来,现代C++在这种情况下绝对应该执行值初始化。 最佳答案 是的。N379720.8.2.2.6AllocatesmemorysuitableforanobjectoftypeTandconstructsanobjectinthatmemoryviatheplace

c++ - Clang 3.1 和 C++11 支持状态

来自clang的C++11支持状态网站,http://clang.llvm.org/cxx_status.html,上面写着,“InitializerList”和“LambdaExpression”都是从3.1版本开始支持的。但是,使用LLVM/Clang中继(3.2),针对初始化列表和lambda表达式进行编译会产生错误消息。有谁知道Clang>3.1是否支持这些功能? 最佳答案 默认情况下,clang++不会启用C++11功能-你有topassanadditionalflagduringcompilation.clang++-s

c++ - 未在 clang++ 中编译的具有指向方法的指针的嵌套模板类

SSCCE我的问题是:templateclassMyClass{templatestructwrapper{virtualvoidcall();};};templatetemplate::*M)()const>voidMyClass::wrapper::call(){}此代码在gcc中编译但失败并出现错误:error:nestednamespecifier'MyClass::wrapper::'fordeclarationdoesnotreferintoaclass,classtemplateorclasstemplatepartialspecializationvoidMyClass

c++ - 为什么 gcc 和 clang 允许我构造一个抽象类?

以下代码在各种gcc和clang版本上编译-当使用gcc5.3.1编译和运行时,它会打印A()然后以纯虚拟调用错误中止。#includeclassA{public:A(){printf("A()\n");}virtualvoidb()const=0;};intmain(){constA&a{};a.b();return0;}我意识到将引用绑定(bind)到临时对象并不理想(尽管我认为这种情况已被某种生命周期延长所涵盖)-但在尝试调用采用常量引用如:Foo({});为方便起见,这里有一个使用clang3.2编译的示例:CompilerExplorer 最佳答案

c++ - 我应该下载哪个 Clang 编译器?

我想在我的系统上安装Clang编译器。我去了thislink,但是那里有这么多的下载选项让我感到困惑,我应该下载哪个版本?我正在使用戴尔的笔记本电脑:Windows7Basic64位。我已经安装了MinGW4.5.0版。我还安装了VisualStudio2008和2010。你认为对我来说最好的选择是什么?我应该下载哪个Clang?我应该如何配置它?我将第一次使用Clang。所以建议我最好的选择!顺便问一下,我可以配置Clang(或VisualStudio),以便VisualStudio可以使用Clang编译器来编译我的C和C++代码吗?编辑:downloadpage是什么意思神秘地说“

c++ - 变体的 get<string> 在 clang++ 下失败,但在 g++ 下失败

以下代码:variantx="abc";cout(x)在g++(7.2版)下工作正常。但是,当使用libstdc++在clang++(5.0版)下编译时,我在get方法中得到以下错误:/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/7.2.0/../../../../include/c++/7.2.0/variant:238:46:fatalerror:cannotcast'std::variant,std::allocator>>'toitsprivatebaseclass'std::__detail::__variant::_Variant_st

c++ - static_assert 依赖于非类型模板参数(gcc 和 clang 的不同行为)

templatestructHitchhiker{static_assert(sizeof(answer)!=sizeof(answer),"Invalidanswer");};templatestructHitchhiker{};在尝试使用static_assert禁用常规模板实例化时,我发现clang中的上述代码即使在模板未实例化时也会生成断言错误,而gcc仅在使用42以外的参数实例化Hitchhiker时才会生成断言错误。摆弄我发现这个断言:templatestructHitchhiker{static_assert(sizeof(int[answer])!=sizeof(int

c++ - 使用来自 clang 的进位代码产生良好的添加

我正在尝试生成添加两个由多个机器字组成的数字的代码(当前使用clang++-3.8)。目前为了简化事情,我只添加128位数字,但我希望能够概括这一点。首先是一些类型定义:typedefunsignedlonglongunsigned_word;typedef__uint128_tunsigned_128;还有一个“结果”类型:structResult{unsigned_wordlo;unsigned_wordhi;};第一个函数,f,接受两对无符号字并返回结果,作为中间步骤,将这两个64位字放入一个128位字中,然后再相加,如下所示:Resultf(unsigned_wordlo1,u

c++ - C++ 中重载的 lambda 以及 clang 和 gcc 之间的区别

我正在玩一个在C++中重载lambda的技巧。具体来说://Forstd::function#include//Forstd::string#include//Forstd::cout#includetemplatestructoverload:F...{overload(F...f):F(f)...{}};templateautomake_overload(F...f){returnoverload(f...);}intmain(){std::functionf=[](intx,inty){returnx+y;};std::functiong=[](doublex,doubley){

c++ - operator++ 作为后缀和前缀都不适用于 clang

我试图写一个既可以用作前缀又可以用作后缀运算符的运算符#include#includestructB{//...};templatevoidoperator++(B,T...){std::coutGCC可以编译并正常工作,但是clang说main.cpp:9:24:error:parameterofoverloadedpost-incrementoperatormusthavetype'int'(not'T...')voidoperator++(B,T...){谁是对的?感谢任何帮助我了解GCC行为的人。我提交了一份新的Clang错误报告:http://llvm.org/bugs/sh