c++ - 在 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`
会有效吗?
解决方案
“函数中的 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; }
推荐阅读
- html - 如何完全隐藏模态?
- c++ - 是否总是需要实现具有动态内存分配的哈希表?
- python - 检查值是否与模式匹配并遍历python中的循环
- java - Java:如何存储列表
在队列中? - angular - JSON.parse 中位置 0 处的 JSON 中的意外令牌 B (
) 在 cart.page.ts:25 - javascript - 如何将文本更改回按钮?
- sftp - 从传统 as400 系统实现直接 as2 连接
- google-cloud-run - 使用 Java SDK 在 Google Cloud Run 上创建服务失败
- azure - 如何将一个存储帐户的容器的 blob 复制到另一个存储帐户的容器的 blob
- python - 将 pandas 条目连接到一个单列列表中