Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
(устаревшее) Инициализация списка элементов в списке инициализатора элементов нестатических данных не реализована.
Это предупреждение устарело в Visual Studio 2015. В Visual Studio 2013 и более ранних версиях компилятор Microsoft C++ не реализует инициализацию списка элементов в списке инициализаторов элементов, не являющихся статическими. До Visual Studio 2013 Update 3 в таких случаях инициализация автоматически преобразовывалась в вызов функции, что могло приводить к получению неверного кода. В Visual Studio 2013 Update 3 в таких случаях выводится ошибка.
Этот пример создает C2797:
#include <vector>
struct S {
S() : v1{1} {} // C2797, VS2013 RTM incorrectly calls 'vector(size_type)'
std::vector<int> v1;
std::vector<int> v2{1, 2}; // C2797, VS2013 RTM incorrectly calls 'vector(size_type, const int &)'
};
Этот пример также создает C2797:
struct S1 {
int i;
};
struct S2 {
S2() : s1{0} {} // C2797, VS2013 RTM interprets as S2() : s1(0) {} causing C2664
S1 s1;
S1 s2{0}; // C2797, VS2013 RTM interprets as S1 s2 = S1(0); causing C2664
};
Чтобы устранить эту проблему, используйте явное создание внутренних списков. Например:
#include <vector>
typedef std::vector<int> Vector;
struct S {
S() : v1(Vector{1}) {}
Vector v1;
Vector v2 = Vector{1, 2};
};
Если инициализация списка не требуется:
struct S {
S() : s1("") {}
std::string s1;
std::string s2 = std::string("");
};
(Компилятор в Visual Studio 2013 делает это неявным образом во всех версиях до Visual Studio 2013 Update 3.)