gpt4 book ai didi

c++ - 命名空间范围

转载 作者:太空宇宙 更新时间:2023-11-04 11:56:02 25 4
gpt4 key购买 nike

我是一名 C 开发人员,最近才转向 C++,因此命名空间是需要学习的新事物。A类有一个静态方法validate(),因此它只能访问A类的静态变量或常量。但是,如果 A.cpp 在命名空间中定义了常量,则 val() 能够使用该常量,并且下面的代码已正确编译。

啊啊

class A
{
public:
A();
static bool validate(const int num);
};

A::A()
{
// Do nothing. Just an example.
}

A.cpp

namespace A_local_constants
{
const int val = 1;
}

using namespace A_local_constants;

bool A::validate(const int num)
{
return (num == val);
}

所以我的问题是:

  1. 为什么静态函数validate()可以使用非静态常量val?

  2. 在内存中创建的 val 在哪里?

  3. 这个常量的作用域是什么?

  4. 在没有创建A对象的情况下,是否总是在内存中创建?

最佳答案

1) “使用命名空间 A_local_constants;”此语句拖出 A_local_constants 中定义的所有符号,因此 bool A::validate(const int num) 可以引用 val。

2)全局内存

3) 此常量的范围在 A_local_constants 内,并且在我们使用“using namespace A_local_constants”或“using namespace A_local_constants::val”的所有地方也可见

4) A类与常量val没有关系。

注意:“using namespace some_name_space”应该谨慎使用,因为它们可能会不必要地污染当前的命名空间。

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

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