12

在我目前正在阅读的书中( Herbert Schildt 的C++ Complete Reference)中,它说使用分配的任何数组new都不能有初始化程序。

我不能使用初始化动态分配的数组new吗?如果不是,那是什么原因呢?

4

3 回答 3

19

这并不完全正确(您几乎肯定应该为自己找到一个替代参考),您可以使用一个空初始化程序 ( ()) 来对数组进行值初始化,但是是的,当使用新数组时,您不能单独初始化数组元素。(见 ISO/IEC 14882:2003 5.3.4 [expr.new] / 15)

例如

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};
于 2011-07-16T12:12:22.837 回答
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));
}
于 2011-07-16T15:23:44.760 回答
0

这本书是正确的;你不能拥有,

int *p = new int[3](100);

这背后没有可以理解的原因。这就是为什么我们在 C++0x 中有数组初始化器的原因。

于 2011-07-16T12:16:48.243 回答