c++的 new int{10} 和 new int(10) 有什么区别?

new int{10}
new int(10)

有什么区别? {} 和 () ?

阅读 3.2k
2 个回答

对于 char, int, double 等基础类型来说,这两种初始化的方法是等同的。

class A
{
public:
    int a;
    // A(int _a) { a = _a; }
}

A* a1 = new A(10);
A* a2 = new A{10}

在 new 的对象是一个类的时候就有区别了,用(),如果没有构造函数会直接报错,用{}会直接按列表初始化来处理。如果有构造函数,这两种方式都可以正确的处理,{}也会去调用构造函数。所以C11之后,尽量用{}来做初始化构造。

上面实例两处有同样的效果,申请 int 空间同时初始化。

其它地方还是有较多不同,比如在容器类初始化:
vector<int> v{5, 2}; // 容器有两个元素 5,2
vector<int> v(5, 2); // 容器有5个元素,值都为2

{} Uniform Initialization,B 站侯捷老师有简单视频讲解;
《Effective Modern C++》 对两处的不同和带来的影响做了深度分析。

我个人现在初始化以 () 为主,实在满足不了功能时用 {}, 像上面例子。

推荐问题
宣传栏