Написание справочной декларации и присвоения в одном заявлении - PullRequest
2 голосов
/ 14 марта 2012

Что-то не так с написанием ссылочной декларации и присваивания в одном утверждении.Я попробовал его с помощью gcc, и он, кажется, работает.

int x = 10;
cout << "x = " << x << "\n";

int &y = x = 11;
cout << "x = " << x << "\n";
cout << "y = " << y << "\n";

дает мне ожидаемый результат

x = 10
x = 11
y = 11

Ожидается ли это работает на большинстве компиляторов или будет проблема переносимости

1 Ответ

5 голосов
/ 14 марта 2012

В C ++ есть оператор присваивания, который можно использовать (по крайней мере, в принцип) в любом выражении. Обратите внимание, что в:

int& y = x = 11;

Первый = является , а не оператором; это часть синтаксиса данных определение. Что следует за этим = является выражением, которое должно привести в lvalue типа int. Поскольку x является int, x = 11 имеет тип int. И результат встроенного оператора присваивания является lvalue, ссылаясь на объект, который был целью назначения, так Вы выполнили необходимые условия.

Конечно, это не значит, что это хороший код.

...