一句话的小技巧(持续更新ing~)

1.父函数将数组传给子函数时,子函数时无法获取该数组总长度的。如果是char的字符串,strlen可以获取实际字符串的长度,sizeof获取的结果是不可靠的,可能是任何结果。

2.在 Linux 应用程序中,分段故障被认为是最常见的错误之一。当程序尝试访问未分配给它的内存并因为分段违例而终止时,将产生这种错误。

3.ANSI C中有些微妙的bug,比如int和unsigned int的比较。int会被提升为unsigned int,如-1这样的int数会变得巨大。比如下面的代码:

#include<iostream>using namespace std;int main() { unsigned int p = 1; int a = -1; if( a < p) cout<<"right"; else cout<<"wrong";return 0;}

结果输出wrong。

4. 如果类对象是const类型的,则只能调用类中的const 函数,如果类的指针是const类型的,则只能调用类中的const函数.即对于const对象,c++编译器不允许进行成员函数的调用,除非成员函数本身也声明为const即使是不修改对象的获取成员函数也不行,此外,编译器还不允许声明为const的成员函数修改对象.

    要将函数指定为const,则既要在其原型中指定,又要在其定义中指定。方法是在函数参数列表后和函数体开始的左花括号前插入const;

5.至于如果一行的内容太多,则可以使用『 \[Enter] 』来延伸至下一行.这适用于c/c++以及shell编程
6.Java中接口可以被声明出来,但决不能实例化,它可以作为子类的句柄指向子类的实例,但是不能通过它来调用子类所特有的方法.

7.STL中adapter的一个共同特点是都不支持iterator。

8. STL中multimap插入相同key时在内部会自动按key聚合。

9.因为对于大多数CPU来说,CPU字长的整数倍操作起来更快,因此对于这些成员加起来如果不够这个整数倍,有可能编译器会插入多余的内容凑足这个整数倍,此外,有时候相邻的成员之间也有可能因为这个目的被插入空白,这个叫做“补齐”(padding)。所以,C++标准紧紧规定成员的排列按照类定义的顺序,但是不要求在存储器中是紧密排列的。
基于上述两点,可以说用sizeof对类名操作,得到的结果是该类的对象在存储器中所占据的字节大小,由于静态成员变量不在对象中存储,因此这个结果等于各非静态数据成员(不包括成员函数)的总和加上编译器额外增加的字节。后者依赖于不同的编译器实现,C++标准对此不做任何保证。

sizeof的结果一定是4的整数倍。

10.对象大小=   vptr(可能不止一个)   +   所有非静态数据成员大小   +   Aligin字节大小(依赖于不同的编译器)

11.c语言里,在%前面加上一个空格表示“强制扫描前导空白”

12.

 类型 长度 (bit) 有效数字 绝对值范围
float 32 6~7 10^(-37) ~ 10^38
double 64 15~16 10^(-307) ~ 10^308
long double 128 18~19 10^(-4931) ~ 10 ^ 4932


你可能感兴趣的:(linux,shell,iterator,存储,float,编译器)