是很久以前某大神在群里讲的了…
字符类型在语法上有三种类型,但是在语义上是两种。
即 char 、unsigned char、signed char…
对它们进行操作符重载的话,不会报错…
但是如果是int 、unsigned int、signed int 就会报错。
对字符常量进行sizeof,比如:
sizeof(‘a’);
在C下面和sizeof(int)是一样的
但是在C++里面就是1
C/C++ 标准 – 不一样。
哦还要注意 sizeof ‘a’; 这样写,也是可以的
再,强制类型转换 int(a) 是单目运算符吧
然后 解引用 *p也是前缀单目运算符吧
书上是不是有提到从右往左。
sizeof(int) *p 代表什么?
实际上是 sizeof(int) *(乘号) p
再比如:
int a[10]
cout << a < a+1 << endl;
cout << a-1 < a << endl;
都没问题,但是在OS系统下面…没了。
C语言规定,两个地址(指针)比较大小,只有在有限的条件下才是有良好定义的。
再比如:
1 2 3 4 5 |
class Test { int a; int b; }; |
这里 a的地址一定在b的前面吗?
1 2 3 4 5 6 |
class Test { int a; public: int b; }; |
这个呢?
C++规定,一个类的成员,只保证同样访问权限元素的相对位置相同。
比如都是public 或 都是 Private,则定义顺序和它的实际顺序是相同的,如果是不同权限的话,编译器可以任意处理。
关于引用占不占空间的问题。
引用是一个别名,跟其他变量一样,占不占空间要看编译器的具体情况。如果优化程度高的话,可能就优化掉了。
关于16进制的问题
/x00
/xooa
/xoooa
长度都是2 因为它是:
/xhh… …(无限长)
…所以…并没有什么意义,就是随手一写吧。有错望指正。
杂记…一些C++相关的东西…