开发者

No array allocated using new can have an initializer?

开发者 https://www.devze.com 2023-03-21 04:46 出处:网络
In the book I am reading at the moment (C++ Complete Reference from Herbert Schildt), it says that no array allocated using new can have an initializer.

In the book I am reading at the moment (C++ Complete Reference from Herbert Schildt), it says that no array allocated using new can have an initializer.

Can't I initia开发者_如何学Pythonlize a dynamically allocated array using new? If not whats the reason for it?


That's not quite true (you should almost certainly get yourself an alternative reference), you are allowed an empty initializer (()) which will value-initialize the array but yes, you can't initialize array elements individually when using array new. (See 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

There's no fundamental reason not to allow a more complicated initializer it's just that C++03 didn't have a grammar construct for it. In the next version of C++ you will be able to do something like this.

int* p = new int[5] {0, 1, 2, 3, 4};


The book is correct; you cannot have,

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

There is no understandable reason behind it. That's why we have initializers for array in C++0x.


I think the book is correct, in generally you cannot do that with current version of c++. But you can do that with boost::assign to achieve a dynamic array, see below

#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));
}
0

精彩评论

暂无评论...
验证码 换一张
取 消