将类型添加到std命名空间

Rob*_*Rob 16 c++ stl namespaces

std命名空间添加类型是否可以接受.例如,我想要一个TCHAR友好的字符串,以下是可接受的吗?

#include <string>

namespace std
{
    typedef basic_string<TCHAR> tstring;
}
Run Code Online (Sandbox Code Playgroud)

或者我应该使用自己的命名空间?

Joh*_*itb 19

只允许专业化.例如,您可以专门std::numeric_limits为您的类型.这当然必须在命名空间中发生std::.但是你的typedef不是一个特殊化,因此会导致未定义的行为.


Rob*_*ker 18

否......命名空间的一部分是防止升级时出现名称冲突.

如果您向std命名空间添加内容,那么如果他们决定添加具有相同名称的内容,那么您的代码可能会破坏库的下一个版本.

  • 它也违反了标准,afaik.std命名空间是神圣的.(除了现有std函数的专业化):) (2认同)

Lig*_*ica 16

[C++11: 17.6.4.2.1/1]:如果C++程序将声明或定义添加到命名空间std或命名空间中的命名空间std,则除非另有说明,否则C++程序的行为是未定义的.只有当声明取决于用户定义的类型并且特化符合原始模板的标准库要求且未明确禁止时,程序才可以将任何标准库模板的模板特化添加到命名空间std.