int a = 5
和 int a(5)
在标准输出上显示时产生相同的输出。另外 int* b = new int
和 int* 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&)
被标记为私有(private),则标记为 2 的行将是错误格式的。您可以通过编写一个复制构造函数来尝试这一点,该构造函数将某些内容写入 std::cout
以告诉您它何时被调用;允许编译器跳过该调用,即使它有明显的副作用。
关于c++ - int a = 5 和 int a(5) 在 C++ 中是否等价?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40317932/