我刚刚读到 constexpr 和 inline 函数遵循单一定义规则,但它们的定义必须相同。所以我尝试一下:
inline void foo() {
return;
}
inline void foo() {
return;
}
int main() {
foo();
};
错误:重新定义“void foo()”,
以及
constexpr int foo() {
return 1;
}
constexpr int foo() {
return 1;
}
int main() {
constexpr x = foo();
};
错误:重新定义“constexpr int foo()”
那么究竟是什么意思,constexpr 和 inline 函数可以服从 ODR 呢?