Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/53.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何将常量unsigned short转换为unsigned short?_C++ - Fatal编程技术网

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();