在此行中是否有任何类型的转换(隐式,显式):

int *p= "hello there";

此外,从C / C++的 Angular 来看,这种说法的正确性是什么?

注意:它在AVR-GCC上编译,在其他编译器上失败。

最佳答案



不,没有任何铸造。

但是在C++中,您可以将reinterpret_cast<int*>const_cast<char*>一起使用,如下所示:

int *p= reinterpret_cast<int*>(const_cast<char*>("hello there"));

See a working demo.



好吧,这些声明的使用者完全留给了用户。绝对不建议这样做(因为您遇到的是未指定的行为),如果您不确定自己的行为是100%的危险,那么这样做是危险的。

但是至少两种语言都支持这样做。

C的较短变体是:
int *p= (int*)"hello there";



好吧,我不知道您用于AVR跨工具链的版本,但是任何GCC的中途更新版本都会给该语句带来错误,例如
prog.cpp:3: error: cannot convert 'const char*' to 'int*' in initialization

See demo please

我使用的是GCC的较旧版本来制作该演示:g++ 4.3.2。如果我没有得到正确的通知,最新的版本是5.x,并且我很确定使用AVR可以使用to build a cross toolchain

1与未定义的行为有细微的区别。仅取决于您的硬件以及这些指针地址以及对齐设置。

关于c++ - C++将char数组存储在int指针中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30744742/

10-13 08:27