Возможный дубликат:
Разве скобки на конструкторе без аргументов не являются стандартом языка?
Может кто-нибудь объяснить, почему эти строки не дают мне ошибку:
string params;
params+="d";
но эти строки:
string params();
params+="d";
дай мне эту ошибку: ошибка C2659: ‘+ =’: функция как левый операнд
Это не объект:
string params();
Это функция, возвращающая строку:
string params();
Как это:
string params(void);
Итак, ошибка сейчас очевидна: функция как левый операнд
Эта проблема имеет собственное имя: http://en.wikipedia.org/wiki/Most_vexing_parse
В первом случае с
string params;
создает экземпляр строки, используя конструктор по умолчанию.
Во втором случае
string params();
создает указатель на функция, возвращающая строку. На этот тип оператор + = (константная строка&) по-видимому, не определяется.
Да, это немного сбивает с толку особенность языка, потому что, когда вы используете не конструктор по умолчанию, вы можете написать, например, например.
string params("d");