根据cppreference documentation on
对于
一方面,据我所知,std::size_t通常是该列表中的一种无符号类型的typedef。
然而,我不确定标准是否要求始终如此。
我不确定“如果[IntType]不是以下之一,则未定义”是否意味着IntType必须与该列表中的某个内容名义上匹配(类型必须明确地是其中之一),还是它可以在结构上匹配(因此,对其中一种类型的typedef也被认为是可接受的)。
std::uniform_int_distribution是否属于未定义行为?
std::uniform_int_distribution
,如果[IntType
]不是以下之一: short
,int
,long
,long long
,unsigned short
,unsigned int
,unsigned long
或unsigned long long
,则效果是未定义的。对于
std::size_t
,我对以下三个问题不太确定:一方面,据我所知,std::size_t通常是该列表中的一种无符号类型的typedef。
然而,我不确定标准是否要求始终如此。
我不确定“如果[IntType]不是以下之一,则未定义”是否意味着IntType必须与该列表中的某个内容名义上匹配(类型必须明确地是其中之一),还是它可以在结构上匹配(因此,对其中一种类型的typedef也被认为是可接受的)。
std::uniform_int_distribution是否属于未定义行为?
static_assert(std::is_same_v<std::size_t, unsigned> || std::is_same_v<std::size_t, unsigned long> || std::is_same_v<std::size_t, unsigned long long>);
。如果在任何编译器上失败(我觉得可能性很小),它会触发... - undefinedstd::uniform_int_distribution<std::size_t>
是未定义行为吗?只要std::size_t
在平台上是以下类型之一的typedef:short、int、long、long long、unsigned short、unsigned int、unsigned long或unsigned long long,那么它就是定义行为。在其他平台上,它是未定义行为。我不知道有任何一个std::size_t
不是这些类型的平台。 - undefinedsize_t
不是标准类型之一,那么你的程序其余部分能正常工作的几率有多大呢?这类似于“如果int
是23位会发生什么?”标准规定它可以是这样的。 - undefined