簡體   English   中英

為什么我可以將字符串文字初始化為const char *和QString而不是QString *?

[英]Why can I initialize string literal as const char* and QString but not QString*?

我對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* ,因此文字可以再次衰減為const char* ,然后將其用於構造QString

QString* CONSIGNMENT_TAG_DONATE = "DTag";

只是胡說八道,見第一段。

使用QString*代替普通的QString很可能對您的用例沒有幫助。

C ++不知道如何將char數組轉換為指向QString的指針。

const char* CONSIGNMENT_TAG_DONATE = "DTag";

常量char數組為const char * -允許

QString CONSIGNMENT_TAG_DONATE = "DTag";

使用QString::QString(const char *str)構造QString::QString(const char *str)隱式轉換

QString* CONSIGNMENT_TAG_DONATE = "DTag";

QString *常量char數組QString * -這是如何工作的? 沒有進行此類轉換的規則。 從概念上講,它可能足夠簡單,但是如果沒有啟用它的實際代碼,它將無法正常工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM