C typedef const参数

Dizcza
typedef float vec3[3];

void test(vec3 const vptr) {
    *vptr = 1.f; // error: assignment of read-only location
    vptr[0] = 1.f; // error: assignment of read-only location
    vptr++; // no error
}

vec3 const vptr

与...相同

const vec3 vptr

对于所有typedef?最后两个之间有什么区别吗?我想

vec3 const vptr <==> float* const vptr // a constant pointer to an object
const vec3 vptr <==> const float* vptr // a pointer to a constant object
??? <==> const float* const vptr // a constant pointer to a constant object
来自莫斯科的弗拉德

这个typedef

typedef float vec3[3];

定义数组类型的别名 float[3]

此参数的声明

vec3 const vptr

声明vptr为具有数组类型const float[3]

将指定为具有数组类型的函数参数调整为指向数组元素类型的对象的指针。

所以这个宣言

vec3 const vptr

调整为类型const float *vptr那就是它是指向常量对象的非常量指针。

这种关系

vec3 const vptr <==> float * const vptr //指向对象的常量指针

是错的。这句话

vptr++; // no error

确认这一点。

您无法获得此声明

const float* const vptr 

使用这个typedef

typedef float vec3[3];

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章