c++位运算符、sizeof运算符、逗号运算符

一、位运算符

1.位运算对象如果是“小整形”,它的值会被自动提升成较大的整数类型

2.运算对象可以带符号,但是其符号位如何处理是一种未定义行为,所以建议位运算用于处理无符号类型

3.用于IO操作的<< >>其实是移位运算符的重载版本,满足左结合律

二、sizeof运算符

1.sizeof返回一条表达式或一个类型名字所占的字节数,值是一个size_t类型,使用方式如下

int a = 4;
auto size1 = sizeof(int);
auto size2 = sizeof(a);    auto size2 = sizeof a;

2.c++11允许使用作用域运算符来获取类成员大小

struct node
{
	int right, left;
};
void solve()
{
	node a;
	auto size1 = sizeof a.right;
	auto size2 = sizeof node::right;    //等价于上一种,不必通过具体的对象来获取成员大小
}

3.对于指针类型,sizeof并不会真正的解引用指针来知道对象的类型,所以sizeof的运算对象是一个无效指针仍是安全的

node *a;
auto size1 = sizeof *a;

4.对数组(名)执行sizeof运算得到整个数组所占空间的大小,可以用整个数组的大小除以单个数组大小得到元素个数,sizeof运算不会把数组转成指针来处理

auto num = sizeof(a) / sizeof(*a);

5.对string或vector等对象执行sizeof运算只返回该类型固定部分的大小,不会计算对象中元素占了多少空间

vectora{ 1,2,3,4,5,6,9,7,4,5,6,6,5 };
cout << sizeof a << '\n' << sizeof(vector) << '\n' << sizeof(vector);
//三个输出结果相同

三、逗号运算符

1.先对左侧表达式求值,然后将求值结果丢弃掉,真正结果是右侧表达式,如果右侧对象是左值,那么最终求值结果也是左值

你可能感兴趣的:(C++,c++,开发语言,后端)