方法访问控制和POD

时间:2016-09-21 12:16:04

标签: c++ c++11

根据the docs

  

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

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 ++结构中的数据和函数访问控制有什么区别?

1 个答案:

答案 0 :(得分:1)

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

正如文档所述,POD的一个要求是所有非静态数据成员的访问控制是相同的。即使您的OK结构具有私有整数,它也是唯一的整数,因此这不是问题。但是,如果您添加公开int b;,则应该会看到与KO类型相同的结果(无论BarFoo功能如何)。