繁体   English   中英

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

[英]variable number of arguments in constructor of int

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

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

我在为它动态分配内存时向int的构造函数传递了3个参数(这对我来说不起作用)。

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

VS2010正在调用通用运算符,并正确分配了最后一个值。

http://en.wikipedia.org/wiki/Comma_o​​perator

对于gcc试试这个

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

VS2010不合格(惊讶)。 (5,6,7)new int(5,6,7)是一种新型的初始化 根据C ++ 11§5.3.4/ 15:

创建一个T类型对象的new表达式按如下方式初始化该对象:

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

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

以及第8.5 / 13条规定:

如果要初始化的实体不具有类类型,则带括号的初始化器中的expression-list应为单个表达式。

示例5,6,7expression-list具有多个表达式,因此编译器应将其诊断为错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM