2016-09-21 83 views
1

根据the docs方法访问控制和POD

所有非静态数据成员具有相同的访问控制

this piece of code

#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

它赋予编译器编写者以不同的访问控制组织数据的自由。原来的理由是我无法告诉你 - 可能是非常具有历史意义的(回到C++基本上是c的预处理器的时代)。 –

+1

PODness是关于布局,而不是访问。只有非静态数据成员参与布局。 (并且布局按访问级别进行分组,并在不同的访问级别进行不确定。) –

回答

1

函数不起作用,因为它们不存储在对象中。成员函数只是一个带编译器插入的隐式参数(这个)的普通函数。只有非静态的数据成员作为对象的一部分放置在内存中。

正如文档中提到的,POD的一个要求是对所有非静态数据成员的访问控制是相同的。即使你的OK结构有一个私有整数,它是唯一的,所以这不是问题。但是,如果添加公共int b;,则应看到与KO类型相同的结果(不管BarFoo函数如何)。