C++中的++和--的分析

1)C/C++的++和--运算符的作用是递增和递减,都可以作前缀或后缀表达式;

int a = 1,b,c;
b=a++;//1
c=++a;//2

1和2的区别在于1中a的值赋给b后,a的值加1,所以b=1;2中a开始是2,a先递增加1然后赋值给c,c=3;最后a=3。

y = (4 + x++) + (6 + x++);

2)这个表达式的结果在不同的系统中运行的结果是不同的,因为C/C++选择何时把++(--)运算符用到变量时是以“;”来确认的。C++不保证是在(4 + x++)后x的值立刻增加1,C++只保证上式结束时x的值增加了两次。

3)和指针运算符*的优先级比较:前缀递增和*运算符的优先级相同,遵循从右到左的结合方式,后缀递增的优先级高于前缀递增,但后缀递增以从左到右的方式进行结合。

double x = *++pt;

pt是指针,上式的意思是先把指针加1即指向下一个元素,然后将指向的元素的值加1。

4)对于用户自定义的类型来说,前缀的运算效率更高。后缀运算的实现需要两步(1)复制对象,得到对象副本(2)对象加1,返回复制的副本

时间: 2024-11-05 14:48:47

C++中的++和--的分析的相关文章

DEBUG模式下, 内存中的变量地址分析

测试函数的模板实现 [cpp] view plain copy /// @file my_template.h /// @brief 测试数据类型用的模板实现 #ifndef MY_TEMPLATE_H_2016_0123_1226 #define MY_TEMPLATE_H_2016_0123_1226 template<int iArySize> void fnTestDataType() { char szBuf[iArySize] = {'\0'}; unsigned short wT

linux中mmap系统调用原理分析与实现

参考文章:http://blog.csdn.net/shaoguangleo/article/details/5822110 linux中mmap系统调用原理分析与实现 1.mmap系统调用(功能)      void* mmap ( void * addr , size_t len , int prot , int flags ,int fd , off_t offset )      内存映射函数mmap, 负责把文件内容映射到进程的虚拟内存空间, 通过对这段内存的读取和修改,来实现对文件的

C++中几个值得分析的小问题(2)

下面有3个小问题,作为C++ Beginner你一定要知道错在哪里了. 1.派生类到基类的引用或指针转换一定“完美”存在? 一般情况,你很可能会认为:派生类对象的引用或指针转换为基类对象的引用或指针是一件很正常的事.那要是不一般情况呢?请看下面这个例子: class Person { public: Person(const string& str = "Normal Person") : ID(str) {} string ID; //作为一般的人身份是“普通人”,作为学生身

Linux中块设备驱动程序分析

基于<Linux设备驱动程序>书中的sbull程序以对Linux块设备驱动总结分析. 开始之前先来了解这个块设备中的核心数据结构: struct sbull_dev { int size;                       /* Device size in sectors */ u8 *data;                       /* The data array */ short users;                    /* How many users

自定义Adapter中实现startActivityForResult的分析

最近几天在做文件上传的时候,想在自定义Adapter中启动activity时也返回Intent数据,于是想到了用startActivityForResult,可是用mContext怎么也调不出这个方法,只能调用startActivity这个方法,于是在网上搜一下,可以利用一个方式可以间接的解决这个问题,果断贴代码: Intent mIntent = new Intent(mContext,clazz);((Activity) mContext).startActivityForResult(mI

Java异常打印输出中常见方法的分析

Java异常是在Java应用中的警报器,在出现异常的情况下,可以帮助我们程序猿们快速定位问题的类型以及位置.但是一般在我们的项目中,由于经验阅历等多方面的原因,依然有若干的童鞋在代码中没有正确的使用异常打印方法,导致在项目的后台日志中,没有收到日志或者日志信息不完整等情况的发生,这些都给项目埋下了若干隐患.本文将深入分析在异常日志打印过程中的若干情况,并给出若干的使用建议. 1. Java异常Exception的结构分析 我们通常所说的Exception主要是继承于Throwable而来,可以参

在VS 2015中边调试边分析性能

(此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 对代码进行性能分析,之前往往是一种独立的Profiling过程,现在在VS 2015中可以结合到调试过程中. Charles Willis和Dan Taylor在MSDN上发表了的一篇文章<Analyze Performance While Debugging in Visual Studio 2015>,给大家介绍了如何在VS 2015中边调试边分析性能的方法(或者说是一个操作指南).

关于在cocos2dx中继承Sprite的分析与技巧

本文章特指使用C++作为编程语言,基于cocos2dx游戏引擎开发游戏. 在cocos2dx中,sprite作为精灵类是使用最为频繁的类,与其它类相比,如:Node, Layer或Scene,Sprite最大的不同是它包含一个纹理,通过OpenGL的渲染,在游戏中呈现出来.游戏中的主角,怪物,背景,或是精灵的血条等都是通过Sprite来实现的. 在cocos2dx中,关于创建Sprite的类,根据输入参数的不同有以下几个工厂函数, static Sprite* create() static S

Hyper-V在桌面虚拟化中的优劣势分析

在桌面虚拟化的项目中使用Hyper-V已经有一段时间了,最近越来越迷茫了,迷茫在Hyper-V到底在什么场景中比自己的竞争对手(vmware和citrix)存在绝对优势? 为什么这样说呢? 在桌面虚拟化中比较典型的两种方式是RDS和VDI模式,以我个人经验来看,虽然RDS是性价比非常高的一种解决方案,但是在实际使用过程中只要甲方不是特别在意投资的情况下都会去选择VDI模式.因为RDS模式给最终使用者带来的局限性和限制性太强了,最终会导致用户的意见或反对情绪比较大. 无论是RDS还是VDI模式中,

Eclipse中的快捷键快速生成常用代码(例如无参、带参构造,set、get方法),以及Java中重要的内存分析(栈、堆、方法区、常量池)

Eclipse中的快捷键快速生成常用代码(例如无参.带参构造,set.get方法),以及Java中重要的内存分析(栈.堆.方法区.常量池) 以上就是Eclipse中的快捷键快速生成常用代码(例如无参.带参构造,set.get方法),以及Java中重要的内存分析(栈.堆.方法区.常量池)的全部内容了,更多内容请关注:CPP学习网_CPP大学 本文固定链接:CPP学习网_CPP大学-Eclipse中的快捷键快速生成常用代码(例如无参.带参构造,set.get方法),以及Java中重要的内存分析(栈.