原始类型初始化的构造函数语法和赋值语法之间的差异

时间:2013-07-17 08:47:25

标签: c++

阅读同事写的一些代码我偶然发现使用构造函数语法初始化一个原始类型变量。就像下面这样:

#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
}

我的自然倾向是坚持使用assignement语法,因为它是历史语法,并且它没有脑子,并且存在明显的兼容性问题(consructor语法不符合有效C的条件)。

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

2 个答案:

答案 0 :(得分:3)

对于int等简单类型,没有区别。对于 类类型,你所谓的“构造函数语法”被称为 直接初始化,以及你所谓的“赋值语法” 复制初始化。除非,否则不能使用复制初始化 该类支持复制,因此倾向于直接选择 初始化(然后需要担心的是警告 最令人烦恼的解析问题)。然后有些人赞成赞成 直接初始化语法到处都是基于 同质性:在任何地方使用相同的格式。

答案 1 :(得分:2)

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