败犬日报 2024-10-17
1. 两个在不同命名空间,但是字段完全一样的结构体,可以直接强制类型转换吗
https://zh.cppreference.com/w/cpp/language/reinterpret_cast:“在实际上不代表适当类型的对象的泛左值(例如通过 reinterpret_cast 所获得)上进行代表非静态数据成员或非静态成员函数的成员访问将导致未定义行为。”
虽然是未定义行为但也不会出什么问题。最好可以 bitcast / memcpy,这是标准行为。
严格别名的 reinterept_cast 都是 ub。
2. 一些 cast 的使用场景
- const_cast:
const T *
到T *
(或者引用)(群友锐评:const_cast 就是给没设计好的接口擦屁股) - reinterpret_cast:整数和指针之间
3. 考一下表达式 printf("%d", 114514) 的值是多少
返回打印的字符数,答案是 6。
https://en.cppreference.com/w/cpp/io/c/fprintf
4. 如果只实现了移动构造,移动赋值会不会自动实现
没有自动实现,会被 delete。
5. unordered_map 的 emplace_hint 是不是没啥用啊
没啥用,有序的时候可以用。
6. C 参数写死了的 callback(函数指针)怎么访问外部变量(怎么捕获局部变量)
只能用全局变量传递。
7. C++ 模板本身就是静态分发吗
算,编译期确定调用目标的应该都算。
函数重载也算静态分发。
8. 有啥使用模版元来优化代码的实例
大多用于编译期计算。
9. PB 定义出来的结构体有比较好的求 hash 方法吗
我想在 Go 里面求下某个 Pb 生成的结构体的 hash 值。
好像没有,得手写。
10. C++ 不能定义引用的数组
wrap_reference 启动!