AT45Status
是具有多个成员的结构,我具有以下功能:
/**
* @brief read the chip status from the flash chip
* @retval a pointer to the current status of the chip
*/
AT45Status const * const ReadChipStatus(void) {
uint8_t commands[1] = {STATUS_READ};
static AT45Status status;
//// … details, but the result is updated values inside status
return &status;
}
如果我使用C ++进行编译,则会收到以下警告:
…(16):警告:#815-D:返回类型上的类型限定符没有意义
我当然查找了an exact explanation,这对于从语义上传递值的琐碎类型是一个相关的警告。但是我正在返回一个指向我不想更改的对象的指针。 (指针或指向的数据)。因此,类型限定符是有意义的。
将return语句更改为以下内容时,警告消失:
return (AT45Status const * const)&status;
为什么编译器不能/不可以将AT45Status*
隐式转换为AT45Status const * const
?在这次互动中我缺少什么?
答案 0 :(得分:4)
警告试图告诉您您正在尝试返回const
指针,这是没有意义的,因为返回的指针本身无法修改。
另一方面,将指向的对象限定为const
是有意义的(以使指向的对象不可修改),即返回指向const
的指针。例如
AT45Status const * ReadChipStatus(void)
答案 1 :(得分:1)
例如这样的声明
const int f();
对于基本类型没有意义。返回的值是一个临时对象,即使您将删除const限定符,也无法更改。
int f();
例如,您可能不会写
++f();
编译器将发出错误。
指针也会发生同样的情况。