栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++Primer笔记-第4章

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++Primer笔记-第4章

表达式 1. 左值和右值
  • 一个对象被用作右值,用的是对象的值

  • 一个对象被用作左值,用的是对象的地址

  • 左值可以当做右值使用,右值不能当做左值使用

  • 一个左值被当成右值使用时,实际使用的是对象的值

  • 赋值运算符需要一个左值作为其左侧运算对象,得到的结果也是一个左值

  • 取地址符作用于一个左值,返回一个右值(指向该对象的指针)

2. 算术运算符
  • 进行算术运算时,小整型的运算对象会自动转化成较大的整型,所以运算对象最终会转换成同一类型
bool b = true;
bool b2 = -b;		// b2 == true;
  • 布尔型不应该参数运算

对于大多数运算符,布尔型会被转为为整型。b的值为真,转化为1,求负数的结果为-1,因为-1不是0,再转换为布尔型就是true。

3. 逻辑运算符
  • &&和||具有短路求值特性
c = a && b;			// 只有a为真时,才计算b
c = a || b;			// 只有a为假时,才计算b
4. 递增、递减
  • 前置++:首先将运算对象+1,然后将改变后的对象作为求值结果

  • 后置++:首先拷贝一份运算对象,然后将运算对象+1,再返回原始运算对象的拷贝值

  • 后置++的优先级高于解引用符

auto pbegin = v.begin();
while (pbegin != v.end()) {
    cout << *pbegin++ << endl;      // 等价于*(pbegin++)
	// 后置++令pbegin值+1,返回原始pbegin
}
5. 位运算符
  • 位与&:同1为1,否则为0
  • 位异或^:不同为1,相同为0
  • 位或|:同0为0,否则为1
6. 强制转换
  • static_cast:任何具有明确意义的类型转换,不包含底层const(最常用)
int i,j;
double res = static_cast(j) / i;
  • dynamic_cast: 将基类指针或引用安全地转换为派生类的指针或引用

  • const_cast:将常量对象转化为非常量对象,去掉const属性

    • 去掉const属性,编译不再阻止我们对该对象进行写操作
      • 如果对象本身是非常量,强制转换后进行写操作是合法行为
      • 如果对象本身是常量,强制转换后进行写操作是未定义的行为
const char *cp;
char *p = const(pc);		
  • reinterpret_cast:通常为运算对象的位模式提供较低层次上的重新解释(不使用)
int *ip;
char *cp = reinterpret_cast(ip);
// 此时cp指向的真实对象仍然是int
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1021776.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号