Возьмите этот пример кода:Порядок присвоения и порядок инициализации?
int a = 10;
int b = 20;
int c = 30;
int & foo1() {
qDebug() << "foo1" << endl;
return a;
}
int & foo2() {
qDebug() << "foo2" << endl;
return b;
}
int & foo3() {
qDebug() << "foo3" << endl;
return c;
}
int main(void)
{
foo1() = foo2() = foo3() = 7;
}
Поскольку назначение идет справа налево, я ожидал увидеть foo3
первый и последний foo1
, но наоборот.
Являются ли правила для таких сценариев конкретными и как? Кроме того, компилятор различает назначение и другие операторы и как это возможно, если вы используете оператор =
в другом контексте, чем инициализация? Может быть, назначение цепочки трактуется иначе, чем другая цепочка?
+1 для тщательного ответа и искусства ascii, позволяет обойти вас до 2.5k rep –