Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
(Verouderd) Lijstinitialisatie binnen een ledeninitialisatielijst of een niet-statisch gegevenslidinitialisatie is niet geïmplementeerd.
Opmerkingen
Deze waarschuwing is verouderd in Visual Studio 2015. In Visual Studio 2013 en eerdere versies implementeert de Microsoft C++-compiler geen lijstinitialisatie in een initialisatielijst van leden of een initialisatiefunctie voor niet-statische gegevensleden. Vóór Visual Studio 2013 Update 3 werd dit op de achtergrond geconverteerd naar een functieaanroep, wat kan leiden tot ongeldige codegeneratie. Visual Studio 2013 Update 3 rapporteert dit als een fout.
Voorbeelden
In dit voorbeeld wordt C2797 gegenereerd:
#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 &)'
};
In dit voorbeeld wordt ook C2797 gegenereerd:
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
};
U kunt dit probleem oplossen door expliciete opbouw van interne lijsten te gebruiken. Voorbeeld:
#include <vector>
typedef std::vector<int> Vector;
struct S {
S() : v1(Vector{1}) {}
Vector v1;
Vector v2 = Vector{1, 2};
};
Als u geen initialisatie van de lijst nodig hebt:
struct S {
S() : s1("") {}
std::string s1;
std::string s2 = std::string("");
};
(De compiler in Visual Studio 2013 doet dit impliciet vóór Visual Studio 2013 Update 3.)