У меня есть две версии кода на C++. Одна дать проблему и другой не делает:ошибка с константным элементом и конструктором по умолчанию
/*
* This compiles fine
*/
class base {
private:
const char c;
};
int main() {
base b(); // compiles fine
}
/* * Это дает ошибку компиляции */
class base {
private:
const char c;
};
int main() {
base b; // error: structure 'b' with uninitialized const members
}
Примечание разница 'база Ь()' и 'база Ь'. Я думал, что оба вызову вызовет конструктор по умолчанию, и поскольку класс имеет поле const, программа не сможет скомпилировать. Пожалуйста, помогите объяснить это.
Возможный дубликат [почему конструктор по умолчанию отсутствует для класса, содержащего элементы данных const) (http://stackoverflow.com/questions/16706674/why-default-constructor-is-not-present-for- a-class-contains-const-data-members) – juanchopanza
Вы еще одна жертва «наиболее неприятного анализа» C++ (вы можете использовать его в Google): 'base b();' ** ** ** не анализируется как определение переменной компилятором, но как объявление _функции_ - так же, как 'int f();' или 'void g();'. (Правило большого пальца: все, что компилятор _can_ интерпретирует как объявление функции, это _will_.) –