输入
k < m ? k++ : m = k;
Run Code Online (Sandbox Code Playgroud)
被解析为
((k < m) ? k++ : m) = k;
Run Code Online (Sandbox Code Playgroud)
k++rvalue 在哪里,m是一个左值.所以条件是一个右值.
你可能意味着什么
(k < m) ? k++ : (m = k);
Run Code Online (Sandbox Code Playgroud)
更好用
if (k < m) {
k++;
} else {
m = k;
}
Run Code Online (Sandbox Code Playgroud)
代替.
您可以在此处查看C优先级表:http://en.cppreference.com/w/c/language/operator_precedence.
术语"左值"和"右值"主要是指"你可以在作业中留下的东西"和"你只能在作业的右侧书写的东西",或者说.Cf" 文字字符串和函数返回值是左值还是右值? ".
查看语义的一个更简单的例子?::对于a uint8_t k,condition ? k : k + 1意味着什么?
很容易看出前一部分k是一个类型的左值uint8_t.
不过,后一种表达k + 1方式有些棘手.作为算术表达式的结果,它是一个rvalue.它也不是一个uint_8但是int.
的普通型uint8_t和int是int.所以总共condition ? k : k + 1是一个带有类型的右值表达式int.
| 归档时间: |
|
| 查看次数: |
386 次 |
| 最近记录: |