求解释什么是"ODR使用"
#215
-
求解释,文档的解释看不明白,太卢瑟力┭┮﹏┭┮ |
Beta Was this translation helpful? Give feedback.
Answered by
Mq-b
Dec 29, 2023
Replies: 1 comment
-
文档原话:
先关注最后一句话:
这是 ODR 使用了却没有定义的后果,我们要先明确,接下来解释规则。
struct X{
static const int n = 10; // 这个 n 只是类内声明,没有定义
}; 那么好,如果我们读取这个 n(比如打印),这个它是否是 ODR 使用?不会,因为它是编译时常量。 std::cout << X::n << '\n'; // 不是 ODR 使用 没问题
std::cout << &X::n << '\n'; // 地址被取,是 ODR 使用 那么 ODR 使用了却没有定义的后果?最开始说了,有可能是链接错误。 给出完整代码: #include <iostream>
struct X{
static const int n = 10;
};
int main()
{
std::cout << X::n << '\n';
std::cout << &X::n << '\n';
} 有可能链接错误,参见,注意是有可能,比如 msvc 就不会链接错误。
其他的都同理。 |
Beta Was this translation helpful? Give feedback.
0 replies
Answer selected by
mq-loser
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
ODR 使用
文档原话:
先关注最后一句话:
这是 ODR 使用了却没有定义的后果,我们要先明确,接下来解释规则。
那么好,如果我们读取这个 n(比如打印),这个它是否是 ODR 使用?不会,因为它是编译时常量。
那么 ODR 使用了却没有定义的后果?最开始说了,有可能是链接错误。
给出完整代码: