草庐IT

Initialization

全部标签

c++ - 为什么只有在列表初始化的情况下才会出现缩小转换警告?

我有以下代码:classA{public:A(constunsignedintval):value(val){}unsignedintvalue;};intmain(){intval=42;Aa(val);Ab{val};//为什么只有在列表初始化使用的情况下才会出现缩小转换警告? 最佳答案 listinitialization自C++11开始引入,具有禁止内置类型之间的隐式缩小转换的功能。同时,另外两种使用括号和等号的“老式”(C++98起)初始化形式intval=42;Aa(val);Aa=val;不要改变它们的行为以符合列表初

c++ - 我应该使用虚拟 'Initialize()' 函数来初始化我的类的对象吗?

我目前正在与我的老师讨论类(class)设计,我们谈到了他大力推广的Initialize()函数。示例:classFoo{public:Foo(){//acquirelight-weightresourcesonly/defaultinitialize}virtualvoidInitialize(){//doallocation,acquireheavy-weightresources,loaddatafromdisk}//optionallyprovideaDestroy()function//virtualvoidDestroy(){/*...*/}};当然,一切都带有可选参数。现

c++ - 我应该使用虚拟 'Initialize()' 函数来初始化我的类的对象吗?

我目前正在与我的老师讨论类(class)设计,我们谈到了他大力推广的Initialize()函数。示例:classFoo{public:Foo(){//acquirelight-weightresourcesonly/defaultinitialize}virtualvoidInitialize(){//doallocation,acquireheavy-weightresources,loaddatafromdisk}//optionallyprovideaDestroy()function//virtualvoidDestroy(){/*...*/}};当然,一切都带有可选参数。现

c++ - int x{}; 之间有区别吗?和int x = 0;?

我理解intx{};是一种默认初始化,但它和写intx=0;完全一样吗? 最佳答案 在这种情况下结果是一样的。intx{};isakindofdefault-initialization不完全是。见defaultinitialization.intx{};是valueinitialization(C++11起),Thisistheinitializationperformedwhenavariableisconstructedwithanemptyinitializer.在这种情况下值初始化的影响(即既不是类类型也不是数组类型)是:

c++ - int x{}; 之间有区别吗?和int x = 0;?

我理解intx{};是一种默认初始化,但它和写intx=0;完全一样吗? 最佳答案 在这种情况下结果是一样的。intx{};isakindofdefault-initialization不完全是。见defaultinitialization.intx{};是valueinitialization(C++11起),Thisistheinitializationperformedwhenavariableisconstructedwithanemptyinitializer.在这种情况下值初始化的影响(即既不是类类型也不是数组类型)是:

c++ - 调用转换函数后是否调用了移动构造函数?

考虑这个例子:structT{};structS{operatorT();};Ss;Tt=s;[dcl.init]将带我们到[over.match.copy],它将找到转换函数operatorT()。但是我们是否已经完成了,还是我们必须调用T(T&&rhs),将rhs绑定(bind)到operatorT()的返回>通过[dcl.init.ref]?C++11和C++1z对于这个问题的答案有什么不同吗? 最佳答案 这属于[dcl.init]/17.6.3,这很清楚重载决议选择转换函数后会发生什么:Thefunctionselected

c++ - 调用转换函数后是否调用了移动构造函数?

考虑这个例子:structT{};structS{operatorT();};Ss;Tt=s;[dcl.init]将带我们到[over.match.copy],它将找到转换函数operatorT()。但是我们是否已经完成了,还是我们必须调用T(T&&rhs),将rhs绑定(bind)到operatorT()的返回>通过[dcl.init.ref]?C++11和C++1z对于这个问题的答案有什么不同吗? 最佳答案 这属于[dcl.init]/17.6.3,这很清楚重载决议选择转换函数后会发生什么:Thefunctionselected

c++ - 什么时候将引用进行零初始化?

第8.5/6条草案N3797说:Tozero-initializeanobjectorreferenceoftypeTmeans:...ifTisareferencetype,noinitializationisperformed.我想要一个零初始化的引用示例。 最佳答案 后来标准说“每个静态存储持续时间的对象在程序启动时在任何其他初始化发生之前都被初始化为零。”所以如果你有例如在全局范围内intx;int&r=x;r首先被零初始化,然后被x初始化。作为引用,零初始化没有任何意义,所以它只是技术性的。

c++ - 什么时候将引用进行零初始化?

第8.5/6条草案N3797说:Tozero-initializeanobjectorreferenceoftypeTmeans:...ifTisareferencetype,noinitializationisperformed.我想要一个零初始化的引用示例。 最佳答案 后来标准说“每个静态存储持续时间的对象在程序启动时在任何其他初始化发生之前都被初始化为零。”所以如果你有例如在全局范围内intx;int&r=x;r首先被零初始化,然后被x初始化。作为引用,零初始化没有任何意义,所以它只是技术性的。

c++ - 常量引用的文字初始化

以下代码如何在C++中工作?合乎逻辑吗?constint&ref=9;constint&another_ref=ref+6;为什么C++允许const引用的字面量初始化,而非const引用却不允许这样做?例如:constintdays_of_week=7;int&dof=days_of_week;//error:nonconstreferencetoaconstobject这可以通过以下事实来解释:非常量引用可用于更改它所引用的变量的值。因此,C++不允许对const变量进行非常量引用。这可能是一种解释吗?C++不允许:int&ref=7;因为那不合逻辑,但是:constint&ref