gpt4 book ai didi

c++ - 如何解决由内联命名空间中的标识符冲突引起的不明确引用

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:52:01 27 4
gpt4 key购买 nike

考虑以下代码:

#include <iostream>

inline namespace N1
{
int x = 2;
}

int x = 1;

int main()
{
std::cout << N1::x;
std::cout << x;
return 0;
}

这显然让我在 std::cout << x; 上出错

reference to x is ambiguous.

::x也不起作用。

我明白为什么会这样,但是如何在不重命名或删除变量或 namespace 的情况下解决这个问题?或者这是唯一的解决方案?

最佳答案

内联命名空间作用域变量具有静态storage duration (内部链接)。所以声明

extern int x;

在显示 x 之前会为您完成 Live on Coliru .这样,在名称查找期间将不会考虑 N1::x,因为它具有静态存储持续时间和内部链接。

尚不完全清楚代码为何有效,因此我提出了一个问题 here .

关于c++ - 如何解决由内联命名空间中的标识符冲突引起的不明确引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33876647/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com