Почему указание значения по умолчанию вне класса допускается, но не внутри него?

#include <atomic>
std::atomic<int> outside(1);
class A{
std::atomic<int> inside(1);  // <--- why not allowed ?
};

ошибка:

prog.cpp:4:25: error: expected identifier before numeric constant
prog.cpp:4:25: error: expected ',' or '...' before numeric constant

В VS11

C2059: syntax error : 'constant'

3

Решение

Инициализаторы в классе не поддерживают (e) синтаксис инициализации, потому что члены комитета, которые его разработали, беспокоятся о потенциальных двусмысленностях (например, хорошо известный T t(X()); объявление было бы неоднозначным и не определяет инициализацию, но объявляет функцию с неназванным параметром).

Ты можешь сказать

class A{
std::atomic<int> inside{1};
};

В качестве альтернативы значение по умолчанию может быть передано в конструктор

class A {
A():inside(1) {}
std::atomic<int> inside;
};
6

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

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector