c++上带有公共访问器的私有字段
private field with public accessor on c++
对不起,这个问题可能太简单了,我是c++新手。我应该如何实现int
字段只能在类内修改,但有公共访问器?
public int MsgSeqNum { get; private set; }
在c++中,我应该这样写(伪代码):
public:
int GetMsgSeqNum() { return msgSeqNum; };
private:
int msgSeqNum;
这是正确的做法吗?GetMsgSeqNum
会被内联吗?我应该手动标记方法为inline
吗?添加这个方法调用时是否会引入延迟?
这是正确的做法吗?
是的,它是通过你应该标记函数返回参数为const
int GetMsgSeqNum()const { return msgSeqNum; };
正如在注释中提到的,const
不允许你修改对象,因此如果你需要这样做,你应该让getter非const,或者在你仍然是const
的getter中声明你要改变的成员为mutable
。
将GetMsgSeqNum内联?
很可能是,在类声明中定义的任何函数都具有隐式内联。无论显式还是隐式,Thru inline都不能保证函数将被内联。
添加此方法调用时是否引入延迟?
很可能不会,任何一个编译器实现都会优化这样的调用。
这是C++
中唯一合理的方法…你可以试试
public:
inline int GetMsgSeqNum() const { return msgSeqNum; } //const -> doesn't change object
但是你不能强迫编译器坚持使用inline
。编译器决定是否inline
这个方法。如果编译器没有内联该方法,也不会造成严重的性能损失,所以不用担心。
在MSVC中,有__forceinline
-关键字,你可以强制编译器内联你的方法,但与getter和setter一样,这可能有点过分。
参见维基百科
相关文章:
- 链接器找不到在虚拟类 c++ 中访问的静态字段的符号
- 如何在 c++ 中使用多态性访问派生类字段?
- 无法访问 Arduino 结构字段。错误"退出状态 1。xxxx 不命名类型"
- 如何访问 VTK 的类枚举字段
- 从一个类访问私有字段到另一个与C++中的前一个类无关的私有字段 (OOP)
- 访问向量字段的键 - 枚举类还是命名空间中的枚举?
- 在C++中使用 RapidJSON 访问 JSON 数组的字段
- 访问另一个类(系统)的非静态字段,就好像它是我自己的字段一样 - 优雅地
- 如何从 QWizardPage 和访问字段()运行 QThread
- 访问基类中直接受保护的字段
- C++无法访问继承类中的字段
- 派生类中的成员字段别名(无访问器功能)
- 如何使用运算符 [] 访问结构的指定字段值
- 返回对位字段的访问类型
- 如何使用指向该数组的指针访问结构数组中包含的结构中的字段?[C++]
- 从测试程序访问共享库中具有静态私有字段的类
- Armadillo CPP:3D字段的访问切片
- 如何在C++的专用模板类中访问模板类成员字段
- 在一个结构中,使用一个数组字段访问另一个是否合法
- C 运行时字段访问