我正在爲微控制器編寫代碼,並且需要確定我的結構是POD。我以爲我可以使用「成員初始值設定項列表」來初始化成員,但是這不會通過「is_pod」測試。在下面的例子中,A是POD,B和C不是。添加「D()= default;」到D似乎使它成爲POD。但是,通過這樣做,我不能再有一個「成員初始化列表」?有沒有辦法讓一個結構成爲一個POD,並且有一個「成員初始化列表」?C++ Struct失敗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;
}
===更新1 ===
謝謝回覆!所以,似乎沒有辦法在結構定義中初始化成員變量。下面的工作,但不像在結構本身的初始化那樣優雅。
typedef struct A_ {
int var1;
} A;
A a = {
.var1 = 100
};
方便閱讀:http://en.cppreference.com/w/cpp/concept/PODType – user4581301
這對重讀有點神祕。我想你會因缺乏默認的構造函數而被解除封裝。聲明構造函數會除去默認構造函數,除非您通過顯式聲明默認構造函數來計數。 – user4581301
我相信你不能在pod-type結構中有任何自定義的初始化。 –