c++ - 为什么初始化列表初始化需要堆分配数组的大小?

标签 c++ c++11 initialization initializer-list

虽然我会写

int n[] {1, 2, 3};

我不会写

int *m = new int[] {1, 2, 3};

应该是

int *m = new int[3] {1, 2, 3};

这是什么原因?

最佳答案

请记住,new 实际上是 C++ 中的运算符。

这是因为new操作符是如何定义的;也就是说,它需要明确地将请求的内存大小作为输入参数。因此,它不会由初始化列表成员的数量推导出来。

关于c++ - 为什么初始化列表初始化需要堆分配数组的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30664512/

相关文章:

c++ - MFC Tab 顺序以编程方式

c++ - 在 C++0x 中忽略收缩转换的后果是什么

java - 用Java初始化Othello Game Board

C++:boost: 按值参数传递

c++ - 等待按钮按下(QT)

c++ - C++构造函数中char的默认值

c++ - 是否可以在运行时选择可以访问类私有(private)成员的函数?

c++ - 在 Windows 上用 clang 编译 c++11 程序时出错

c - 标记结构初始化、函数及其参数

java - 使用初始化程序在构造函数 VS 中完成工作