由sizeof操作符
问题描述:
产生的数据类型,我被人比我更了解的是,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.
我意识到这可能会争论天使在销的头数,但我还是想了解这是条文主义正确的。
谢谢, 雷
答
的std ::的size_t是的typedef名或类型别名,即一些其它现有类型的synonim;它不是一个独特的类型,仅用于名称查找。
因此,举例来说,你不能重载/专业/等等......针对的size_t VS它的基本类型...
这么说,这是真的,编译器内部知道的别名是什么,所以它可以使用它,比如,以提高其在地方/诊断和这样等都可能(也可能不会)出现在编译器生成的消息,其基本类型为帮助程序员一起...
在您执行'为size_t '可能与'unsigned long'相同,编译器知道这一点。 –
“表示”是不是在这里一个不错的选择。 'unsigned int'和'unsigned long'具有完全相同的表示方式并不罕见,但它们仍然是不同的类型。 'std :: size_t'只是一个名字,意思是“sizeof返回的类型”。 –