根据the docs
所有非静态数据成员都具有相同的访问控制
#include <iostream>
struct KO
{
int a;
private:
int b;
};
struct OK
{
void Foo() { a = 42; }
private:
void Bar() { a = 43; }
int a;
};
int main() {
// your code goes here
std::cout << std::boolalpha;
std::cout << std::is_pod<KO>::value << std::endl;
std::cout << std::is_pod<OK>::value << std::endl;
return 0;
}
当数据成员具有不同的访问控制时,结构不是POD,但是没有提及功能成员,尽管它们具有不同的访问控制,但它们实际上是POD。
为什么? C ++结构中的数据和函数访问控制有什么区别?
答案 0 :(得分:1)
函数不会发挥重要作用,因为它们不存储在对象中。成员函数只是一个普通函数,它带有一个由编译器插入的隐式参数( this )。只有非静态数据成员才会作为对象的一部分放在内存中。
正如文档所述,POD的一个要求是所有非静态数据成员的访问控制是相同的。即使您的OK
结构具有私有整数,它也是唯一的整数,因此这不是问题。但是,如果您添加公开int b;
,则应该会看到与KO
类型相同的结果(无论Bar
和Foo
功能如何)。