方法访问控制和POD
问题描述:
所有非静态数据成员具有相同的访问控制
#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++结构体中的数据和函数访问控制有什么区别?
答
函数不起作用,因为它们不存储在对象中。成员函数只是一个带编译器插入的隐式参数(这个)的普通函数。只有非静态的数据成员作为对象的一部分放置在内存中。
正如文档中提到的,POD的一个要求是对所有非静态数据成员的访问控制是相同的。即使你的OK
结构有一个私有整数,它是唯一的,所以这不是问题。但是,如果添加公共int b;
,则应看到与KO
类型相同的结果(不管Bar
和Foo
函数如何)。
它赋予编译器编写者以不同的访问控制组织数据的*。原来的理由是我无法告诉你 - 可能是非常具有历史意义的(回到C++基本上是c的预处理器的时代)。 –
PODness是关于布局,而不是访问。只有非静态数据成员参与布局。 (并且布局按访问级别进行分组,并在不同的访问级别进行不确定。) –