前缀递增和后缀递增

class NewInt
{
public:
NewInt():RootInt(0){};
NewInt(int IniInt):RootInt(IniInt){};
NewInt& operator++()
{
cout<<"prefix"<<endl;
this->RootInt+=1;
return *this;
}
NewInt operator++(int) //后缀,对参数(int)不要疑惑,int没有实质的作用,仅仅是为了区别前缀方式,标志这个++操作符是后缀形式
{
cout<<"postfix"<<endl;
NewInt preNum = *this; //后缀递增操作中,先要保存原对象到一个对象中这里采用的前缀式中方法;
++(*this); //然后对原对象进行递增操作 ;
return preNum; //最后返回原来保存的元对象。
}
private:
int RootInt;
};
来源: http://blog.csdn.net/tian_jinping/article/details/9706857
在后缀递增的时候,会先保存一个原对象,然后对原对象递增,再返回原对象。
所以用前缀递增效率更高一点,后置类型有时候是一种浪费。
例:
++a = 22;里面先++a,返回的东西是 a, 而a是一个变量,显然是一个是一个左值,他可被程序寻址,可以改变它的值
a++呢?a++是一个引用了临时对象的表达式,用户不能寻址该对象,也不能改变它的值,所以它是右值,不是左值

复合运算符:

a+=b(a=a+b)任何一个都可等效于 a = a op b
但是复合运算只需要求值一次,普通的则需要求值两次。
一次是作为右边表达式的求值,另一次是作为赋值运算的左侧运算的求值。

成员运算符:

箭头作用于指针类型的对象,结果是一个左值。
点运算符分成两种情况,成员所属对象是什么值,则返回什么值
 

条件运算符:

cout<<((it == vec.end())?"no":"yes")<< endl;
 /*如果两个表达式都是左值或者能转换成同一种左值 返回左值*/
 

sizeof运算符

其所得是一个size_t类型,由于并不实际计算对象值,所以指针无效也可以。。。
而且不会把数组转换成指针,返回的是整个数组所占的大小
sizeof(ia)/sizeof(*ia)就能返回数组大小
 sizeof(type)
sizeof expr //返回表达式类型的大小
Sale_data data;
sizeof date; //data类型的大小,即sizeof(Sales_data);
sizeof *p因为右结合律并且与*的优先级一样,所以表达式按从右到左组合。于是等价于sizeof(*p);
 
结构体的sizeof:
结构体的sizeof涉及到字节对齐问题。
为什么需要字节对齐?有助于加快计算机的取数速度,否则就得多花指令周期了。为此,编译器默认会对结构体进行处理(实际上其它地方的数据变量也是如此),让宽度为2的基本数据类型(short等)都位于能被2整除的地址上,让宽度为4的基本数据类型(int等)都位于能被4整除的地址上,依次类推。这样,两个数中间就可能需要加入填充字节,所以整个结构体的sizeof值就增长了。
 
字节对齐的细节和编译器的实现相关,但一般而言,满足三个准则:
(1)结构体变量的首地址能够被其最宽基本类型成员的大小所整除。
(2)结构体的每个成员相对于结构体首地址的偏移量(offset)都是成员大小的整数倍,如有需要,编译器会在成员之间加上填充字节(internal adding)。
(3)结构体的总大小为结构体最宽基本类型成员大小的整数倍,如有需要,编译器会在最末一个成员后加上填充字节(trailing padding)。
 
    注意:空结构体(不含数据成员)的sizeof值为1。试想一个“不占空间“的变量如何被取地址、两个不同的“空结构体”变量又如何得以区分呢,于是,“空结构体”变量也得被存储,这样编译器也就只能为其分配一个字节的空间用于占位了。
参考:http://blog.csdn.net/candyliuxj/article/details/6307814
struct node
{
int val = ;
char name = ' ';
int i = ;
};
int main()
{
node root;
cout << sizeof(root) << endl;
system("pause");
}

C++Primer学习——各种运算符的更多相关文章

  1. C++ Primer学习笔记(二)

    题外话:一工作起来就没有大段的时间学习了,如何充分利用碎片时间是个好问题. 接  C++ Primer学习笔记(一)   27.与 vector 类型相比,数组的显著缺陷在于:数组的长度是固定的,无法 ...

  2. C++学习之运算符重载的总结

    C++学习之运算符重载的总结              运算符重载是对已有的运算符赋予多重含义,使同一个运算符作用域不同类型的数据导致不同行为的发生,C++为运算符重载提供了一种方法,即运算符重载函数 ...

  3. C++ Primer学习笔记(三) C++中函数是一种类型!!!

    C++中函数是一种类型!C++中函数是一种类型!C++中函数是一种类型! 函数名就是变量!函数名就是变量!函数名就是变量! (---20160618最新消息,函数名不是变量名...囧) (---201 ...

  4. Dart学习笔记-运算符-条件表达式-类型转换

    Dart学习笔记-运算符-条件表达式-类型转换 一.运算符 1.算术运算符 + (加)- (减)* (乘)/ (除)~/ (取整) %(取余) 2.关系运算符 == (等等) != (不等) > ...

  5. python学习第六天运算符总结大全

    python学习第六天运算符总结大全,玖乐网络(www.96net.com.cn)列出下面详细 1,算术运算符 + 加 - 减 *乘 / 除 % 求模 ** 乘方 // 取整除 - 返回商的整数部分 ...

  6. MongDB4.0-入门学习之运算符

    MongDB 4.0 入门学习之运算符 基本语法:db.collection.find({<key>:{$symbol:<value>}}) 条件查询匹配运算符 符号 描述 范 ...

  7. C++ Primer 学习笔记_63_重载运算符和转换 --转换和类类型【上】

    重载运算符和转换 --转换与类类型[上] 引言: 在前面我们提到过:能够用一个实參调用的位 unsignedchar 相同范围的值,即:0到255. 这个类能够捕获下溢和上溢错误,因此使用起来比内置u ...

  8. 转载:看c++ primer 学习心得

    学习C++ Primer时遇到的问题及解释 chenm91 感觉: l          啰嗦有时会掩盖主题:这本书确实有些啰嗦,比如在讲函数重载的时候,讲了太长一大段(有两节是打了*号的,看还是不看 ...

  9. java学习之运算符

    学习完了变量+常量,现在只能简单的声明变量+赋值+打印变量. 但是程序要做的就是去处理数据,把原本散乱的数据,处理成有意义的数据,供我们来使用,这就涉及到了运算符的应用. 算数运算符常用的种类: 加法 ...

随机推荐

  1. Beta敏捷冲刺每日报告——Day3

    1.情况简述 Beta阶段Scrum Meeting 敏捷开发起止时间 2017.11.4 00:00 -- 2017.11.5 00:00 讨论时间地点 2017.11.4 晚9:30,电话会议会议 ...

  2. Linux下I/O多路转接之epoll(绝对经典)

    epoll 关于Linux下I/O多路转接之epoll函数,什么返回值,什么参数,我不想再多的解释,您不想移驾,我给你移来: http://blog.csdn.net/colder2008/artic ...

  3. selenium webdriver API

    元素定位 #coding=utf-8 from selenium import webdriver from selenium.webdriver.firefox.firefox_binary imp ...

  4. 自己写编程语言-m语言

    一直对技术有很强的兴趣,终于,决定要写自己的语言(m语言).那就先从最简单的开始:解释执行器. 一套完整的语言包含的肯定不止解释执行器了,还要有编译器和IDE,也就还要有语法高亮.智能提示等,不过还没 ...

  5. 17-TypeScript代理模式

    在有些情况下,我们需要把客户端真正调用的类和方法隐藏起来,而通过暴露代理类给客户端.客户端调用代理类的方式就可以访问到真实类提供的功能. abstract class Called{ protecte ...

  6. JAVA_SE基础——16.方法

    接触过C语言的同学,这小章节很容易接受.Java中的方法是类似与C语言中的函数  功能和调用方法都类似  只不过叫法不一样  因为java是面向对象  c是面向过程    仅仅是叫法不同.. . 看到 ...

  7. cmd编译运行java

    新建.java结尾的文件 内容 public class hello{ public static void main(String[] args){ System.out.println(" ...

  8. js中的caller属性和callee属性

    应该用"属性"来称呼caller和callee,而不是方法. caller:返回调用当前函数的函数的引用.a调用b,则返回a(a是boss,因为a把b叫过去干活了): callee ...

  9. PHP / Laravel 月刊 #23

    最新资讯 Laravel 5.6 中文文档翻译完成,译者 60 人,耗时 10 天 Summer Dingo API 中文文档翻译召集[已完成] Summer 我最喜欢 Laravel 5.6 的三个 ...

  10. Django(博客系统):文章内容使用django-ckeditor、文章简介使用django-tinymce

    文章内容使用django-ckeditor 1)安装django-ckeditor pip install django-ckeditorpip install Pillow 2)在settings. ...