C/C++ 三目运算

这里主要说下,在C 和 C++  中,三目运算符的区别。

C++代码:

1 #include <iostream>
  2 
  3 int main(int argc ,char *argv[]) {
  4 
  5 int a = 10;
  6 int b = 20;
  7 
  8 (a < b ? a : b ) = 30;
  9 
 10 std::cout<<"a = "<<a<<" ,b = "<<b<<std::endl;
 11 
 12 return 0;
 13 
 14 }
~      

 

ok ,同样的代码,在C中:

 

  1 #include <stdio.h>
  2 
  3 int main(int argc,char *argv[]) {
  4 
  5 
  6 int a = 10;
  7 int b = 20;
  8 
  9 (a < b ? a : b ) = 30;
 10 
 11 printf("a = %d,b = %d \n",a,b);
 12 
 13 return 0;
 14 
 15 }
~      

 

发现,编译报错了,说是赋值操作符左边需为左值。

解决之法:

*(a<b ? a:b) = 30;

 

三目运算符是一个表达式,表达式不可能做左值。(a<b ? a:b) = 30 是一个表达式,表达式的运算结果存在寄存器中。C返回的不是a本身而是返回变量的值,但是C++中,对三目运算符进行了功能增强,C++返回的是a本身。

充当左值的条件,这个元素要存在内存空间 。三目运算符可能返回的值中如果有一个是常量值,则不能作为左值使用 (a < b ? 1 : b) = 30。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值