Skip to content

败犬日报 2025-03-13

1. 等号两边的求值顺序

cpp
std::map<int, int> m;
m[0] = m.size();

C++17 规定等号处理完右边再处理左边。先计算 m.size() 是 0,然后计算 m.operater[](0),所以最终 m[0] 是 0。

C++17 之前没有强制要求顺序。


另外,函数参数的求值顺序是未指定的。

https://zh.cppreference.com/w/cpp/language/eval_order

2. 未指定和实现定义有什么区别

实现定义要求编译器给文档,未指定不要求。

3. 怎么简化有条件的 include

cpp
#if xxx
#include <A/B>
#else
#include <B>
#endif

include 的参数可以是宏,可以写成 #include H_XX 然后用编译参数传入 H_XX 宏。