在c++中,int a = 5和int a(5)是等价的

Are int a = 5 and int a(5) equivalent in C++?

本文关键字:int c++      更新时间:2023-10-16

int a = 5int a(5)在stdout上显示时产生相同的输出。int* b = new intint* b(new int)似乎是相同的。这只是初始化变量和声明指针的两种不同方式,还是有更大的含义?坦率地说,我不知道可以在没有赋值操作符的情况下初始化原始数据类型

是的,它们是一样的。

另一方面,对于一个类类型,它们有微妙的不同。

struct S {
    S(int);
    S(const S&);
};
S s(5);   // 1
S ss = 5; // 2

标记为1的行使用S(int)构造s。标记为2的行稍微复杂一些。形式上,它使用S(int)构造一个S类型的临时对象,然后使用S(const S&)将该临时对象复制到ss中。

然而,编译器被允许跳过拷贝,直接用S(int)构造ss,实际上,每个编译器都这样做。但是复制构造函数仍然必须存在并且是可访问的;只有它的使用被省略。因此,如果S(const S&)被标记为私有,那么标记为2的行将是错误的。你可以通过写一个复制构造函数来尝试,它写一些东西给std::cout,告诉你它何时被调用;编译器被允许跳过这个调用,即使它有明显的副作用。