来自c++primer5的sizeof运算符

简介: 来自c++primer5的sizeof运算符

sizeof运算符返回到一条表达式或类型名字所占用的字节数。sizeof运算符满足右结合律,其所得的值是一个size_t 类型的常量表达式。运算符的运算对象有两种形式:

sizeof(type) sizeof expr

因为sizeof满足右结合律并且与*运算符的优先级一样,所以表达式按照从右向左组合。也就是说sizeof(*p)。其次因为sizeof不会实际求运算对象的值,所以即使p是一个无效的指针也不会有什么影响。在sizeof的运算对象中解引用一个无效的指针仍然是一种安全的行为,因为实际上并没有被真正的使用。sizeof不需要真的解引用指针也能知道他所指的对象的类型。

C++11 新标准允许我们使用作用于运算符来获取类成员的大小。通常情况下只有通过类的对象才能访问类的成员,但是sizeof运算符无须我们提供一个具体的对象,因为想要知道类成员的大小无须真的获取该成员。

  • sizeof运算符的结果部分地依赖于起作用的类型:
  • 对char或者类型为char的表达式执行sizeof运算,结果得1;
  • 对引用类型执行sizeof运算得到被引用对象所占空间大小;
  • 对指针执行sizeof运算得到指针本身所占控件大小
  • 对解引用执行sizeof运算得到的指针指向的对象所占空间的大小,指针不需要有效
  • 对数组执行sizeof运算得到整个数组所占控件大小,等价于对数组中所有元素各执行一次sizeof运算并将所得结果求和。注意,sizeof运算不会把数组转化成指针来处理。
  • 对string对象或vector对象执行sizeof运算只返回该类型固定部分的大小,不会计算对象中的元素占用多少空间。
  • 因为执行sizeof运算能得到整个数组的大小,所以用数组的大小除以单个元素的大小得到数组中元素的个数:

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

目录
相关文章
|
7天前
|
C++
C++之运算符
C++之运算符
12 1
|
11天前
|
安全 程序员 C++
C++一分钟之-重载运算符
【6月更文挑战第21天】C++的运算符重载让程序员能为自定义类型定制运算符行为,增强代码表达力。但要注意清晰性、优先级和返回类型。遵循运算符原有意义,充分测试,并用注释解释非直观设计。示例展示了如何为复数类重载`+`运算符。避免重载内置类型,注意结合性,且慎用隐式转换。重载应提升可读性而非复杂化代码。
17 2
|
14天前
|
C++
C++一分钟之-理解C++的运算符与表达式
【6月更文挑战第18C++的运算符和表达式构成了编程的基础,涉及数学计算、逻辑判断、对象操作和内存管理。算术、关系、逻辑、位、赋值运算符各有用途,如`+`、`-`做加减,`==`、`!=`做比较。理解运算符优先级和结合律至关重要。常见错误包括优先级混淆、整数除法截断、逻辑运算符误用和位运算误解。解决策略包括明确优先级、确保浮点数除法、正确使用逻辑运算符和谨慎进行位运算。通过实例代码学习,如 `(a > b) ? "greater" : "not greater"`,能够帮助更好地理解和应用这些概念。掌握这些基础知识是编写高效、清晰C++代码的关键。
19 3
|
25天前
|
编译器 C++
C++运算符的重载
C++运算符的重载
14 0
|
2月前
|
C++
c++运算符
c++运算符
29 2
|
2月前
|
程序员 编译器 C++
c++重载运算符和重载函数
c++重载运算符和重载函数
26 1
|
2月前
|
存储 安全 程序员
C++中的四种类型转换运算符
reinterpret_cast` 则是非常危险的类型转换,仅用于二进制级别的解释,不检查安全性。`dynamic_cast` 用于类的继承层次间转换,向上转型总是安全的,向下转型时会借助 RTTI 进行安全性检查。只有当转换路径在继承链内时,转换才会成功。
13 1
|
2月前
|
程序员 C++
C++中的运算符:深入理解与应用
C++中的运算符:深入理解与应用
|
2月前
|
C++
C++程序中的赋值运算符
C++程序中的赋值运算符
26 2