[英]Direct Initialization vs Copy Initialization for Primitives
在初始化int
或指针等原始类型时,可以使用复制初始化或直接初始化。
int a = 10;
int b(10);
尽管后一种方式更适用于具有构造函数的对象,但我没有看到人们将它用于原语。 我知道使用 '=' 运算符是一种“更自然”(尤其是对于数字),但有没有人在现实生活中的代码中编写类似的东西:
for (int i(0); i < 5; ++i) {
cout << i << endl;
}
谢谢。
编辑:该问题询问有关编码 styles 和最佳实践而不是技术实施的问题。
两者都使用复制构造函数进行初始化,即使第一个看起来像赋值。 这只是语法糖。
您可以使用 class 轻松检查它,该 class 在复制构造时会打印出一些东西,而在分配时会打印出一些不同的东西。
而 int 是一个原始的甚至没有发挥作用。
有些人这样做是为了保持一致。
在模板内,代码可以是
for (T i(0); i < 5; ++i) {
cout << i << endl;
}
并在任何地方都以这种方式编写会使编码风格保持一致。
我曾经有一个同事这样做:
for (int i(0); i < 5; ++i) {
cout << i << endl;
}
它真的让每个人都生气了。 使用i = 0
比i(0)
更容易阅读代码。 也许不是在这个例子中,但作为一般规则,它是。
即使对于复杂的对象,我总是更喜欢i = 0
风格,它只是让读者感觉更自然,任何体面的编译器都会优化生成的代码,因此几乎没有性能损失。
我更喜欢i = 0
风格,它更容易阅读,你也可以像这样使用它:
if (int i = some_function())
{
}
也适用于指针,以及可转换为 bool 的所有其他类型:
if (const int* p = some_function())
{
}
if (shared_ptr<const int> q = some_function())
{
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.