C ++:“T const * []”是什么意思?

时间:2011-04-08 12:50:43

标签: c++

  • “T const * []”作为参数是什么 类型意思?
  • 有什么区别 与“T * []”相比?
  • 和最后一样 问题:为什么我不能通过“T * []” 到需要“T”的函数 const * []“作为参数?

感谢您的帮助。

托拜厄斯

2 个答案:

答案 0 :(得分:4)

作为一般类型,它是一个指向常量T的指针数组。 尝试在其中加上名称:

T const *x[];

并应用通常的规则:[]比*更紧密,所以它是一个 阵列。然后*表示它是一个指针数组,和 最后,他们都指向一个恒定的T.(像往常一样const 修改它左边的任何内容。)

当然,作为参数,数组类型将转换为 一个指针类型,所以我们最终得到一个指向指针的指针 常数T.这也可以写成:

T const **

如果删除常量,则最终得到:

T **

T const**不同。

您无法将T**T*[]传递给第一个的原因 形式是为了防止这样的事情:

void f(int const* p1[]; int const* p2)
{
    p1[0] = *p2;
}
int const x = 10;
int* px[1];
f(px, &x);
*px[0] = 20;       //  Where does this write?

使用[]编写声明的事实就是这样 情况,误导,因为指针指针的规则仍然存在 应用

答案 1 :(得分:3)

它是一个指向T类型常量对象的指针数组(即指针可以更改,但不能调用非const函数,或者修改这些对象上的不可变数据成员)。 T * []是指向非常量对象的指针数组。你不能将T * []传递给需要T const * []的函数,因为它会使指针的const正确无效。

有关详细信息,请参阅here