struct A {};
A f1()
{
return A();
}
int f2()
{
return int();
}
int main()
{
f1() = A(); // OK
f2() = int(); // error C2106: '=' : left operand must be l-value
}
爲什麼f1() = A();
確定,而f2() = int();
失敗?爲什麼int不能用作用戶定義類的返回值的l值?
因爲設計師決定如此。 –
從歷史上看,這是因爲左值表達式指定內存中的位置(「對象」),而右值表達式不(它們具有值)。有一個'int'值不是一個對象(沒有地址),但是沒有類型的值不是一個對象(因爲技術原因,我不完全確定,但除了別的什麼,這會是什麼?)。正如下面的答案所表明的那樣,術語從那裏變得更加複雜一些。 –