在我目前正在阅读的书中( Herbert Schildt 的C++ Complete Reference)中,它说使用分配的任何数组new
都不能有初始化程序。
我不能使用初始化动态分配的数组new
吗?如果不是,那是什么原因呢?
在我目前正在阅读的书中( Herbert Schildt 的C++ Complete Reference)中,它说使用分配的任何数组new
都不能有初始化程序。
我不能使用初始化动态分配的数组new
吗?如果不是,那是什么原因呢?
这并不完全正确(您几乎肯定应该为自己找到一个替代参考),您可以使用一个空初始化程序 ( ()
) 来对数组进行值初始化,但是是的,当使用新数组时,您不能单独初始化数组元素。(见 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};
我认为这本书是正确的,通常你不能用当前版本的 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));
}
这本书是正确的;你不能拥有,
int *p = new int[3](100);
这背后没有可以理解的原因。这就是为什么我们在 C++0x 中有数组初始化器的原因。