gpt4 book ai didi

c++ - C++ 中的命名空间别名

转载 作者:搜寻专家 更新时间:2023-10-31 00:48:01 24 4
gpt4 key购买 nike

众所周知,向 namespace std 添加声明/定义会导致未定义的行为。此规则的唯一异常(exception)是模板特化。

下面的“hack”呢?

#include <iostream>

namespace std_
{
void Foo()
{
std::clog << "Hello World!" << std::endl;
}

using namespace std;
}

int main()
{
namespace std = std_;

std::Foo();
}

就标准而言,这真的定义明确吗?在这种情况下,我当然没有向 namespace std 添加任何内容。我测试过的每个编译器似乎都乐于接受这一点。


在有人发表类似“你为什么要那样做?”的评论之前-- 这只是为了满足我的好奇心......

最佳答案

std 重新定义为别名是可以的,只要你不在全局声明区域中:

In a declarative region, a namespace-alias-definition can be used to redefine a namespace-alias declared in that declarative region to refer only to the namespace to which it already refers.

由于您在 main() 中定义了别名,因此它隐藏了全局 std 名称。这就是为什么这个有效,应该有效,并且根据标准完全没问题。您没有向 std 命名空间添加任何内容,这种“hack”只会让代码的人类读者感到困惑。

关于c++ - C++ 中的命名空间别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3128248/

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