gpt4 book ai didi

c++ - 将整数静态转换为指针类型

转载 作者:太空狗 更新时间:2023-10-29 23:44:49 25 4
gpt4 key购买 nike

我就是不知道如何用 C++ 编译这个简单的例子:

class C
{
public:
static const void* noop = static_cast<const void*> (0x1);
};

由于我想要的 static 存储限制,这里唯一可能的转换是 static_cast 但它与这个 int-to-ptr 转换不兼容。

error: invalid static_cast from type ‘int’ to type ‘const void*’

如何将整数值静态转换为指针类型?

最佳答案

这里的问题是,虽然您正在声明一个 const void*,但 const 限定符不适用于指针,而是应用于该指针指向的地址。

这意味着 noop 不是 static const 成员变量,因为所有非 const static 成员变量都需要在中定义和初始化class 定义之外的单个翻译单元,如下例所示:

class C {
public:
static const void *noop;
};

const void* C::noop = (const void*) 0x1;

Live Demo

以下解决方案:

class C {
public:
static constexpr const void* noop = reinterpret_cast<const void*>(0x1);
};

尽管它在 GCC 中编译和工作正常但不是有效的 C++(例如,它不能用 clang 或 VC++2013 编译)因为根据标准 § 5.19/2 常量表达式 [expr .const] reinterpret_cast 的结果不能是常量表达式。

关于c++ - 将整数静态转换为指针类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24397797/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com