我在查看Google C++风格指南时,发现了这个内容:
"不要在命名空间std中声明任何东西,甚至不是标准库类的前向声明。在命名空间std中声明实体是未定义的行为,即不可移植的。要声明来自标准库的实体,请包含适当的头文件。"
有人能解释一下这是什么意思以及为什么这是未定义的行为并提供示例代码吗?
"不要在命名空间std中声明任何东西,甚至不是标准库类的前向声明。在命名空间std中声明实体是未定义的行为,即不可移植的。要声明来自标准库的实体,请包含适当的头文件。"
有人能解释一下这是什么意思以及为什么这是未定义的行为并提供示例代码吗?
std::swap<>()
。我们被允许这样做。:p - wilhelmtellstd
模板进行特化;但不能对std
模板进行重载。对于swap
,正如@ildjarn所说,首选解决方案是使用命名空间作用域函数,可以通过ADL找到该函数。C++0x通过添加“可交换”概念,对该技术进行了正式批准。 - James McNellisstd::swap
,难道你不想匹配其他命名空间中的swap
实现吗?在模板中适当的习惯用法是:use std::swap; swap(a,b);
- oisyn