可以将"using std::swap;"放在标题中吗?
Is it ok to put "using std::swap;" in a header?
我读到,当你用 c++ swap
东西时,你应该总是using std::swap;
,然后调用 swap
unqualified,所以它会自动为std::
和内置类型选择std::
,为自定义类型选择自定义类型,为其他所有类型选择模板化std::
。
那么,我可以只using std::swap;
放在每个文件都包含的标题中而不必担心吗?
我知道避免在标题中using
是常见的做法。但是,在这种特殊情况下,它有问题吗?
交换的指导是在尽可能局部的范围内using std::swap
。可以肯定的是,广泛包含的头文件中的某个不符合此要求。它仍然以意想不到的方式污染全局命名空间(有人不希望std::swap
会被导入全局命名空间(,应该像using namespace
一样避免。
这里的主要问题是,你假设人们没有编写自己的swap
,这些恰好是更好的匹配,与std::swap
和相关朋友的语义微妙或完全不同的事情。举个简单的例子,考虑
void swap(int* a, int* b);
其中交换指针的内容。现在尝试交换一对int*
。您可能会认为指针是交换的,但相反,令人惊讶!交换的是内容。
实际上,swap
的指南与任何其他指南相同 - 仅在最局部的范围内using
,并且没有更早,绝对不在标头中。
相关文章:
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- 是否可以在 C++03 中定义'move-and-swap idiom'等效项
- 对于C++,方括号中的标题必须总是在引号中的标题之上吗
- 如何使 std::sort 在 std::swap 和我的命名空间的模板化交换之间没有名称冲突?
- 库标题在标题中不可见,但在 cmake build 下.cpp文件中完全可见.为什么?
- 为什么我不应该把所有东西都放在标题中?
- WinAPI 检查窗口是否具有常规标题栏
- 如何更改窗体上所有控件的标题?[C++生成器]
- 提升用于解析标题列的精神语法
- 所以我正在为我的学校作业练习继承,但我无法正确实施标题保护
- 我可以使用 std::vector::swap 来修改共享向量吗?
- 如何删除已输入的书以及如何使标题,语言和名称在上面放置空格不会出错?
- 使用类 ?C++ 和 SFML 以及标题中的 15 个字符
- Valgrind 在 std::string::swap 中报告 SIGILL
- Gtkmm 窗口为空白,不显示任何小部件或标题
- 我将如何在 cpp 中生成一个随机且独特的标题
- std::带有颜色和标题的 clog 包装器无法正确打印整数
- 对函数的 out 字符串参数使用 swap 与赋值
- 仅提升计时标题与链接
- 可以将"using std::swap;"放在标题中吗?