草庐IT

c++ - 等号对大括号初始化有影响吗?例如。 'T a = {}' 与 'T a{}'

在C++11中有两种初始化变量的方法:Ta{something};Ta={something};我在我能想到的所有场景中都测试了这两个,但我没有注意到其中的差异。Thisanswer表明两者之间存在细微差别:ForvariablesIdon'tpaymuchattentionbetweentheTt={init};orTt{init};styles,Ifindthedifferencetobeminorandwillatworstonlyresultinahelpfulcompilermessageaboutmisusinganexplicitconstructor.那么,这两者有什么

c++ - 具有默认值的结构的大括号(聚合)初始化

使用默认值初始化结构很简单:structX{inta;intb=2;};使用大括号初始化器初始化结构也很简单:Xx={1,3};令人惊讶的是,在我删除默认值之前,初始化代码不会编译。那么,在这种情况下我将如何进行初始化呢?我想保留X一个没有c-tor的POD。 最佳答案 这里是一些与问题相关的文档:http://en.cppreference.com/w/cpp/language/aggregate_initialization在c++11您的代码无效。在c++14它再次有效。在C++11中,添加默认初始化会阻止大括号初始化有效。在

c++ - 具有默认值的结构的大括号(聚合)初始化

使用默认值初始化结构很简单:structX{inta;intb=2;};使用大括号初始化器初始化结构也很简单:Xx={1,3};令人惊讶的是,在我删除默认值之前,初始化代码不会编译。那么,在这种情况下我将如何进行初始化呢?我想保留X一个没有c-tor的POD。 最佳答案 这里是一些与问题相关的文档:http://en.cppreference.com/w/cpp/language/aggregate_initialization在c++11您的代码无效。在c++14它再次有效。在C++11中,添加默认初始化会阻止大括号初始化有效。在

c++ - 什么叫通过花括号赋值?可以控制吗?

这叫什么?Vec3foo={1,2,3};它可以通过运算符(operator)或其他方式控制吗?我可以指定这应该如何操作吗?例如,如果我有一些复杂的类,我可以使用它来分配变量吗?(只是出于好奇心的练习)。 最佳答案 这不是任务。那就是初始化。这种初始化只允许用于聚合,包括POD类。POD表示普通旧数据类型。例子,//thisstructisanaggregate(PODclass)structpoint3D{intx;inty;intz;};//sincepoint3Disanaggregate,sowecaninitializei

c++ - 什么叫通过花括号赋值?可以控制吗?

这叫什么?Vec3foo={1,2,3};它可以通过运算符(operator)或其他方式控制吗?我可以指定这应该如何操作吗?例如,如果我有一些复杂的类,我可以使用它来分配变量吗?(只是出于好奇心的练习)。 最佳答案 这不是任务。那就是初始化。这种初始化只允许用于聚合,包括POD类。POD表示普通旧数据类型。例子,//thisstructisanaggregate(PODclass)structpoint3D{intx;inty;intz;};//sincepoint3Disanaggregate,sowecaninitializei

c++ - 当有额外的括号时,在临时对象上调用用户定义的 operator+ 时出错

如果我有一个用户定义的operator+()如:classA{public:Aoperator+(A){returnA();}};然后以下工作按预期工作:Aa=A()+A();但是g++-4.7给出了以下错误消息:Aa=(A())+A();具体的错误信息是error:nomatchfor‘operator+’in‘+A()’。看起来(A())在表达式中被忽略了。我的问题是:Aa=(A())+A();是否应该编译,如果没有,为什么不呢?注意:当我执行#defineX(Identity())然后尝试执行X+X时,这发生在我身上。 最佳答案

c++ - 当有额外的括号时,在临时对象上调用用户定义的 operator+ 时出错

如果我有一个用户定义的operator+()如:classA{public:Aoperator+(A){returnA();}};然后以下工作按预期工作:Aa=A()+A();但是g++-4.7给出了以下错误消息:Aa=(A())+A();具体的错误信息是error:nomatchfor‘operator+’in‘+A()’。看起来(A())在表达式中被忽略了。我的问题是:Aa=(A())+A();是否应该编译,如果没有,为什么不呢?注意:当我执行#defineX(Identity())然后尝试执行X+X时,这发生在我身上。 最佳答案

c++ - 为什么我可以使用 operator= 而不是 operator== 与 C++11 大括号初始化器?

看这个例子:structFoo{inta;intb;booloperator==(constFoo&x){returna==x.a&&b==x.b;}};intmain(){Fooa;a={1,2};if(a=={1,2})//error:expectedprimary-expressionbefore‘{’token{}}a={1,2}行很好。大括号被转换为Foo以匹配隐式operator=方法的参数类型。如果operator=是用户定义的,它仍然有效。if(a=={1,2}})行错误,如图所示。为什么表达式{1,2}不转换为Foo以匹配用户定义的operator==方法?

c++ - 为什么我可以使用 operator= 而不是 operator== 与 C++11 大括号初始化器?

看这个例子:structFoo{inta;intb;booloperator==(constFoo&x){returna==x.a&&b==x.b;}};intmain(){Fooa;a={1,2};if(a=={1,2})//error:expectedprimary-expressionbefore‘{’token{}}a={1,2}行很好。大括号被转换为Foo以匹配隐式operator=方法的参数类型。如果operator=是用户定义的,它仍然有效。if(a=={1,2}})行错误,如图所示。为什么表达式{1,2}不转换为Foo以匹配用户定义的operator==方法?

c++ - [方括号]和*星号之间的区别

如果你写一个像这样的C++函数voidreadEmStar(int*arrayOfInt){}vsaC++functionlike:voidreadEmSquare(intarrayOfInt[]){}Whatisthedifferencebetweenusing[squarebrackets]vs*asterisk,anddoesanyonehaveastyleguideastowhichispreferrable,assumingtheyareequivalenttothecompiler?Forcompleteness,anexamplevoidreadEmStar(int*ar