4

阅读同事编写的一些代码,我偶然发现了使用构造函数语法来初始化原始类型变量。即如下所示:

#include <iostream>

int main()
{
    using namespace std;

    // initialized using assignement syntax (copy initialisation)
    int titi = 20;
    cout << "titi=" << titi << "\n"; // got 20 in titi, it works

    // initialized using constructor syntax (direct initialization)
    int toto(10);
    cout << "toto=" << toto << "\n"; // got 10 in toto, it works
}

我的自然倾向是坚持使用赋值语法,因为它是历史性的,而且很简单,并且存在明显的兼容性问题(构造函数语法不符合有效 C 的条件)。

我仍然想知道这两种语法之间是否还有其他不明显的区别?如果它们实际上是同一个意思?考虑到例如未来的维护/代码演变问题或可读性问题,一种或另一种形式的优缺点是什么?

4

2 回答 2

3

对于诸如 之类的简单类型int,没有区别。对于类类型,您所说的“构造函数语法”称为直接初始化,而您所说的“赋值语法”称为复制初始化。除非类支持复制,否则您不能使用复制初始化,因此倾向于直接初始化(需要注意的是必须担心最令人头疼的解析问题)。然后有些人以同质性为由主张在任何地方都支持直接初始化语法:在任何地方都使用相同的格式。

于 2013-07-17T08:57:13.000 回答
2

构造函数语法在处理模板时很有用,因为您不知道类型是原始类型还是类。

于 2013-07-17T08:52:50.137 回答