C++ 牛客网做题笔记【900题总结】

来源:互联网 发布:从底层看java中的接口 编辑:程序博客网 时间:2024/06/07 03:37

1:Maxfd是三个套接字描述符最大数字加1


2:&& 和|| 都有截断功能,&&左边为假,右边表达式不判断,||左边为真,右边的表达式不执行


3:a++是一个表达式,不是变量,所以不能当左值使用,a++ = a是错误的


4:空类的大小为1,这个1是被编译器插入的一个char字符,使得这个class的不同实例在内存中是独一无二的地址,这个char用于标识类的不同对象,否则每个对象的大小都是0,这就无法区分各个对象


5:free一个指针之后,指针所指向的内存被释放,但是指针仍指向这块被释放的内存,被称为野指针,再往这个指针赋值不能保证这个数据的安全,所以会产生错误


6:词法分析器用于识别单词


7:a-z:97-122 A-Z:65-90 0-9:48-57;小写字母>大写字母>数字的ASCII码


8:十进制-25,原码:1001 1001  补码:1110 0111  十六进制表示:E7H


9:多次释放一个已经释放过的指针,内存被重复释放,导致一些不可预期的异常


10:“\t” "\b"  转义字符,退格  "\023"    八进制,不能超过9啊,不要忘了~  "\xae" 十六进制,不能超过f


11:类的下行转换必须是显示的,因为基类到派生类不知道要加什么,派生类到基类的转换可以是隐式的,直接去除派生类自有的部分,operate除了可以表示函数重载运算符,还可以进行类之间的转换,拷贝构造函数可以进行类的隐式转换


12:编译器在为类对象分配栈空间时,会先检查类的析构函数的访问性,只要是非静态的成员函数,编译器都会进行检查,如果类的析构函数是私有的,则编译器不会在栈空间上为类对象分配内存空间,因为无法回收栈上的内存,将析构函数定义为私有,只能通过new来进行创建对象。new的话会调用构造函数进行初始化,所以构造函数不能为私有,此时需要destroy


13:运算符重载为成员函数时,this指针作为左操作的对象,参数列表个数可以少一个;重载为友元函数时,参数个数需一致,二元运算符就得两个参数;


14:我草,做题要细心啊~答非所问是最气的~


15:循环是否已经跳出?需要注意,while(a+b>0){a++;b--;},这尼玛一次完不了啊~


16:register,寄存器变量,速度比内存快很多,旧编译器需要手动将调用次数多的变量定义为register,现在的编译器一般都会自动将调用次数多的变量放入寄存器中;extern,声明为外部变量,在函数外部定义变量;static,变量在整个作用域内是全局变量


17:const变量,在编译阶段编译器会直接使用常数替换掉对该变量的引用


18:strlen()求字符串的长度,但是若字符串由字符数组得到,由于字符数组中赋值的是字符的ASCII值,ASCII值为0的字符是“\0”也就是结束符,所以这一点需要注意strlen(str) ;str[] = {4,5,3,0,6,8};长度为3


19:二维数组的定义一定要有列数,因为编译器需要靠列数来寻址


20:vector中访问数据,两种方法:vector::at(),此方法为首选,因为它进行了边界检查,如果访问超过了范围,将抛出异常;vector::operator[],不做下标检查,超出范围造成的结果就是函数行为未定义

1 0
原创粉丝点击