如果我有如下课程:
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返回对它们的引用吗?
答案 0 :(得分:3)
getter会将16位值转换为系统值int
的大小,并返回32位副本(如果大小为32位)。
你想要实现的目标是什么?为什么不使用int16_t
中的<cstdint>
?
答案 1 :(得分:0)
getA
和getB
的返回类型对类的布局没有影响。因此,您的代码应该按照您的意愿运行。
答案 2 :(得分:0)
在大多数C ++实现中,添加非虚拟方法不会更改类实例的大小或内存布局。当您添加虚拟方法或继承时,类内存布局很可能会改变。
当然注意确切的内存布局是依赖于实现的,这意味着它可能会根据编译器供应商,编译器版本甚至编译器选项而改变。