int的构造函数中可变数量的参数

时间:2013-07-21 09:37:36

标签: c++ visual-studio-2010 new-operator codepad

我编写了以下代码片段,在执行时导致编译错误 codepad.org

int main()
{
int *p = new int(5,6,7);
return 0;
}

我为int的构造函数传递了3个参数,同时为它动态分配内存。(根据我不应该这样做。)

但是当我在visual studio 2010编译器中执行相同的代码时,它正在使用最后一个参数编译和初始化值。为什么这样工作?

2 个答案:

答案 0 :(得分:1)

VS2010正在调用commo运算符并正确地指定最后一个值。

http://en.wikipedia.org/wiki/Comma_operator

对于gcc试试这个

int main()
{
 int *p = new int((5,6,7));
 return 0;
}

答案 1 :(得分:0)

VS2010不符合(惊喜)。 (5,6,7)中的new int(5,6,7) new-initializer 。根据C ++11§5.3.4/ 15:

  

创建类型为T的对象的 new-expression 按如下方式初始化该对象:

     
      
  • 如果省略 new-initializer ,则默认初始化对象(8.5);如果没有执行初始化,则该对象具有不确定的值。

  •   
  • 否则, new-initializer 将根据8.5的初始化规则进行解释,以进行直接初始化。

  •   

和§8.5/ 13指出:

  

如果正在初始化的实体没有类类型,带括号的初始值设定项中的表达式列表应为单个表达式。

示例5,6,7中的表达式列表有多个表达式,因此编译器应将其诊断为错误。