a.empty() ? a : (b.empty() ? b : c) 超级奇怪问题.
代码 1:
- C/C++ code
#include <iostream>#include <string>using namespace std;int main(){ string a, b, c; a.empty() ? a : (b.empty() ? b : c) = "fkdlsajfa"; // a, b, c 都没有被赋值. 何解? cout <<a <<endl <<b <<endl <<c <<endl; return 0;}代码 2:
- C/C++ code
#include <iostream>#include <string>using namespace std;int main(){ string a("a"), b("b"), c("c"); a.empty() ? a : (b.empty() ? b : c) = "fkdlsajfa"; // c 被赋值. cout <<a <<endl <<b <<endl <<c <<endl; return 0;}[解决办法]
a.empty() ? a : (b.empty() ? b : c) = "fkdlsajfa";
首先计算小括号内的,变成
a.empty() ? a : b = "fkdlsajfa";
这时a.empty()为真,则直接返回a
:后面的没有计算
[解决办法]
[解决办法]
就是因为判断为真了,就不会跳入到条件FALSE的执行语句了。你可以debug跟进去看看