[C++ Primer Note3] 表达式

表达式由一个或多个运算对象(operand)组成,对表达式求值将得到一个结果。字面值变量是最简单的表达式,其结果就是字面值和变量的值。

  1. C++语言定义了运算符作用于内置类型和复合类型的运算对象时所执行的操作。当运算符作用于类类型的运算对象时,用户可以自行定义其含义,称之为重载运算符。IO库的>>和<<运算符以及string对象,vector对象和迭代器使用的运算符都是重载的运算符。
  2. 复合表达式是指有两个或多个运算符的表达式。求复合表达式的值需要将运算符和运算对象合理地组合在一起,优先级和结合律决定了运算对象组合的方式。也就是决定了表达式中每个运算符对应的运算对象来自表达式的哪一部分。
  3. 优先级规定了运算对象的组合方式,但是没有说明运算对象按照什么顺序求值。比如:
  int i=f1()*f2();
  int i=0;
  cout<<i<<" "<<++i<<endl;

我们无法知道f1和f2之间的调用顺序,同时也无法知道是先求++i的值还是先求i的值,这样的行为是未定义的,不可预知的。

  1. 如果改变了某个运算对象的值,在表达式的其他地方不要再使用这个运算对象。除非改变运算对象的子表达式本身就是另外一个子表达式的运算对象。
  2. 进行比较运算时除非比较的对象是布尔类型,否则不要使用布尔字面值true和false作为运算对象。
  3. 赋值运算符满足右结合律
  4. 除非必须,否则不用自增自减运算符的后置版本,因为后置版本需要将原始值存储下来以便返回。
  5. 形如*pbeg++的表达式是一种被广泛使用且有效的写法,表示先移动指针/迭代器,再取原来指向的对象。
  6. 解引用运算符*的优先级低于点运算符。
  7. sizeof运算符(这是一个关键字)返回一条表达式或一个类型名字所占的字节数。sizeof运算符满足右结合律,其所得的值是一个size_t类型的常量表达式,运算符的运算对象有两种形式:
  • sizeof (type)
  • sizeof expr
    对数组执行sizeof运算得到整个数组所占空间的大小,等价于对数组中所有元素各执行一次sizeof运算并将所得结果求和。注意,sizeof运算不会把数组转换成指针来处理
    所以可以用数组的大小除以单个元素的大小得到数组中元素的个数:
  constexpr size_t sz=sizeof(ia)/sizeof(*ia);

sizeof的返回值是一个常量表达式,所以我们可以用sizeof的结果声明数组维度。

  1. 对于算术隐式转换来说,可以简单地理解为往更大的类型转换。
  2. 在大多数用到数组的表达式中,数组自动转换成指向数组首元素的指针。当数组被用作decltype关键字参数,或者作为取地址符(&),sizeof及typeid等运算符的运算对象时,上述转换不会发生。
  3. 类类型能定义由编译器自动执行的转换,比如C风格字符串转换成string,在条件部分读入istream等。
  4. 一个命名的强制类型转换具有以下形式:cast-name<type>(expression);
  • static_cast:任何具有明确定义的类型转换,只要不包含底层const
  • const_cast: 只能改变运算对象的底层const
  • reinterpret_cast:为运算对象的位模式提供重新解释(比如把int *解释成char *)
  1. 避免使用强制类型转换
  2. 在早期版本的C++语言中,显式地进行强制类型转换包含两种形式:
  • type (expr); 函数形式的
  • (type) expr; C语言风格的
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,976评论 6 513
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,249评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,449评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,433评论 1 296
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,460评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,132评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,721评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,641评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,180评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,267评论 3 339
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,408评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,076评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,767评论 3 332
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,255评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,386评论 1 271
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,764评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,413评论 2 358

推荐阅读更多精彩内容

  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy阅读 9,521评论 1 51
  • #1.基础1.1 基本概念1.2 优先级和结合律1.3 求值顺序 #2.算术运算符 #3.逻辑和关系运算符 #4....
    MrDecoder阅读 330评论 0 0
  • 3. 类设计者工具 3.1 拷贝控制 五种函数拷贝构造函数拷贝赋值运算符移动构造函数移动赋值运算符析构函数拷贝和移...
    王侦阅读 1,813评论 0 1
  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 4,151评论 0 13
  • 2016,你幸福吗? 2016年是十分平淡的一年,乏善可陈,但流年清寄给我很多感动,我笑颜清欢,感激所有的美好。 ...
    树小洞2阅读 307评论 0 0