首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

a.empty() ? a : (b.empty() ? b : c) 超级奇怪有关问题

2012-09-16 
a.empty() ? a : (b.empty() ? b : c) 超级奇怪问题.代码 1:C/C++ code#include iostream#include stri

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跟进去看看

热点排行