C++ 使用新的双括号初始化?

C++ 使用新的双括号初始化?,c++,C++,您好,我只是想知道在C++03中是否可以执行以下操作。我试过了,但对我不起作用 struct SomeClass{ int a,b,c,d; }; SomeClass * temp = new SomeClass(); *temp = { 1,2,3,4}; 我这样做了,但编译器给了我一个警告:扩展初始化器仅在C++11中受支持 在使用new创建对象时,是否有其他方法使用双大括号初始化? 构造函数是不允许的技术上当前的C++是C++11 无论如何,如果没有C++11,您所做的事情是不可能的

您好,我只是想知道在C++03中是否可以执行以下操作。我试过了,但对我不起作用

struct SomeClass{
int a,b,c,d;
};

SomeClass * temp  = new SomeClass();
*temp = { 1,2,3,4};
我这样做了,但编译器给了我一个警告:扩展初始化器仅在C++11中受支持
在使用new创建对象时,是否有其他方法使用双大括号初始化?
构造函数是不允许的

技术上当前的
C++
C++11

无论如何,如果没有
C++11
,您所做的事情是不可能的。只能在创建结构或数组时进行大括号初始化

i、 e

<>编辑:我需要看看C++中的支持,但是在C99中,通过使用所谓的

,这是可能的。 Edit2-不抽雪茄-


从技术上讲,当前的
C++
似乎是
C++11

无论如何,如果没有
C++11
,您所做的事情是不可能的。只能在创建结构或数组时进行大括号初始化

i、 e

<>编辑:我需要看看C++中的支持,但是在C99中,通过使用所谓的

,这是可能的。 Edit2-不抽雪茄-


似乎

我不认为您可以在C++03中直接实现这一点,但是您可以(或许)使用一些您可能认为是“类外构造函数”的东西来简化工作,而不仅仅是暴力:

很容易断定,任何合理的最近(甚至可能最老的)C++编译器都会内联函数调用,所以函数调用不会造成任何开销。如果您愿意,还可以将函数转换为模板,并为不同数量的参数重载它,以便执行以下操作:

someclass *s = new someclass();

*s = make<someclass>(1, 2, 3, 4);

otherclass *o = new otherclass();

*o = make<otherclass>(1, 2);
someclass*s=newsomeclass();
*s=制造(1,2,3,4);
otherclass*o=新的otherclass();
*o=制造(1,2);

然而,归根结底,这里的大问题是,你一开始就走错了路。至少在接下来的一年或两年,你应该简单地忘记C++有<代码>新< /Calp>表达式。感觉你需要它(特别是在这样的情况下)是一个相当好的迹象,你还没有适应C++,而且仍然在尝试编写java。

< P>我不认为C++可以直接这样做,但是你可以(也许)简化工作,而不是蛮力,你可能认为它是一个“类外构造函数”:

<> P>很容易断定,任何合理的最近(甚至可能是最老的)C++编译器都将内联函数调用,因此函数调用不会造成任何开销。如果你想,你也可以将函数转换成模板,并将其重载到不同的参数数量,这样你就可以做如下事情:

someclass *s = new someclass();

*s = make<someclass>(1, 2, 3, 4);

otherclass *o = new otherclass();

*o = make<otherclass>(1, 2);
someclass*s=newsomeclass();
*s=制造(1,2,3,4);
otherclass*o=新的otherclass();
*o=制造(1,2);

最终,然而,这里的一个大问题是,你开始做错了。至少在接下来的一两年里,你应该简单地忘记C++有<代码>新的< /COD>表达式。感觉你需要它(尤其是在这样的情况下)。是一个很好的迹象,你还没有适应C++,而且仍然在尝试编写java。/p>初始化双括号初始化是java术语。你想要的是初始化器。我不认为C++之前真的有可能真的必须使用<代码>新< /Cord>?你真的必须使用不支持的编译器吗?(部分)C++11?双大括号初始化是一个Java术语。你想要的是一个初始化器。而且我认为在C++11之前不可能。你真的必须使用
new
吗?你真的必须使用不支持(部分)的编译器吗C++11?我没有办法用新的和大括号来初始化一些东西吗?…我将不得不对许多冗余的东西进行大量的重新编码…@user1000232如果你可以使用一个临时变量,你可以像这样初始化临时变量,然后分配给
*temp
。我没有办法用新的和大括号来初始化一些东西吗我必须对大量冗余的东西做大量的记录……USSRUB242如果你可以使用一个临时变量,你可以初始化这个临时变量,然后再分配给<代码> *TEMP。“至少在明年(至少),你应该忘记C++有<代码>新的< /COD>表达式。" +1@user1000232“是的,它通常可以而且应该避免。”至少在接下来的一两年里,你应该简单地忘记C++有<代码>新< /Calp>表达式。1@user1000232:是--通常可以而且应该避免。
struct someclass{
    int a, b, c, d;
};

someclass make(int a, int b, int c, int d) { 
    someclass ret = {a, b, c, d};
    return ret;
}

int main(){
    someclass *s = new someclass();

    *s = make(1, 2, 3, 4);
}
someclass *s = new someclass();

*s = make<someclass>(1, 2, 3, 4);

otherclass *o = new otherclass();

*o = make<otherclass>(1, 2);