繁体   English   中英

基元的直接初始化与复制初始化

[英]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 = 0i(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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM