C++-三元运算符 A?B:C 返回值问题

前端开发 前端开发 主题:1148 回复:2395

C++-三元运算符 A?B:C 返回值问题

归属感 发布于 2017-10-20 字数 314 浏览 1111 回复 3
#include <iostream>
using namespace std;
#define min(x,y) ((x<y)?x:y)
int main()
{
int a,b,c;
a=2;
b=42;
c=min(a++,b);
cout<<a<<" "<<b<<" "<<c<<endl;
return 0;
}

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

支持 Markdown 语法,需要帮助?

评论(3

甜柠檬 2017-10-25 3 楼

a++是返回a的原值再进行加一的操作,所以会有一个保存a值的操作

 #include <iostream>
using namespace std;

define min(x,y) ((x<y)?x:y)

int main()
{
int a,b,c;
a=2;
b=42;
c=min(++a,b);
cout<<a<<" "<<b<<" "<<c<<endl;
return 0;
}

如果改成++a输出就是4了

甜柠檬 2017-10-23 2 楼

我认为你说的是没关联的,最重要的是,后自增必须是先执行完该语句之后再自增,那么就拿你给出的例子来说,进行判断的时候,先自增了一次,判断语句执行完了,所以自增变成3。到这个时候,看你的问题描述你也没有什么疑惑,其实很简单,同理,在执行完return之后,才会自增第二次,所以得到的a是4,但是得到的返回值是3。

清晨说ぺ晚安 2017-10-21 1 楼

测试了一下,的确是这个结果,但是出现这样的返回结果并不是条件运算符的问题,而是宏定义的原因。
宏定义 #define min(x,y) ((x<y)?x:y)min(a++,b) 展开应为

((a++ < b) ? a++ : b)

想必这样就比较明了了, 换成if就成为:

if(a++ < b)   //执行一次a++, a = 3
return a++;   //返回a,此时a=3; 执行一次a++, a = 4
else
return b;