【发布时间】:2017-11-15 03:48:44
【问题描述】:
std::size_t 通常用于数组索引和循环计数。根据定义,std::size_t 是sizeof 运算符以及sizeof... 运算符和alignof 运算符(C++11 起)的结果的无符号整数类型。它在以下标题中定义:
<cstddef><cstdio><cstdlib><cstring><ctime><cwchar>
据我了解,这些运算符返回的类型是实现定义的。
我想要定义一个自定义size_t,以避免从我的.cpp 文件中的上述任何标题中提取不必要的内容,因为在我的文件中我只需要std::size_t。
在 C++11 及更高版本中,我认为我可以使用以下别名:
using size_t = decltype(sizeof(1));
但是,我想以可移植/跨平台的方式为 C++11 之前的编译器定义一个 size_t 类型。
那么有没有一种可移植的方式来为 pre-C++11 定义 size_t?
【问题讨论】:
-
你应该标记这个问题 C++03 或 C++98,而不是 C++11,对吧?
-
为什么您不想包含任何标准头文件?它们通常不是那么大,不会显着影响编译时间。由于定义了
size_t的那些并没有真正定义任何函数,这意味着也不会为它们生成任何代码。您能否详细说明您想通过这样定义自己的类型来解决的实际问题? -
cstddef是一个非常小的标题,就符号而言。拉进去真的是太多命名空间污染了吗? -
你可以重新制作
boost::typeof -
定义自定义类型是否可以避免包含包含标准定义的标头?无论如何,任何标准容器类型都有您可以使用的
size_type
标签: c++ c++11 c++03 size-t size-type