J'écris du code pour un microcontrôleur, et je dois m'assurer que ma structure est un POD. Je pensais pouvoir utiliser une "liste d'initialisation de membre" pour initialiser les membres, mais cela ne passe pas le test "is_pod". Dans l'exemple ci-dessous, A est un POD, B et C ne le sont pas. Ajout de "D() = par défaut;" à D semble en faire un POD. Mais, en faisant cela, je ne peux plus avoir de "listes d'initialisation de membre"? Existe-t-il un moyen pour une structure d'être un POD et d'avoir une "liste d'initialisation de membre"?C++ Struct échoue au test POD
#include <iostream>
#include <string>
struct A {
int var1;
};
struct B {
int var1;
//B() = default;
B() : var1(100) {}
};
struct C {
int bar [10];
C() : bar{0} {}
};
struct D {
int var1;
D() = default;
//D(int x) : var1(x) {}
};
int main()
{
std::cout << std::boolalpha;
std::cout << "\nIs A a POD = " << std::is_pod<A>::value;
std::cout << "\nIs B a POD = " << std::is_pod<B>::value;
std::cout << "\nIs C a POD = " << std::is_pod<C>::value;
std::cout << "\nIs tD a POD = " << std::is_pod<D>::value;
}
Mise à jour === 1 ===
Merci pour les réponses! Donc, semble qu'il n'y a aucun moyen d'initialiser les variables membres dans la définition de la structure. Les travaux suivants, mais n'est pas aussi élégant que d'avoir l'initialisation dans la structure elle-même.
typedef struct A_ {
int var1;
} A;
A a = {
.var1 = 100
};
Handy reading: http://www.cppreference.com/w/cpp/concept/PODType – user4581301
C'est un peu énigmatique lors de la relecture. Je pense que vous obtenez de-PODed par l'absence d'un constructeur par défaut. La déclaration d'un constructeur supprime le constructeur par défaut sauf si vous contredisez en déclarant explicitement un constructeur par défaut. – user4581301
Je crois que vous ne pouvez pas avoir d'initialisation personnalisée dans la structure de type pod. –