gpt4 book ai didi

c++ - 为什么我可以将字符串文字初始化为 const char* 和 QString 而不是 QString*?

转载 作者:太空宇宙 更新时间:2023-11-03 10:25:46 25 4
gpt4 key购买 nike

我对 qt 和 C++ 比较陌生,我很难理解为什么我可以在头文件中声明以下内容:

const char* CONSIGNMENT_TAG_DONATE = "DTag";

QString CONSIGNMENT_TAG_DONATE = "DTag";

const QString CONSIGNMENT_TAG_DONATE = "DTag";

但是当我尝试使用 QString* 时

QString* CONSIGNMENT_TAG_DONATE = "DTag";

const QString* CONSIGNMENT_TAG_DONATE = "DTag";

我收到一条错误消息,提示 cannot initialize a member subobject of type 'QString*' with an lvalue of type 'const char[5]' 。据我了解,字符串文字属于 const char* 类型,所以我明白为什么会这样。但为什么将它分配给 QString 有效但 QString* 无效?我确信这是 C++ 的一个相当基本的概念,我只是想了解它。

最佳答案

QString* 是指向QString 的指针。这意味着它可以保存 QString 对象的地址。您不能(或者至少大多数时候不应该)将非 QString 的地址存储在 QString* 中。

const char* CONSIGNMENT_TAG_DONATE = "DTag";

之所以有效,是因为 "DTag"(属于 const char[5] 类型)衰减为 const char*,因此赋值有道理。

QString CONSIGNMENT_TAG_DONATE = "DTag";

之所以有效,是因为 QString 有一个采用 const char* 的非显式构造函数,因此文字可以再次衰减为 const char*然后用于构造 QString

QString* CONSIGNMENT_TAG_DONATE = "DTag";

纯属废话,见第一段

使用 QString* 而不是普通的 QString 很可能对您的用例没有帮助。

关于c++ - 为什么我可以将字符串文字初始化为 const char* 和 QString 而不是 QString*?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36554884/

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