我能做什麼下面的代碼所示:「+」不能添加兩個指針錯誤
std::string a = "chicken ";
std::string b = "nuggets";
std::string c = a + b;
然而,這種失敗:
std::string c = "chicken " + "nuggets";
它給了我一個錯誤說「‘+’不能添加兩個指針「。爲什麼?有沒有其他的方式來做到這一點,而不會出現錯誤?
我能做什麼下面的代碼所示:「+」不能添加兩個指針錯誤
std::string a = "chicken ";
std::string b = "nuggets";
std::string c = a + b;
然而,這種失敗:
std::string c = "chicken " + "nuggets";
它給了我一個錯誤說「‘+’不能添加兩個指針「。爲什麼?有沒有其他的方式來做到這一點,而不會出現錯誤?
"chicken "
和"nuggets"
是文字C字符串而不是std::string
。
您可以直接串接:
std::string c = "chicken " "nuggets";
由於C++ 14,您可以添加後綴s
有串
using namespace std::string_literals;
std::string c = "chicken "s + "nuggets"s;
對於谷歌而言,這是練習1-2中「加速C++」(Koenig,2000)的答案。 – MordechayS
"chicken "
和"nuggets"
不std::string
型的,但const char[]
。因此,即使您想要將連接分配給字符串,它們類型也沒有運算符+
。你可以解決這個使用:
std::string c = std::string("chicken ") + "nuggets";
兩個"chicken"
和"nuggets"
具有類型const char*
(如代碼文本)。所以你正試圖添加指針。
嘗試 std::string c = std::string("chicken") + "nuggets";
的std :: string是不是語言本身的一部分,它的標準庫的一部分。 C++旨在儘可能少地使用語言特性。所以字符串的內置類型在解析器等中不存在。這就是爲什麼字符串文字將被指定爲指針的原因。
EDIT
要完全正確的:文字的類型是真的const char[N]
(其中,N是在字面1字符計數爲\0
但在C++陣列([]
)可以被視爲指針,這一點。是什麼編譯器試圖做的(因爲它不能添加陣列)
請注意,類型實際上是'const char [9]'和'const char [8]'。 – juanchopanza
是真的,我想簡化答案(沒有解釋[]在C + +隱式指針:)) – Hcorg
看到[this](http:// stackoverflow。com/questions/12517983/c-what-is-datatype-of-string-literal)的原因 – NathanOliver
,如果你告訴我們string'是什麼'這將有助於。 – juanchopanza
你'包括'? –
CoryKramer
我以爲我已經正確地解釋了問題,不好意思。而且不,我不需要包含。 –