[英]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_operator
对于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,7
的expression-list具有多个表达式,因此编译器应将其诊断为错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.