手写 max 常数被 std::max 吊打了,怎么会是呢。
代码中的调用方式大致如下:
inline void vmax(int &x,int y) { x<y&&(x=y); }
...
vmax(x,y);
using std::max;
...
x=max(x,y);
在某 OJ 上提交发现前者被卡常了。
语言 C++11,编译命令: g++ main.cpp -o main -O2 -lm -std=c++11 -DONLINE_JUDGE
然而在本机和洛谷 IDE 做了测试,都是前者略快。(C++11,开启 O2)
有神仙能解释一下是什么原理吗 