C++ 为什么指针没有隐式转换为const*const
AT45Status是一个具有多个成员的结构,我具有以下功能:C++ 为什么指针没有隐式转换为const*const,c++,pointers,constants,keil,C++,Pointers,Constants,Keil,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 AT45Stat
/**
* @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:返回类型上的类型限定符没有意义
我当然查了一下,这是一个关于一个普通类型的相关警告,它是语义传递的值。但是我返回一个指向一个我不想改变的对象的指针。指针或指向的数据。因此,类型限定符是有意义的
当我将return语句更改为:
return (AT45Status const * const)&status;
为什么编译器不能/不隐式地将AT45Status*转换为AT45Status常量*const?我在这个交互中遗漏了什么?例如这样的声明
const int f();
对于基本类型没有意义。返回的值是一个临时对象,即使删除常量限定符,也无法更改
int f();
例如,你可能不会写
++f();
编译器将发出一个错误
指针也会出现同样的情况。例如这样的声明
const int f();
对于基本类型没有意义。返回的值是一个临时对象,即使删除常量限定符,也无法更改
int f();
例如,你可能不会写
++f();
编译器将发出一个错误
指针也会出现同样的情况。警告试图告诉您正在尝试返回常量指针,这是没有意义的,因为返回的指针本身无法修改 另一方面,将指向的对象限定为常量对于使指向的对象不可修改(即返回指向常量的指针)是有意义的。e、 g
警告试图告诉您您试图返回一个常量指针,这是没有意义的,因为返回的指针本身无法修改 另一方面,将指向的对象限定为常量对于使指向的对象不可修改(即返回指向常量的指针)是有意义的。e、 g
所有指针都是普通类型。即使没有常量限定符,也无法更改它们。ReadChipStatus=nullptr;无效。所有指针都是普通类型。即使没有常量限定符,也无法更改它们。ReadChipStatus=nullptr;这是无效的。