7
Mã sauPOD trong Visual Studio 2008
#include <iostream>
#include <new>
#include <cstring>
#include <type_traits>
template<typename T>
void is_pod(char* c)
{
cout << "Type " << c;
if(std::is_pod<T>::value)
::std::cout << " is POD" << endl;
else
::std::cout << " is not!" << endl;
}
#define CHECK_TYPE(ty) ::is_pod<ty>(#ty)
struct POD_Parent{};
struct POD_Child : public POD_Parent{int y;};
struct POD_Child2 {int x; POD_Parent y; POD_Child ssd;};
int main()
{
CHECK_TYPE(POD_Parent);
CHECK_TYPE(POD_Child);
CHECK_TYPE(POD_Child2);
Cung cấp cho kết quả như sau: Đó là kỳ lạ!
Type POD_Parent is POD
Type POD_Child is not!
Type POD_Child2 is POD
POD_Child có thể không phải là POD ?! và POD_Child2 là POD? !!
Lưu ý rằng tôi đã biên dịch nó bằng cách sử dụng MinGW (sử dụng tùy chọn -std = C++ 11) và nó nói rằng tất cả chúng đều là POD.
xin lỗi tôi không thấy POD_Child như một thành viên của POD_Child2, tôi đã xóa câu trả lời vì nó không đúng :) –
[Mọi thứ đã thay đổi (khá một chút) kể từ năm 2008] (http://stackoverflow.com/questions/4178175/what-are-aggregates-and-pods -and-how-why-are-them-special/7189821 # 7189821), và trình biên dịch cũ có lẽ đã sai. –
Tôi nhận được kết quả tương tự trong VC2010 khi bạn nhận được trong năm 2008. – user93353