gpt4 book ai didi

c++ - 使用 QString 以外的其他类型作为文字

转载 作者:行者123 更新时间:2023-11-30 05:10:34 27 4
gpt4 key购买 nike

我刚刚了解到 QStringLiteral以及它是如何工作的。这会将 QString 的所有成员放入我的可执行文件中,并返回对它的常量引用。这不会调用 QString 构造函数。

现在,出于好奇,我想知道我是否也可以将此功能应用于其他数据类型。

我希望看到一些 QDateTimeLiteral、QTransformLiteral 或 QRegularExpressionLiteral ( Maybe all of these types? )。

这是否与 QStringLiteral 一样有意义并且是否易于实现?或者是否已经有提供此功能的 Qt 分支可用?

我认为隐式共享数据持有者可能存在问题,对吧?

最佳答案

如果您希望看到这样的字面量以便您可以“免费”构造一个对象,即在编译时,那么 C++11 中的 constexpr 等效于适用于任何类型支持。

Qt 也有 Q_DECL_CONSTEXPR 使您更容易,因为如果您的编译器支持它,它将扩展为 constexpr,但如果不支持,则跳过它。从 Qt 5.5 开始,您还可以使用 Q_DECL_RELAXED_CONSTEXPR 检查您的编译器是否支持 C++14。

另请注意,QStringLiteral 以类似的方式工作:如果您没有启用 C++11,它实际上不会是文字 - 它会退回到 QString: :fromUtf8() 因为它依赖于 lambda。

从 Qt 5.1 开始,他们一直在为一些对象添加 constexpr 说明符,因此获取文字的最简单方法就是尝试将一些对象构造为 constexpr 并且看看它是否可用。我不知道任何其他选项 - 例如您提到的对象的构造函数将具有非平凡构造函数的对象作为参数,所以我认为不可能为它们创建文字版本。所有这些都应该是文字才能使其工作:例如在 QDateTime 的情况下,QDateQTime 也必须具有它们的文字版本,因为构造函数将它们作为参数。有些对象本质上不能是文字,因为它们依赖于动态分配——对于其他每个对象,您都必须编写一个文字宏。在 QStringLiteral 的情况下,制作文字宏更容易,因为 QString 的构造函数仅将 char 数组作为参数。

顺便说一句,令我困惑的是,为什么他们决定将 QStringLiteral 编写为宏,而不是将其中一个 QString 构造函数设为 constexpr。

关于c++ - 使用 QString 以外的其他类型作为文字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45608068/

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