基础语法相关
- const 的特性:const 用于声明在运行过程中不能被修改的对象或变量,常对象只能调用常成员,常成员函数只能调用而非修改常成员对象。例如:
class MyClass {
public:
void Print() {
std::cout << "普通对象" << std::endl;
}
void Print() const {
std::cout << "常对象" << std::endl;
}
};
const MyClass a;
a.Print(); // 输出: 常对象
这样设计可以增强程序的安全性,避免误修改数据13。
- 友元函数:友元函数在类内声明,在类外定义,所以可以在类外访问类的成员。这打破了类的封装性,在某些特殊场景下可以方便操作类的私有成员13。
- 数组下标可为负数:在 C 语言(C++ 兼容 C 语言特性)中,数组的下标可以是负数。不过使用负数下标时要确保不越界,以免引发不可预知的错误。这种设计在某些情况下会让代码更加简洁、灵活2。
- 数组名可放括号中:C 语言中数组名本身也可以放在括号中,产生与数组名相同效果。在函数传参时,将数组名放在括号中传递数组,无需退化为指针,可保留数组的维度信息2。
- sizeof 是运算符:sizeof 其实是一个运算符,而不仅仅是一个关键字。它用于计算对象的大小,返回一个 size_t 类型的值,不仅可以用于数据类型,还可以用于表达式2。
- 空格的作用:在 C 语言中,空格通常用于分隔不同的符号,使代码更易读。并且一些运算符也允许在其内部插入空格,而不会影响编译器的解析2。
表达式计算相关
- 表达式计算方向:printf 和 cin 是从右往左计算,其他表达式从左往右计算,比如逗号表达式,但是逗号表达式返回值是最右边的值。逗号运算符优先级最低,所以使用时要加括号。例如:
int b[5] = {1, 2, 3, 4, 5};
int* p = b;
printf("%d, %d\n", *(p), *(++p)); // 输出 2, 2
int i = 1;
int a = (2, i = 3, i);
数据类型相关
- 枚举类型:枚举类型是 unsigned int 型常量的集合,其中的常量称为枚举数12。
其他
- 分支预测:分支预测是现代处理器用来加速指令流水线的技术。现代处理器会尝试预测哪个分支最可能被执行,并提前加载相关指令。如果预测正确,处理器就避免了等待,从而大幅提高了执行速度;相反,如果预测失败,处理器则需要撤销错误的指令执行结果,从正确的分支重新开始,这一过程会导致显著的性能损失3。
以上就是c++的一些冷知识,望大家采纳~