保留指定的原始大小

时间:2011-09-19 08:25:36

标签: c++

如果我有如下课程:

class MyData
{
public:
    MyData( const AnotherObject& obj );

    int getA() { return A; }
    int getB() { return B; }

private:
    int A : 16;
    int B : 16;
}

我已经指定变量A和B仅占用16位的事实是否会被getter渲染为无意义?如果我传递这个类的实例,并且其他对象想要访问A和B但是我想保留我指定的大小,我会失去它,因为getA()和getB()将返回32位副本吗?

我是否会更好地公开A和B并根据需要直接访问它们?这会保留尺寸吗?或者我应该从getter返回对它们的引用吗?

3 个答案:

答案 0 :(得分:3)

getter会将16位值转换为系统值int的大小,并返回32位副本(如果大小为32位)。

你想要实现的目标是什么?为什么不使用int16_t中的<cstdint>

答案 1 :(得分:0)

getAgetB的返回类型对类的布局没有影响。因此,您的代码应该按照您的意愿运行。

答案 2 :(得分:0)

在大多数C ++实现中,添加非虚拟方法不会更改类实例的大小或内存布局。当您添加虚拟方法或继承时,类内存布局很可能会改变。

当然注意确切的内存布局是依赖于实现的,这意味着它可能会根据编译器供应商,编译器版本甚至编译器选项而改变。