size_t是否保证是整数类型之一的别名类型?

use*_*436 8 c++ types typedef

或者它可以是一个单独的无符号整数类型?

我对不同的(无符号)整数类型有不同的模板函数特化.我需要提供单独的专业size_t吗?

Ton*_*roy 7

C++标准说:

18.2/2内容与标准C库头相同,但有以下更改:

18.2/6类型size_t是一个实现定义的无符号整数类型,它足够大,可以包含任何对象的字节大小.

18.2/7 [注意:建议实现选择ptrdiff_t和size_t的类型,其整数转换等级(4.13)不大于signed long int的类型,除非需要更大的大小来包含所有可能的值. - 尾注]

因此,它说实现定义的无符号整型明确是否会之一unsigned short,int,long,long long.18.2/6存在并指定"实现定义的无符号整数类型"的事实可以看作覆盖18.2/2的后续C的默认值,因此C的任何答案都不可信任.

建议重新转换排名意味着size_t预期将是4.13中提到的类型之一,其中size_t没有明确提及,但明显的候选人是,但这不是保证.

我是否需要为size_t提供单独的专业化?

当一个不同的类型时你可以使用std::is_samestd::enable_if这样做size_t....