草庐IT

c++ - 为什么大括号初始化赋值会用垃圾填充变量?

我相信在使用大括号初始化时,变量会被赋予默认值。但是我错了。在下面的例子中:#include#include#includeclassA{public:A(){}~A(){}intvar1;int32_tvar2;int64_tvar3;std::stringvar4;doublevar5;floatvar6;std::stringinfo()const{return"var1="+std::to_string(var1)+""+"var2="+std::to_string(var2)+""+"var3="+std::to_string(var3)+""+"var4="+var4+""

c++ - 带或不带括号实例化类?

这个问题在这里已经有了答案:Defaultconstructorwithemptybrackets(9个回答)关闭4年前。#includeusingnamespacestd;classCTest{intx;public:CTest(){x=3;coutCTestt1当然会打印“A”。但似乎在t2()时没有发生任何事情,但代码运行良好。那么我们是否在不带参数的情况下使用这些括号?或者为什么我们可以这样使用它?

c++ - 为什么当我使用不带括号的函数时 C++ 编译器不报错?

我在看一个friend发给我的一些代码,他说:“它可以编译,但不起作用”。我看到他使用了没有括号的函数,像这样:voidfoo(){cout我首先说的是“使用括号,你必须这样做”。然后我测试了该代码-它确实可以编译,但在执行时不起作用(没有显示“Helloworld”)。那么,为什么它可以编译(编译器GCC4.7根本没有警告),但为什么不起作用? 最佳答案 如果您将警告级别设置得足够高,它肯定会发出警告。函数名的计算结果为函数的地址,并且是一个合法的表达式。通常保存在一个函数指针中,void(*fptr)()=foo;但这不是必需的

c++ - 使用花括号初始化列表调用显式构造函数 : ambiguous or not?

考虑以下几点:structA{A(int,int){}};structB{B(A){}//(1)explicitB(int,int){}//(2)};intmain(){Bparen({1,2});//(3)Bbrace{1,2};//(4)}(4)中brace的构造清楚明确地调用了(2)。在clang上,(3)中paren的构造明确调用了(1),而在gcc5.2上,它无法编译:main.cpp:Infunction'intmain()':main.cpp:11:19:error:callofoverloaded'B()'isambiguousBparen({1,2});^main.c

c++ - 获取 clang 格式以将多行函数调用的右括号放在单独的行上?

我一直在使用clang格式来帮助保持我的代码整洁。对于多行函数调用,有什么方法可以让clang将右括号放在它自己的行上?示例:它现在在做什么:increment_and_call_on_match(clique_colors,0,max_clique_color,[&](intclique_color){comms.emplace_back(context.split_by_color(clique_color));},[&](int){context.split_by_color();});我想要的:increment_and_call_on_match(clique_colors,

带有大括号初始值设定项的 C++ 隐式转换

我最近在某处(不记得在哪里)读到关于使用大括号允许多个用户定义的转换,但是构造函数转换和我不理解的转换方法转换之间似乎有区别。考虑:#includeusing::std::string;structC{C(){}};structA{A(conststring&s){}//Makestd::stringconvertibletoA.operatorC()const{returnC();}//MakesAconvertibletoC.};structB{B(){}B(constA&a){}//MakesAconvertibletoB.};intmain(){Bb;Cc;//Thiswork

c++ - 变量名后的括号 C++

使用以下源代码(它是开源代码),我从未在变量名后看到括号。UDefEnergyH绝对是一个变量,如第1行所示。谁能告诉我这些括号在做什么?真的不知道如何谷歌这个。谢谢。bins[0]=UDefEnergyH.GetLowEdgeEnergy(size_t(0));vals[0]=UDefEnergyH(size_t(0));//Don'tknowwhatthisdoes???sum=vals[0];for(ii=1;ii在头文件中声明:G4PhysicsOrderedFreeVectorUDefEnergyH; 最佳答案 opera

c++ - 空括号调用默认构造函数还是采用 std::initializer_list 的构造函数?

以下引自EffectiveModernC++(第55页):"Supposethatyouuseanemptysetofbracestoconstructanobjectthatsupportsdefaultconstructorandalsosupportsstd::initializer_listconstruction.Whatdoyouremptybracesmean?etc.Theruleisthatyougetdefaultconstruction."我用std::array试过这个:std::arrayarr{};并收到来自g++(版本4.8.2)的警告:warning:m

c++ - 将初始化列表包装在括号内有什么影响?

将初始化列表包含在括号内有什么影响?它只是列表初始化的另一种形式还是仅在某些情况下有效?例如,考虑a:structA{A(floata,floatb){}};intmain(){Ab(1.0f,0.0f);//Directinitalization,findsctorfor(float,float)Ac{1.0f,0.0f};//Listinitalization,findsamatchingctorAa({1.0f,0.0f});//Isthislistinitalization...whichisexpanded?} 最佳答案

c++ - 多对括号构造函数的含义

我不确定这段代码:someClass(std::list&)>>(&)(conststd::vector&)){...}someClass的构造函数,我相信,引用了一个函数列表,每个函数都会返回void并引用someType的vector.我不确定的是最后一对括号(conststd::vector&).是operator()的std::list在这里重载?此外,我想将std::list命名为参数,但我最初猜测someClass(std::list(&nameOfList)(...))没用,因为我无法访问nameOfList.begin(),例如。我会在这里做什么?谢谢。