向std
命名空间添加类型是否可以接受.例如,我想要一个TCHAR友好的字符串,以下是可接受的吗?
#includenamespace std { typedef basic_string tstring; }
或者我应该使用自己的命名空间?
只允许专业化.例如,您可以专门std::numeric_limits
为您的类型.这当然必须在命名空间中发生std::
.但是你的typedef不是一个特殊化,因此会导致未定义的行为.
否......命名空间的一部分是防止升级时出现名称冲突.
如果您向std命名空间添加内容,那么如果他们决定添加具有相同名称的内容,那么您的代码可能会破坏库的下一个版本.
[C++11: 17.6.4.2.1/1]:
如果C++程序将声明或定义添加到命名空间std
或命名空间中的命名空间std
,则除非另有说明,否则C++程序的行为是未定义的.只有当声明取决于用户定义的类型并且特化符合原始模板的标准库要求且未明确禁止时,程序才可以将任何标准库模板的模板特化添加到命名空间std.