2014-09-19 60 views
0

這個問題聽起來有點古怪,但檢查的代碼示例什麼參數構造函數的意思,當明確要求在聲明

#include <iostream> 

using namespace std; 

int main() { 
    string a, b(), c("test"); 

    // No problems 
    a = c; 

    // tester.cpp:9:7: error: assignment of function ‘std::string b()’ 
    b = c; 

    // tester.cpp:10:7: error: invalid conversion from ‘std::string (*)() {aka std::basic_string<char> (*)()}’ to ‘char’ 
    a = b; 

    // No problems 
    c = a; 
} 

你可以看到,它看起來像B是被默認的構造函數創建,但實際上不是這樣。所以我的問題是,string b()是什麼意思?

+0

確實幾乎是一個愚蠢的玩法,但我覺得值得回答,因爲逗號加入了近戰。 – Bathsheba 2014-09-19 08:25:53

回答

1

冷凝你的代碼string b();,你在這裏做什麼聲明原型到功能稱爲b返回一個string和不帶任何參數。

「複合聲明」中的逗號混淆了這一點。

+0

是不是稱它爲「逗號運算符」本身有點誤導?這是一個由逗號分隔的聲明符列表,逗號運算符是一個不同的野獸。 – user657267 2014-09-19 08:15:59

+0

我認爲我的術語是正確的;遵循C++語法。 – Bathsheba 2014-09-19 08:18:10

+0

@Bathsheba:運算符出現在表達式中,而不是在聲明符列表中。這確實是一個聲明列表。 – MSalters 2014-09-19 08:22:13

1

它實際上是一個函數聲明。可以聲明本地函數,但不能定義它們。因此,明確不可能調用默認的構造函數。

1

經典錯誤,但錯誤消息已經說明:function std::string b() /。

相關問題