[英]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.