抱歉可能是一个太简单的问题,我是c ++的新手。我应该如何实现int
字段,该字段只能在类中修改但具有公共访问器?
在c#中我们可以编写这个简单的代码:
public int MsgSeqNum { get; private set; }
在c ++上,我应该写一些类似的东西(伪代码):
public:
int GetMsgSeqNum() { return msgSeqNum; };
private:
int msgSeqNum;
这是正确的做事方式吗? GetMsgSeqNum
会被内联吗?我应该手动将方法标记为inline
吗?我是否引入延迟添加此方法调用?
答案 0 :(得分:7)
这是正确的做事方式吗?
是的,你应该将函数返回参数标记为const
int GetMsgSeqNum()const { return msgSeqNum; };
正如评论中所提到的,const
将不允许您修改对象,因此如果您需要这样做,您应该使getter非const,或者声明要在stil中更改的成员{{ 1}} getter为const
。
GetMsgSeqNum会被内联吗?
很可能是的,在类声明中定义的任何函数都具有隐式内联。通过内联无论是显式还是隐式都不能保证函数将被内联。
我是否会引入延迟添加此方法调用?
很可能没有,任何理智的编译器实现都会优化这样的调用。
答案 1 :(得分:2)
这是C++
中唯一理智方式...您可以尝试
public:
inline int GetMsgSeqNum() const { return msgSeqNum; } //const -> doesn't change object
但是你不能强迫编译器坚持inline
。编译器决定是否inline
此方法。如果编译器没有内联方法,则没有严重的性能损失,所以不要担心。
在MSVC中有__forceinline
- 关键字,您可以强制编译器内联您的方法,但与getter和setter一样,这可能稍微超出边缘。
请参阅Wikipedia。