2017-10-07 81 views
0

产生的数据类型,我被人比我更了解的是,sizeof操作符不产生类型“为size_t”的值,而是产生具有相同的基本类型“为size_t”的值告诉。虽然这可能是比语义技术性罢了,C++ 11 5.3.3.6和C++ 14 5.3.3.6双方声明如下:由sizeof操作符

The result of sizeof and sizeof... is a constant of type std::size_t. 
[ Note: std::size_t is defined in the standard header <cstddef> (18.2). —end note ] 

我解释这意味着,如果有办法显示sizeof表达式它应显示“标准::的size_t”或“为size_t”而不是“无符号整型”,的数据类型“无符号长”或任何为size_t恰好表示在那个特定的编译器,并且它应该显示“STD: :为size_t”或‘即使没有为size_t的类型定义的范围,因为编译器内部知道它是为size_t的size_t’。

但是,如果我的理解是不正确的,这将改为正确的要显示的基础数据类型,应该不是C++ 11和C++ 14,而不是这样说:

The result of sizeof and sizeof... is a constant of **the same type represented** by std::size_t. 

我意识到这可能会争论天使在销的头数,但我还是想了解这是条文主义正确的。

谢谢, 雷

+0

在您执行'为size_t '可能与'unsigned long'相同,编译器知道这一点。 –

+0

“表示”是不是在这里一个不错的选择。 'unsigned int'和'unsigned long'具有完全相同的表示方式并不罕见,但它们仍然是不同的类型。 'std :: size_t'只是一个名字,意思是“sizeof返回的类型”。 –

回答

3

的std ::的size_t是的typedef名类型别名,即一些其它现有类型的synonim;它不是一个独特的类型,仅用于名称查找。

因此,举例来说,你不能重载/专业/等等......针对的size_t VS它的基本类型...

这么说,这是真的,编译器内部知道的别名是什么,所以它可以使用它,比如,以提高其在地方/诊断和这样等都可能(也可能不会)出现在编译器生成的消息,其基本类型为帮助程序员一起...