mai*_*mai 2 c++ pointers casting
我想将一个指向pcchar 的指针转换为指向piint的点
char *pc;
int *pi;
pi = (int*)pc // compiler complaint about old-style cast
pi = static_cast<int *>(static_cast<void *>(pc)) // no complaint any more but too complex
Run Code Online (Sandbox Code Playgroud)
是否有任何更简单的方法来执行此演员并使编译器保持沉默?
如果你真的需要这样做,那么reinterpret_cast就是你的朋友:
char *pc = 0;
int *pi = 0;
pi = reinterpret_cast<int*>(pc);
Run Code Online (Sandbox Code Playgroud)
通常,转换char*指针的行为int*是未定义的.取消引用这样的指针将导致您进一步麻烦,因为您将破坏严格的别名规则.请注意,C++标准不需要sizeof(char*)与sizeof(int*).
(请注意,转换unsigned char*指针到一个int*是良好定义的,如果unsigned char*指针实际上指向一个int).
不要这样做.永远.