Почему это вызывает конструктор по умолчанию?
struct X
{
X() { std::cout << "X()\n"; }
X(int) { std::cout << "X(int)\n"; }
};
const int answer = 42;
int main()
{
X(answer);
}
Я бы ожидал, что это напечатает либо
-
X(int)
, потому что X(answer);
можно интерпретировать как листинг из int
в X
, или
- ничего, потому что
X(answer);
можно интерпретировать как объявление переменной.
Однако он печатает X()
, и я понятия не имею, почему X(answer);
будет вызывать конструктор по умолчанию.
BONUS POINTS: Что мне нужно изменить, чтобы получить временное выражение вместо объявления переменной?
Ответы
Ответ 1
ничего, потому что X (ответ); может быть интерпретировано как объявление переменной.
Ваш ответ скрыт здесь. Если вы объявляете переменную, вы вызываете ее по умолчанию ctor (если не POD и все это).
На вашем редактировании: Чтобы получить временное, у вас есть несколько вариантов:
Ответ 2
Скобки являются необязательными. То, что вы сказали, идентично X answer;
, и это выражение декларации.
Ответ 3
Если вы хотите объявить переменную типа X, вы должны сделать это следующим образом:
X y(answer);