Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
(Föråldrad) Listinitiering i medlemsinitieringslistan eller icke-statisk datamedlemsinitierare implementeras inte.
Anmärkningar
Den här varningen är föråldrad i Visual Studio 2015. I Visual Studio 2013 och tidigare versioner implementerar Microsoft C++-kompilatorn inte listinitiering i antingen en medlemsinitieringslista eller en icke-statisk datamedlemsinitierare. Före Visual Studio 2013 Update 3 konverterades detta tyst till ett funktionsanrop, vilket kan leda till felaktig kodgenerering. Visual Studio 2013 Update 3 rapporterar detta som ett fel.
Examples
Det här exemplet genererar 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 &)'
};
Det här exemplet genererar även 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
};
Du kan åtgärda problemet genom att använda explicit konstruktion av inre listor. Till exempel:
#include <vector>
typedef std::vector<int> Vector;
struct S {
S() : v1(Vector{1}) {}
Vector v1;
Vector v2 = Vector{1, 2};
};
Om du inte kräver listinitiering:
struct S {
S() : s1("") {}
std::string s1;
std::string s2 = std::string("");
};
(Kompilatorn i Visual Studio 2013 gör detta implicit före Visual Studio 2013 Update 3.)