c++ - Qt中是否有签名的 `sizeof`替代品

标签 c++ qt

Qt 容器的大小返回(有符号)int。我们知道在 Qt 中,更多的是使用 int 而不是无符号类型 size_t 以便在不需要转换的情况下进行算术运算。参见 Why does Qt use a signed int type for its container classes & Why QVector.size() returns int

由于语言关键字 sizeof 返回 size_t 类型,是否有 Qt 替代方案?

最佳答案

您可以制作自己的安全版本:

template<std::size_t s>
constexpr int safeIntCast()
{
    static_assert(s <= std::numeric_limits<int>::max(), "Type too large for ssizeof()!");
    return static_cast<int>(s);
}

#define ssizeof(x) safeIntCast<sizeof(x)>()

/// Usage

static_assert(ssizeof(int) == 4);
static_assert(ssizeof(1.0) == 8);

static_assert(ssizeof(std::declval<int>()) == 4);
static_assert(ssizeof(int[1000000000000]) > 4); // Conversion problem is caught!

Demo

它与 sizeof 具有相同的语义,但会产生一个 int,同时确保转换不会溢出。

关于c++ - Qt中是否有签名的 `sizeof`替代品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53757830/

相关文章:

c++ - 加权有向图中从节点返回自身的最短距离

c++ - 有什么方法可以将 3rd 方 DLL 中的静态变量重置为其原始值吗?

c++ - Qt:正确存储自定义小部件的图像资源

c++ - QImage 上的格式化大纲文本

qt - QT中是否有类似 map 的工具可以迭代插入的索引?

c++ - 四元数到轴的角度

c++ - String 类的隐式构造函数

c++ - 访问 QTimer 的经过秒数?

c++ - 在 C++ 中将 BSTR 十六进制字符串转换为 BYTE *

c++ - 在 C++ 中的键/值对中按值快速反向查找的建议方法