C++ 基元类型初始化的构造函数语法和赋值语法之间的差异

C++ 基元类型初始化的构造函数语法和赋值语法之间的差异,c++,C++,在阅读同事编写的一些代码时,我无意中发现了使用构造函数语法来初始化基本类型变量。例如: #include <iostream> int main() { using namespace std; // initialized using assignement syntax (copy initialisation) int titi = 20; cout << "titi=" << titi << "\n";

在阅读同事编写的一些代码时,我无意中发现了使用构造函数语法来初始化基本类型变量。例如:

#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
}
#包括
int main()
{
使用名称空间std;
//使用赋值语法初始化(复制初始化)
int titi=20;

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

对于简单类型,如
int
,没有区别 类类型,您称之为“构造函数语法”的是 直接初始化,以及您称之为“赋值语法”的 复制初始化。您不能使用复制初始化,除非 该类支持复制,因此倾向于选择直接复制 初始化(需要注意的是 最令人烦恼的问题是语法分析)。一些人随后表示赞成 基于
同质性:在任何地方都使用相同的格式。

一种是复制初始化,另一种是直接初始化。初始化和赋值:@p1rox,这里没有赋值。两种初始化。顺便说一句,复制初始化不是赋值。@lulyon:复制和赋值有什么区别(除了所用的词之外)?我总是调用
=
运算符赋值运算符,它应该更改l值,不是吗?当使用
=
定义引用时,我称之为别名,但可能是我也错了,我应该调用该赋值?在使用模板时,是否可以保证所有类都有复制构造函数?@thomas In什么意义?您通常会对模板参数类型施加约束,例如CopyConstructable和Assignable(如果您需要这些属性);几乎不可能编写一个模板,该模板可以与用户可以编写的任何类一起工作。(但请注意,直接初始化不需要复制构造函数。)@James Kanze,非常好的观点,谢谢。很好的观点,但由于我所说的代码不是模板,我想我没有理由这么做。