在我正在阅读的书中(来自Herbert Schildt的 C ++ Complete Reference ),它说没有使用new
分配的数组可以有一个初始化器。
我不能使用new
初始化动态分配的数组吗?如果不是什么原因呢?
答案 0 :(得分:18)
这不太正确(你几乎肯定会给自己一个替代参考),你被允许一个空的初始化器(()
),它将值初始化阵列但是,你使用数组new时,无法单独初始化数组元素。 (见ISO / IEC 14882:2003 5.3.4 [expr.new] / 15)
E.g。
int* p = new int[5](); // array initialized to all zero
int* q = new int[5]; // array elements all have indeterminate value
没有根本原因不允许更复杂的初始化程序,只是因为C ++ 03没有语法结构。在下一个C ++版本中,您将能够做到这一点。
int* p = new int[5] {0, 1, 2, 3, 4};
答案 1 :(得分:0)
这本书是对的;你不能拥有,
int *p = new int[3](100);
背后没有可以理解的理由。这就是为什么我们在C ++ 0x中有数组的初始化器。
答案 2 :(得分:0)
我认为这本书是正确的,通常你不能用当前版本的c ++做到这一点。 但你可以用boost :: assign来实现动态数组,见下文
#include <boost/assign/list_of.hpp>
class Object{
public:
Object(int i):m_data(i){}
private:
int m_data;
};
int main()
{
using namespace boost::assign;
std::vector<Object> myvec = list_of(Object(1))(Object(2))(Object(3));
}