C++ 如何将常量unsigned short转换为unsigned short?
到目前为止,我已经尝试了这一点,但我仍然在下面的代码中得到一个错误:C++ 如何将常量unsigned short转换为unsigned short?,c++,C++,到目前为止,我已经尝试了这一点,但我仍然在下面的代码中得到一个错误: #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
#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;
}
更改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;
}
intmain(){
无符号短*pX2=常量转换(
重新解释转换(ret())
);
std::cout首先,返回的不是无符号short*
,而是
unsigned short(*)[2]
,指向2个无符号数组的指针
short
。这可能不是您想要的;的签名
您的功能可能是:
unichar const* ret();
(C)样式数组从根本上被破坏,并且表示
类型系统中的特殊情况。)或者,您可以
要返回引用,请执行以下操作:
unimap_t const& ret();
这应该转换为无符号短常量*
我想你的意思是unichar const*
作为函数的返回类型。如果你需要重新解释cast
,你就做错了。当然,如果你使用重新解释cast
从指向数组的指针获取指向你正在执行的第一个元素的指针出了点问题。先取消引用,然后再进行数组到指针的衰减,达到了同样的效果。为什么投票被否决了?问题很清楚,海报上显示了代码。这是一个带有实际编程问题的可操作问题。@Heteperfan:事实上,这个问题不清楚。标题问如何做一件事(将一个const无符号short
转换为一个无符号short
),但在代码中,他试图做一些完全不同的事情(将一个const无符号short(*)[2]
转换为无符号short*
)。这并不是说它值得否决,这是一个诚实的错误,但它确实需要一些澄清。
unimap_t const& ret();