我对 C++ 编程有点陌生。我在谷歌上找不到我的答案,所以希望它能在这里得到答案。
以下之间有区别吗
unsigned int counter{ 1 };
or
unsigned int counter = 1;
这本书使用了第一个选项,它让我感到困惑,因为它没有解释其中的区别。下面是我正在关注的书中的以下代码。
#include <iostream>
#include <iomanip>
#include <cstdlib> // contains function prototype for rand()
using namespace std;
int main()
{
for (unsigned int counter{ 1 }; counter <= 20; ++counter) {
cout << setw(10) << (1 + rand() % 6);
// if counter is divisible by 5, start a new line of output
if (counter % 5 == 0) {
cout << endl;
}
}
}
是的,它们是 C++ 中两种不同类型的初始化。
有关所有详细信息,您可以直接参考文档。
不过,我可以强调:
复制初始化比直接初始化不太宽松:显式构造函数不会转换构造函数,并且不考虑进行复制初始化。
初始化参考这里
For unsigned int
类型(例如您的情况),两个初始化之间没有真正的区别。
Note第一个语句中花括号的用法 (unsigned int counter{ 1 }
) 提供了一个额外的约束:
否则 (如果 T 不是类类型),如果花括号初始化列表只有一个元素 [...],则 T 为直接初始化[...], 除了那个不允许缩小转换.
换句话说,在初始化中使用大括号不允许数据松散。
That is:
unsigned int counter{ 12.3 }; // error!!!
无法编译,因为您试图用浮点值初始化整数。
请注意,这是初始化中花括号的“属性”。与初始化类型没有严格关系.
其实你也可以这样写:
unsigned int counter = { 12.3 }; // error!
相反,这是一个复制初始化,但使用花括号不允许缩小转换范围。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)