Конструктор C ++ по умолчанию: строковые параметры против строковых параметров ()

Возможный дубликат:
Разве скобки на конструкторе без аргументов не являются стандартом языка?

Может кто-нибудь объяснить, почему эти строки не дают мне ошибку:

string params;
params+="d";

но эти строки:

string params();
params+="d";

дай мне эту ошибку: ошибка C2659: ‘+ =’: функция как левый операнд

2

Решение

Это не объект:

 string params();

Это функция, возвращающая строку:

 string params();

Как это:

 string params(void);

Итак, ошибка сейчас очевидна: функция как левый операнд

Эта проблема имеет собственное имя: http://en.wikipedia.org/wiki/Most_vexing_parse

7

Другие решения

В первом случае с

string params;

создает экземпляр строки, используя конструктор по умолчанию.

Во втором случае

string params();

создает указатель на функция, возвращающая строку. На этот тип оператор + = (константная строка&) по-видимому, не определяется.

Да, это немного сбивает с толку особенность языка, потому что, когда вы используете не конструктор по умолчанию, вы можете написать, например, например.

string params("d");
1

По вопросам рекламы [email protected]