C与C++连续赋值的区别

    int a,b,c,d;
    a = b = 5;
//   ( a!=b?a:b) = 1000;//如果a不等于b 那么a = 100;这句话执行完 a还是等于5,b= 100;
    printf(" a = %d\n b = %d\n",a,b);

  这段代码在C语言是编译不通过,因为C语言不支持表达式不赋值;在C++可以编译过。

C++里的a=b=3;与C语言一样,但是C++还有一种写法(a=b)=10,这样的是b的值赋给a,然后又把10赋给a,但是10没有赋给b;这里涉及到运算符重载的知识。

C++

    int a=1, b=2, c=3, d=4;
    a = b = 5;
    (c = d) = 10; //在C语言里编译不通过
    ( a!=b?a:b) = 1000;//如果a不等于b 那么a = 100;这句话执行完 a还是等于5,b= 100;
    ( c != d  ? c:d)=1000;
    printf(" a = %d\n b = %d\n",a,b);
    printf(" c = %d\n d = %d\n",c,d);
//  输出 a =5
//      b = 1000
//      c = 1000
//      d = 4

C语言

    int a,b,c,d;
    a = b = 5;
//   (c = d) = 10; //在C语言里编译不通过
//   ( a!=b?a:b) = 1000;
    printf(" a = %d\n b = %d\n",a,b);
    printf(" c = %d\n d = %d\n",c,d);
//   a = 5
//   b = 5

C++

    int a=1, b=2, c=3, d=4;
    a = b = 5;
    (c = d) = 10; //在C语言里编译不通过

    printf(" a = %d\n b = %d\n",a,b);
    printf(" c = %d\n d = %d\n",c,d);
    //输出  a = 5
    //     b = 5
    //     c = 10
    //     d = 4
时间: 2024-10-20 19:04:08

C与C++连续赋值的区别的相关文章

VHDL:信号、端口以及和Verilog的区别

1.信号 信号是描述硬件系统的基本数据对象,它的性质类似于连接线.信号可以作为设计实 体中并行语句模块间的信息交流通道.      信号作为一种数值容器,不但可以容纳当前值,也可以保持历史值(这决定于语句的表达方式).这一属性与触发器的记忆功能有很好的对应关系,只是不必注明信号上数据流动的方向.信号定义的语句格式与变量相似,信号定义也可以设置初始值,定义格式是:   SIGNAL 信号名: 数据类型 := 初始值 :      同样,信号初始值的设置也不是必需的,而且初始值仅在 VHDL 的行为

C++复制构造函数和赋值符的区别

From  http://blog.csdn.net/randyjiawenjie/article/details/6666937 感谢原作者分享. class CTest{public: CTest(); //构造函数 CTest(const CTest &); //复制构造函数 CTest & operator = (const CTest &); //赋值符}; CTest::CTest(){ cout<<"Constructor of CTest&qu

连续赋值和内存指针的问题解析(a.x=b={n:2})

前几天偶然看到了一个这样的题: 1 <script> 2 var a={n:1}; 3 var b=a; 4 a.x=a={n:2};//关键代码5 console.log(a.x);//undefined 6 console.log(b.x);//[object Object] 7 </script> 这个题代码不多,不过考察的知识点却非常不错.我们知道内存空间分为栈内存和堆内存.栈内存用来存放供js代码来执行的环境,所以为了保证性能减少内存占用,我们一般把占用空间较小的类似于基

C++ 赋值构造函数的返回值到底有什么用?且返回值是否为引用类型有什么区别吗?

首先定义类Person class Person{ public: string name; Person()=default; //默认构造函数 Person(string nam):name(nam){} void operator=(const Person& p){ //赋值构造函数 this->name=p.name; } }; Person a("xiaoming"); Person b; cout<<b.name<<endl; //空

Nginx 反代参数:$X-Real-Ip和$X-Forwarded-For的区别

## \$X-Real-Ip和$X-Forwarded-For的区别 标签(空格分隔): nignx 负载均衡 client-ip --- ####1.如果只有一层代理,这两个头的值就是一样的####2.多层代理> * X-Forwarded-For:  header包含这样一行        `*X-Forwarded-For: 1.1.1.1, 2.2.2.2, 3.3.3.3*`> * X-Real-Ip:没有相关标准,上面的例子,如果配置了X-Read-IP,可能会有两种情况`// 最

C#中Convert和parse的区别

Convert.ToInt32()与int.Parse()的区别(1)这两个方法的最大不同是它们对null值的处理方法: Convert.ToInt32(null)会返回0而不会产生任何异常,但int.Parse(null)则会产生异常. 没搞清楚Convert.ToInt32和int.Parse()的细细微区别时千万别乱用,否则可能会产生无法预料的结果,举例来说:假如从url中取一个参数page的值,我们知道这个值是一个int,所以即可以用Convert.ToInt32(Request.Que

python判断字符串,str函数isdigit、isdecimal、isnumeric的区别

s为字符串s.isalnum() 所有字符都是数字或者字母s.isalpha() 所有字符都是字母s.isdigit() 所有字符都是数字s.islower() 所有字符都是小写s.isupper() 所有字符都是大写s.istitle() 所有单词都是首字母大写,像标题s.isspace() 所有字符都是空白字符.\t.\n.\r 判断是整数还是浮点数a=123b=123.123 >>>isinstance(a,int)True>>>isinstance(b,floa

java web 过滤器跟拦截器的区别和使用

1.首先要明确什么是拦截器.什么是过滤器 1.1 什么是拦截器: 拦截器,在AOP(Aspect-Oriented Programming)中用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作.拦截是AOP的一种实现策略. 在Webwork的中文文档的解释为--拦截器是动态拦截Action调用的对象.它提供了一种机制可以使开发者可以定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行.同时也是提供了一种可以提取action中可重用的部分的方式.

mysql中int、bigint、smallint和tinyint的区别与长度

对比发现 int bigint smallint 和 tinyint 类型,如果创建新表时没有指定 int(M) 中的M时,默认分别是 : int             -------     int(11) bigint       -------     bigint(20) smallint   -------     smallint(6) tinyint     -------     tinyint(4) 下面是这几种类型的取值范围 参考:http://www.2cto.com/d