gpt4 book ai didi

c++ - 全局范围与全局命名空间

转载 作者:IT老高 更新时间:2023-10-28 13:22:17 44 4
gpt4 key购买 nike

我看到了这两个短语的用法:全局作用域和全局命名空间。它们有什么区别?

最佳答案

在 C++ 中,每个名称都有其不存在的范围。范围可以通过多种方式定义:它可以通过 namespacefunctionsclasses{ }.

所以一个命名空间,无论是全局的还是其他的,都定义了一个范围。全局命名空间是指使用::,在这个命名空间中定义的符号被称为具有全局作用域。默认情况下,符号存在于全局命名空间中,除非它在 block 内定义以关键字 namespace 开头,或者它是类的成员,或者是函数的局部变量:

int a; //this a is defined in global namespace
//which means, its scope is global. It exists everywhere.

namespace N
{
int a; //it is defined in a non-global namespace called `N`
//outside N it doesn't exist.
}
void f()
{
int a; //its scope is the function itself.
//outside the function, a doesn't exist.
{
int a; //the curly braces defines this a's scope!
}
}
class A
{
int a; //its scope is the class itself.
//outside A, it doesn't exist.
};

还请注意,name 可以被命名空间、函数或类定义的内部范围隐藏。因此 namespace N 内的名称 a 将名称 a 隐藏在全局 namespace 中。同理,函数和类中的名称隐藏了全局命名空间中的名称。如果你遇到这种情况,那么你可以使用 ::a 来引用全局命名空间中定义的名称:

int a = 10;

namespace N
{
int a = 100;

void f()
{
int a = 1000;
std::cout << a << std::endl; //prints 1000
std::cout << N::a << std::endl; //prints 100
std::cout << ::a << std::endl; //prints 10
}
}

关于c++ - 全局范围与全局命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10269012/

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