2015-05-18 69 views
2

我能做什麼下面的代碼所示:「+」不能添加兩個指針錯誤

std::string a = "chicken "; 
std::string b = "nuggets"; 
std::string c = a + b; 

然而,這種失敗:

std::string c = "chicken " + "nuggets"; 

它給了我一個錯誤說「‘+’不能添加兩個指針「。爲什麼?有沒有其他的方式來做到這一點,而不會出現錯誤?

+1

,如果你告訴我們string'是什麼'這將有助於。 – juanchopanza

+1

你'包括'? – CoryKramer

+0

我以爲我已經正確地解釋了問題,不好意思。而且不,我不需要包含。 –

回答

13

"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; 
+0

對於谷歌而言,這是練習1-2中「加速C++」(Koenig,2000)的答案。 – MordechayS

6

"chicken ""nuggets"std::string型的,但const char[]。因此,即使您想要將連接分配給字符串,它們類型也沒有運算符+。你可以解決這個使用:

std::string c = std::string("chicken ") + "nuggets"; 
4

兩個"chicken""nuggets"具有類型const char*(如代碼文本)。所以你正試圖添加指針。

嘗試 std::string c = std::string("chicken") + "nuggets";

的std :: string是不是語言本身的一部分,它的標準庫的一部分。 C++旨在儘可能少地使用語言特性。所以字符串的內置類型在解析器等中不存在。這就是爲什麼字符串文字將被指定爲指針的原因。

EDIT

要完全正確的:文字的類型是真的const char[N](其中,N是在字面1字符計數爲\0但在C++陣列([])可以被視爲指針,這一點。是什麼編譯器試圖做的(因爲它不能添加陣列)

+3

請注意,類型實際上是'const char [9]'和'const char [8]'。 – juanchopanza

+0

是真的,我想簡化答案(沒有解釋[]在C + +隱式指針:)) – Hcorg

+0

看到[this](http:// stackoverflow。com/questions/12517983/c-what-is-datatype-of-string-literal)的原因 – NathanOliver