C++ 秋招查缺补漏
结构体和类的区别
C++ 中 class 和 struct 区别 | 编程指北 (csguide.cn)
C++ 中为了兼容 C 语言而保留了 C 语言的 struct 关键字,并且加以扩充了含义。
在 C 语言中,struct 只能包含成员变量,不能包含成员函数。
而在 C++ 中,struct 类似于 class,既可以包含成员变量,又可以包含成员函数
区别:
- class 中类中的成员默认都是 private 属性的。
- 而在 struct 中结构体中的成员默认都是 public 属性的。
- class 继承默认是 private 继承,而 struct 继承默认是 public 继承。
- class 可以用于定义模板参数,struct 不能用于定义模板参数。
template <class T>
struct Person {
public:T age;
};
sizeof 字符串时 要加上末尾的 ‘/0’
sizeof 和 strlen 的区别
sizeof 和 strlen | 编程指北 (csguide.cn)
strlen 的源码:
size_t strlen(const char *str) {size_t length = 0;while (*str++)++length;return length;
}
strlen 是一个 C 标准库中的函数,用于计算 C 风格字符串(以空字符 '\0' 结尾的字符数组)的长度,即不包括结尾的空字符的字符个数。
sizeof 是一个 C++ 编译期间计算的操作符,用于计算数据类型或对象所占用的字节数。
#include <iostream>int main() {int a = 42;std::cout << "Size of int: " << sizeof(int) << std::endl; // 输出 int 类型的大小std::cout << "Size of a: " << sizeof(a) << std::endl; // 输出变量 a 的大小std::cout << "Size of double: " << sizeof(double) << std::endl; // 输出 double 类型的大小
}
数组做参数退化为指针
C/C++中数组做参数退化为指针 | 编程指北 (csguide.cn)
C++中的 const
C++ 中 const 关键字 | 编程指北 (csguide.cn)
const int ,并不是完全不能改变
int main() {const int a = 10;const int* p = &a;int* q = const_cast<int*>(p);*q = 11;cout << *q;
}//输出 11
但是输出 a 还是 10
计算机真是一门深不可测的学问.....
因为编译器可能会做一些优化!!也就是在你用到 const 变量的地方,编译器可能生成的代码直接就替换为常量的值,而不是访问一遍常量的指令。
所以即使更改了值,也是不起作用的
const int* p; // 指向只读变量的指针
int * const p; //指针本身只读
static
C++ 中 static 关键字 | 编程指北 (csguide.cn)
void foo() {static int count = 0; // static 修饰局部变量count++;cout << count << endl;
}int main() {foo(); // 输出 1foo(); // 输出 2foo(); // 输出 3return 0;
}
static 修饰局部变量可以使得变量在函数调用结束后不会被销毁,而是一直存在于内存中,下次调用该函数时可以继续使用。
同时,由于 static 修饰的局部变量的作用域仅限于函数内部,所以其他函数无法访问该变量。
static 修饰函数
static 修饰函数可以将函数的作用域限定在当前文件中,使得其他文件无法访问该函数。
同时,由于 static 修饰的函数只能在当前文件中被调用,因此可以避免命名冲突和代码重复定义。