当前位置:  开发笔记 > 编程语言 > 正文

所有基本整数类型的重载是否足以捕获所有整数?

如何解决《所有基本整数类型的重载是否足以捕获所有整数?》经验,为你挑选了1个好方法。

假设我对所有标准整数类型都有函数重载:

void foo( char );
void foo( signed char );
void foo( short );
void foo( int );
void foo( long );
void foo( long long );
// .... all unsigned variants as well

是否有可能这些重载无法找到类似int8_t或类似的类型的适当重载?有可行的方法来处理这种过载吗?

参考怎么样?

澄清问题:它来自对这个问题的讨论为什么int8_t被读作一个字符?并声称可能存在编译器生成的整数类型,它们不是基本C++类型的别名.所以在这种情况下,所有基本情况的重载都可能不接受它.另一方面,我无法提供重载,int8_t因为在许多平台上它只是一个别名,并且会因重新定义现有的重载而出错.



1> Nicol Bolas..:

该标准不保证标准整数类型是编译器支持的唯一整数类型.实际上,C和C++标准明确允许编译器定义其他整数类型,统称为"扩展整数类型":

也可能存在实现定义的扩展有符号整数类型.

同样,对于每个扩展的有符号整数类型,都存在相应的扩展无符号整数类型 ......

扩展有符号整数类型和扩展无符号整数类型统称为扩展整数类型.

并且C标准不禁止实现使用扩展整数类型来实现stdint.h类型.甚至有这种非规范的符号,只是为了说清楚:

其中一些类型可能表示实现定义的扩展整数类型.

如果你想要一个可以采用任何整数类型的函数,你有两个选择:使它成为一个模板(可能使用SFINAE来禁止非整数类型)或提供一个单一的重载std::intmax_t.标准要求intmax_t是支持的最大整数:

指定一个有符号整数类型,能够表示任何有符号整数类型的任何值

当然,"有符号整数类型"包括标准和扩展类型.因此std::intmax_t可以处理实现支持的任何有符号整数.

推荐阅读
oDavid_仔o_880
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有