переменное количество аргументов в конструкторе int

Я написал следующий фрагмент кода, который привел к ошибкам компиляции при выполнении на
codepad.org

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

Я передавал 3 числа аргументов в конструктор int при динамическом выделении памяти для него (что, по моему мнению, не должно работать).

Но когда я выполнил тот же код в компиляторе Visual Studio 2010, он компилирует и инициализирует значение с последним аргументом. Почему это работает так?

2

Решение

VS2010 вызывает оператор commo и правильно присваивает последнее значение.

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

Для GCC попробуйте это

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

Другие решения

VS2010 не соответствует (сюрприз). (5,6,7) в new int(5,6,7) это новый инициализатор. В соответствии с C ++ 11 §5.3.4 / 15:

новое выражение который создает объект типа T инициализирует этот объект следующим образом:

  • Если новый инициализатор опущен, объект инициализирован по умолчанию (8.5); если инициализация не выполняется, объект имеет неопределенное значение.

  • В противном случае новый инициализатор интерпретируется в соответствии с правилами инициализации 8.5 для прямой инициализации.

и §8.5 / 13 гласит:

Если инициализируемая сущность не имеет типа класса, список_выражений в инициализаторе в скобках должно быть одно выражение.

список_выражений в вашем примере 5,6,7 имеет несколько выражений, поэтому компиляторы должны диагностировать это как ошибку.

0

По вопросам рекламы [email protected]