我在C++中使用'using'声明将std :: string和std :: vector添加到本地命名空间(以节省输入不必要的'std ::').
using std::string;
using std::vector;
class Foo { /*...*/ };
Run Code Online (Sandbox Code Playgroud)
这个声明的范围是什么?如果我在标题中执行此操作,它会将这些"using"声明注入到包含标题的每个cpp文件中吗?
Ecl*_*pse 107
头文件没有什么特别之处可以保留using声明.在编译开始之前,这是一个简单的文本替换.
您可以将using声明限制为范围:
void myFunction()
{
using namespace std; // only applies to the function's scope
vector<int> myVector;
}
Run Code Online (Sandbox Code Playgroud)
Jer*_*ten 55
当您在C++中#include一个头文件时,它会将头文件的全部内容放入您在源文件中包含它的位置.因此,包含具有using声明的文件具有与将using声明放置在包含该头文件的每个文件的顶部完全相同的效果.
dag*_*rym 50
using语句的范围取决于它在代码中的位置:
范围是使用声明所在的任何范围.
如果这是全球范围,那么它将处于全球范围.如果它位于头文件的全局范围内,则它将位于包含头的每个源文件的全局范围内.
因此,一般建议是避免在头文件的全局范围内使用声明.
在引用的案例中,文件("翻译单元"),即,包含它的每个文件,表示是.
您也可以将using语句放在类中,在这种情况下,它只对该类有效.
通常,如果需要在标头中指定命名空间,通常最好只对每个必需的标识符进行完全限定.
| 归档时间: |
|
| 查看次数: |
42608 次 |
| 最近记录: |