为什么没有办法在C++中撤消'使用'?

mst*_*arn 9 c++ c++11

我经常发现自己想要一种方法来撤消using语句的效果或包含所有命名空间(例如std)但排除一些要替换的位(例如cout).出于某种原因,这是不可能的.我想知道是否有人知道为什么决定不将这种能力添加到语言中?有一些技术原因吗?我认为它不仅仅是被遗忘,因为它似乎也不适用于C++ 0x.

只是为了澄清,我不是在寻找解决方法,因为谷歌可以告诉我这些.我正在寻找一个解释为什么这是不可能的,以及为什么不考虑(据我所知)包含在0x中.

Jam*_*lis 11

一个使用指令带来的姓名或名称设置成一个给定的范围内声明.

你不能因为你不能说的原因而"不使用"

int x = 42;
// and later
[remove name x somehow]
Run Code Online (Sandbox Code Playgroud)

无论C++中的名称来自何处,都无法在范围内取消引入名称.

鉴于它会使名称查找过于复杂(因为名称可以同时添加和删除范围),除非有一个非常引人注目的用例,否则它不太可能被视为潜在的语言功能.

  • 此外,如果您不希望它适用于整个范围,您首先不会使用`using`.如果您只需要在几个地方使用它,则可以手动为每个匹配项添加名称空间. (4认同)