我已经读过,当您使用c ++进行swap
事情时,您应始终using std::swap;
,然后调用swap
不合格,以便自动选择{ {1}} std::
和内置类型的{1},自定义类型的自定义类型,以及其他所有内容的模板std::
。
那么,我可以将std::
放在每个文件包含的标题中,而不必担心它吗?
我知道在标题中避免using std::swap;
是常见做法。但是,在这种特殊情况下是否存在问题?
答案 0 :(得分:7)
交换指南是using std::swap
,尽可能在本地范围内。可以肯定的是,广泛包含的头文件中的一个不符合此要求。 仍然以意想不到的方式污染全局命名空间(不期望std::swap
的人将被导入到全局命名空间),应该像using namespace
一样避免使用。
答案 1 :(得分:0)
这里的主要问题是你假设人们没有写自己的swap
碰巧是更好的匹配,与std::swap
和相关朋友的语义做了微妙或完全不同的事情。举一个简单的例子,考虑
void swap(int* a, int* b);
指针的内容被交换。现在尝试交换一对int*
。你可能会认为指针是交换的,而是惊讶!它是被交换的内容。
实际上,swap
的指南与任何其他using
的指南在尽可能最本地范围内相同,而且没有更早,绝对不在标题中。