【发布时间】:2020-04-09 01:52:28
【问题描述】:
通过阅读标准,我无法确定以下代码是否违反 ODR:
// a.h
#ifndef A_HEADER_FILE
#define A_HEADER_FILE
namespace {
int v;
}
inline int get_v() { return v; }
#endif // A_HEADER_FILE
// a.cpp
#include "a.h"
void f() {
int i = get_v();
// ...
}
// b.cpp
#include "a.h"
void g() {
int i = get_v();
// ...
}
据推测,get_v() 在每个翻译单元中引用了不同的变量,因此它违反了ODR。
这个答案:Inline functions and external linkage 说内联放松了ODR 所以我不知道为什么这仍然是一个错误?
如果这是 ODR 违规,有人可以将我链接到标准中指定的位置吗?
【问题讨论】:
标签: c++ language-lawyer linkage one-definition-rule inline-functions