gpt4 book ai didi

C++ 在预处理器 #if 中对 sizeof() 比较抛出编译错误

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:52:32 25 4
gpt4 key购买 nike

我有这个编译时没有出现来自 visual studio 的错误“ fatal error C1017:无效整数常量表达式”。我该怎么做?

template <class B>
A *Create()
{
#if sizeof(B) > sizeof(A)
#error sizeof(B) > sizeof(A)!
#endif
...
}

最佳答案

预处理器不理解 sizeof()(或数据类型、标识符、模板或类定义,它需要理解所有这些东西才能实现 sizeof)。

您正在寻找的是静态断言(由编译器强制执行,它理解所有这些事情)。我用 Boost.StaticAssert为此:

template <class B>
A *Create()
{
BOOST_STATIC_ASSERT(sizeof(B) <= sizeof(A));
...
}

关于C++ 在预处理器 #if 中对 sizeof() 比较抛出编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1717665/

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