有一个这样的示例代码:
typedef int* iter;
typedef const int* c_iter;
int arr[]{1, 2, 3, 4};
iter arrbegin()
{ return arr; }
int main()
{
const auto it = arrbegin();
it++;
return 0;
}
它会引发错误(更改常量数据),但我有点困惑。据我了解,此代码等效于:
const iter it = arrbegin ();
但它const iter
不是等价的iter_const
吗?根据经验,我已经明白不是,但我不清楚:为什么不呢?
当您添加
const
到 typedef 时,它不会添加到左侧(而不是右侧),而是添加到顶层。如果你用文字描述类型的值,这会变得更清楚:
typedef int* iter;
- “iter 是指向int
”的指针。const iter
- “常数iter
”,即 “指向”的常量指针int
。而“指向的常量指针
int
”是int *const
,所以这就是你得到的类型。(与const int *
指向 const 的指针相反int
。)