【发布时间】:2013-03-01 06:49:10
【问题描述】:
指针上的运算符 [] 的自然参数类型是什么,如:
struct foo
{
value_t operator[](<TYPE?> i)
{ return data[i]; }
value_t * data;
};
我知道我可以输入任何整数类型,但数组索引的自然类型是什么,即。不引起隐式转换的那个?
【问题讨论】:
-
size_t是自然而然的选择 -
这真的是编译器使用的吗? size_t 是无符号的,但我当然可以在 C++ 索引中使用负索引。
-
编译器使用什么,在哪里?定义你所说的自然。如果您的容器不支持负索引,那么很自然地只接受无符号索引。
-
“自然”是指“编译器不执行隐式转换”。如果有一个标准化的数据类型,它是什么?如果它不是标准化的(比如一些编译器接受负索引,另一些不接受,或者编译器在内部使用不同的数据类型),那么我也很感谢关于这方面的权威信息。
-
mmm... 我认为标准没有指定特定的整数数据类型。但如果我不得不冒险猜测,我会说它是一个持有
sizeof(integral_type) == sizeof (pointer)的类型。所以long,可能。
标签: c++