gpt4 book ai didi

c++ - 命名空间搜索限定名称的规则是什么?

转载 作者:行者123 更新时间:2023-12-02 10:09:19 25 4
gpt4 key购买 nike

有人可以解释我在以下示例代码中看到的命名空间搜索限定名称的行为吗?请参阅问题的内嵌评论。

namespace ns1::hw
{

struct A1
{
enum class E1
{
E1_1,
E1_2,
};
};

};

namespace ns1::ns2::hw
{

struct A2
{
enum class E1
{
E1_1,
E1_2,
};
};

};

namespace ns1::ns2::ns3::hw
{

struct A3
{
enum class E1
{
E1_1,
E1_2,
};
};

};

namespace ns1::ns2::ns3::ns4
{

struct A4
{
int I1 { (int)hw::A3::E1::E1_1 }; // <--- this compiles OK
// seems to search upwards in the parent namespace,
// looking for the relative partially qualified
// name.

int I2 { (int)hw::A2::E1::E1_1 }; // <--- this doesn't
// doesn't seem to apply the same search algorithm
// beyond the immediate parent namespace.
};

};

int main()
{
return 0;
}

最佳答案

在你的第一个片段中:

   int I1 { (int)hw::A3::E1::E1_1 }; // <--- this compiles OK
// seems to search upwards in the parent namespace,
// looking for the relative partially qualified
// name.
正如您所料, hwns4 中寻找.它不存在,因此在父命名空间 ns3 中查找。 .它找到 hw在那里,然后它找到嵌套名称 A3 ,然后 E1 ,然后 E1_1 ,因此名称查找成功。
在第二个片段中:
   int I2 { (int)hw::A2::E1::E1_1 }; // <--- this doesn't
// doesn't seem to apply the same search algorithm
// beyond the immediate parent namespace.
实际上应用了相同的规则。 hwns4 中寻找.它不存在,所以在 ns3 中寻找它.它在那里找到,但随后找不到嵌套名称 A2 .
现在名称查找只会在命名空间层次结构中向上进行。它将根据需要上升多个级别以查找名称,但是如果它在命名空间级别内找到匹配项,则此过程将停止。如果它随后发现缺少的嵌套名称,则不会反向并继续在命名空间层次结构中向上查找,而只是一个硬错误。
在这种情况下,如果没有 hwns3 ,那么查找将上升到父命名空间 ns2 ,然后是嵌套名称 A2 , E1 , 和 E1_1会被成功找到。

关于c++ - 命名空间搜索限定名称的规则是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64272920/

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