【发布时间】:2015-03-23 17:01:46
【问题描述】:
我阅读这篇文章是为了大致了解条件运算符返回的类型和值类别:Return type of '?:' (ternary conditional operator)
这几乎回答了我的问题,除了 C++ Primer 中描述同一事物的措辞让我有些困惑。
“如果两个表达式都是左值或者如果它们都转换为常见的左值类型,则条件运算符的结果是左值。否则结果是右值。”
粗体字让我很反感。这会向我建议,例如
int main(){
int y = 2;
char z = 3;
((50<60) ? y : z) = 3;
}
会很好,因为 y 和 z 都可以转换为 int (嗯,z 将是转换的那个),它是一种左值类型(对吗?),因此条件运算符会将左值作为其值类别。但是,此代码无法编译,因为它实际上给出了一个右值。谁能提供一个粗体部分提到的例外情况的例子,所以我可以理解它试图说明什么?
我的理解似乎是:如果表达式是相同类型的左值,则返回该类型的左值。否则返回一个右值(某些编译器确定的类型)。
【问题讨论】:
标签: c++ conditional-operator lvalue