C++常见错误总结(不定时更新版~)

C++遇到常见的错误总结:


1.vector容器赋值经常用xxx.push_back(), 而不能直接用xxx[i] = yyy;(下标是修改不是插入,如果要用下标,需要保证初始化时候有足够的元素 .)

2.如果在循环外对容器进行声明, 在循环内对容器进行使用,注意在容器使用前清空容器。

3.如果考虑两种类型元素相关联,通常使用结构体(map可能会出现多重映射)。

4.关于计数器,static要在类外初始化。int Student::count = 0;此时不用在前面加static

5.静态数据成员要通过静态成员函数访问

6.闰年的判断((year % 4 == 0 &&year%100!=0) || (year%400==0))

7.

int m = 10;
int &y = 10 // 此时会报错**非常量的引用值必须为左值**正确的语句为:int &y = m; 或者 const int& y = 10

8.设一类名为A则 A()会声明一个调用缺省构造函数创建的无名临时对象,同时下面的一句也有同样的效果;

class A {...} a;

9.当我们创建一个构造函数时会自动屏蔽缺省的默认构造函数

10.当编译器为了找到合适的函数重载时,它不会检测函数的返回类型,而只会检测函数的形参类型数量顺序。

11.拷贝构造函数必须call by reference否则会出现无穷递归而使程序崩溃

12.new运算符和delete可以进行重载

13.iostream.h是C语言中的头文件,不存在名称空间

14.默认析构函数不能有返回值也不能有参数,同时也不能重载

15.

int * const p; // 声明的是一个常量指针,指针不可变,指向的整型变量可以改变
const int* p; // 声明的是一个指向常量的指针,指针可以变,指向的整型变量不可以改变
const int* const p; // 声明的是一个指向常量的常量指针,两者均不可以修改

16.引用是别名,只可以被初始化,不可以再赋为另一个对象的别名,但是指针却可以被赋值;同时引用不能为空而指针可以为空。

17.

classname& operator++() {...} // 重载了前置自加运算符
classname operator++(int o) {...} // 重载了后置自加运算符,o为没有实际意义的参数

前置++无形参,引用返回;后置++有形参,按值返回

18.C++不能为基本数据类型重载运算符

19.派生类的指针必须强制转换为基类指针后才能指向基类的对象

20.不能重载的运算符: :: . * ?: sizeof

21.按值返回和按引用返回的区别:

int  test() {
    ...
    return test;
} // 此时生成的是变量test的拷贝即一个临时变量,当这个变量被使用后就会被销毁,所以按值返回不能做左值运算

int& test() {
    ...
    return test;
} // 此时返回的是引用即变量test的别名,我们可以对这个变量进行左值运算如赋值
int& test() {
    int temp;
    return temp;
} // 由于temp是个局部变量所以函数运行完毕会被销毁,此时返回一个空引用是错误的
发布了25 篇原创文章 · 获赞 15 · 访问量 8万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章