首页 > 解决方案 > 在 C++ 中使用指令和声明

问题描述

using 指令是否具有本地范围?

我在 C++ 入门书中发现“函数中的 using 指令将命名空间名称视为在函数外部声明”

如果它就像在函数外部声明的那样,为什么它不使这些名称可用于文件中的其他函数。

namespace Jill 
{ 
    double bucket(double n) { ... } 
    double fetch; 
    struct Hill { ... }; 
}
int main()
{
    using namespace Jill;
    return 0;
}
int foom()
{
    Hill top;              //error
    Jill::Hill crest;     //valid
}

如果语句“函数中的 using 指令将命名空间名称视为在函数外部声明”为真,则

`Hill top`

会有效吗?

标签: c++reference

解决方案


“函数中的 using 指令将命名空间名称视为在函数外部声明”

命名空间名称被视为在函数外部声明,但不会改变其他函数的实现行为,即这些名称仅在引入 using 指令的函数中可见,它们在任何函数中都不可见其他功能。

另一方面,如果函数范围内有局部函数声明,则首先选择它,而不是 using 指令引入的那个。

例如

namespace Jill 
{ 
    double bucket(double n) { std::cout << "Jill::bucket\n"; return 0.0; } 
    double fetch; 
    struct Hill {}; 
}

int main()
{
    double bucket(double);
    using namespace Jill;
    bucket(0.0); // ::bucket but not Jill::bucket will be selected
    return 0;
}

double bucket(double n) { std::cout << "::bucket\n"; return 0.0; } 

居住


推荐阅读