“使用”还是明确说明?
可能重复:
为什么'使用名称空间标准;' 在C ++中被认为是不好的做法?
使用std命名空间
这只是一个偏好问题吗? 或者是否有更好的理由
using namespace std;
#include <string>
myString string;
要么
#include <string>
myString std::string;
我想,每次显式声明命名空间,而拖动类型,避免名称冲突的任何可能性(或编译器会警告含糊不清?)
问题:这种或那种方式是否有令人信服的论点?
这是我为同一主题撰写的另一个答案的修改版本。 现在版本3。
主要的问题是名称冲突,因为如果你的代码中有一个名为count
的变量,并且你正在using namespace std;
对于你的意思,这将是模棱两可的。 这不仅仅是count
。 reverse
和equal
也将被包括在内,这些都是通用的标识符。 例如,这会导致编译错误:
#include <algorithm>
using namespace std;
int count;
int main(int argc, char* argv[]){
count = 1;
}
忽视编译器的所有问题,任何来阅读代码的人都会遇到问题。 那些额外的5个字符确保下一个维护你的代码的人确切地知道你的意思,而不必每隔一行检查一次文件的顶部,看看你写的string
是指std::string
还是mylib::string
string
值得注意的是,你不应该在头文件中using namspace xyz
,因为它可以传播到包含该头文件的所有文件,即使它们不想使用该名称空间。 这里的另一个问题是std命名空间还没有被导入,所以维护者(或者你在3个月的时间里)添加了一个变量,其名称与包含在同一个编译单元中的一些不起眼的std函数相同,然后花一个小时试图找出编译错误的原因。
(来自Effective C ++)在大多数情况下,使用它是非常有益的
using std::swap
就好像有一个专门的swap版本,编译器会使用它,否则它会回退到std::swap
。 如果您调用std::swap
,则始终使用基本版本,该版本不会调用专用版本(即使存在)。
以例如使用pimpl成语的代码为例。 作为默认拷贝可以拷贝实际实现中的所有数据,因为所有需要做的就是交换指针。 使用专门的交换可以节省大量的执行时间,精心设计的库应该专门化它。
综上所述,
总是比较喜欢using std::swap
over std::swap()
避免在传播中不惜一切代价地using namespace std
标题中的using namespace std
,尽量避免在实现文件中使用它。
在每个文件的顶部有成千上万的using std::foo
是不行的。 最多用于常用类。
其他一切都是意见。
我个人更喜欢using
声明而不是using
指令。
例如:
#include<string>
using std::string;
string x="abc";
使用using
指令会将整个名称空间带入范围,以后可能会导致名称冲突问题。
欲了解更多信息,请阅读本 (强烈推荐)。
用法在cpp文件中很好。 你会更喜欢标题中的第二种语法,所以你不会让它们在整个项目中传播。
链接地址: http://www.djcxy.com/p/29787.html