到目前为止,我已经尝试过了,但是仍然在下面的代码中出现了一个错误:
#include<iostream>
typedef unsigned short unichar;
typedef const unichar unimap_t[2];
unimap_t x = {0x0004,0x00ff};
const unimap_t * ret()
{
return x;
}
int main()
{
unsigned short* pX2 = const_cast < unsigned short* > (ret());
std::cout <<pX2[1];
return 0;
}我得到了以下错误。
a.cpp: In function ‘int main()’:
sa.cpp:22:60: error: invalid const_cast from type ‘const unichar (*)[2]
{aka const short unsigned int (*)[2]}’ to type ‘short unsigned int*’`发布于 2013-12-13 09:27:27
更改ret()函数以返回指向x的指针
const unimap_t *ret()
{
return &x;
}再加上一些重释的演员:
int main() {
unsigned short* pX2 = const_cast < unsigned short* >(
reinterpret_cast<const unsigned short*>(ret())
);
std::cout <<pX2[1];
return 0;
}发布于 2013-12-13 09:35:05
首先,不是返回unsigned short*,而是返回指向2 unsigned short数组的指针unsigned short (*)[2]。这可能不是您想要的;您的函数的签名应该是:
unichar const* ret();(C样式数组是从根本上破坏的,代表了类型系统中的特例。)或者,您可能希望返回一个引用:
unimap_t const& ret();这应该转换为unsigned short const*。
https://stackoverflow.com/questions/20562974
复制相似问题