我只是不知道如何在C ++中编译此简单示例:
class C
{
public:
static const void* noop = static_cast<const void*> (0x1);
};
由于static
我想要的存储限制,此处唯一可能的强制转换将是,static_cast
但它与此int-to-ptr强制转换不兼容。
错误:从类型'int'到类型'const void *'的static_cast无效
如何将整数值静态转换为指针类型?
这里的问题是,尽管您声明了一个限定符,但const void*
该const
限定符并不适用于指针,而是适用于该指针指向的地址。
这意味着它noop
不是static const
成员变量,并且所有非const static
成员变量都需要在定义之外的单个转换单元中进行定义和初始化,class
如下例所示:
class C {
public:
static const void *noop;
};
const void* C::noop = (const void*) 0x1;
以下解决方法:
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
不能为常量表达式。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句