读书人

a.empty() ? a : (b.empty() ? b : c)

发布时间: 2012-09-16 17:33:16 作者: rapoo

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
:后面的没有计算

[解决办法]
探讨

引用:

引用:

引用:

C/C++ code

#include <iostream>
#include <string>
using namespace std;

int main()
{
string a, b, c;
(a.empty() ? a : (b.empty() ? b : c)) = "……

[解决办法]
就是因为判断为真了,就不会跳入到条件FALSE的执行语句了。你可以debug跟进去看看

读书人网 >C++

热点推荐