首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将未签名的空头转换为无符号的空头?

如何将未签名的空头转换为无符号的空头?
EN

Stack Overflow用户
提问于 2013-12-13 09:25:16
回答 2查看 2.1K关注 0票数 3

到目前为止,我已经尝试过了,但是仍然在下面的代码中出现了一个错误:

代码语言:javascript
复制
#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;
}

我得到了以下错误。

代码语言:javascript
复制
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*’`
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-13 09:27:27

更改ret()函数以返回指向x的指针

代码语言:javascript
复制
const unimap_t *ret()
{
    return &x; 
}

再加上一些重释的演员:

代码语言:javascript
复制
int main() {
    unsigned short* pX2 = const_cast < unsigned short* >(
            reinterpret_cast<const unsigned short*>(ret()) 
            );  
    std::cout <<pX2[1]; 
    return 0;
}
票数 0
EN

Stack Overflow用户

发布于 2013-12-13 09:35:05

首先,不是返回unsigned short*,而是返回指向2 unsigned short数组的指针unsigned short (*)[2]。这可能不是您想要的;您的函数的签名应该是:

代码语言:javascript
复制
unichar const* ret();

(C样式数组是从根本上破坏的,代表了类型系统中的特例。)或者,您可能希望返回一个引用:

代码语言:javascript
复制
unimap_t const& ret();

这应该转换为unsigned short const*

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20562974

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档