在c ++上使用公共访问器的私有字段

时间:2013-04-23 11:40:06

标签: c++

抱歉可能是一个太简单的问题,我是c ++的新手。我应该如何实现int字段,该字段只能在类中修改但具有公共访问器?

在c#中我们可以编写这个简单的代码:

public int MsgSeqNum { get; private set; }

在c ++上,我应该写一些类似的东西(伪代码):

public:
    int GetMsgSeqNum() { return msgSeqNum; };
private:
    int msgSeqNum;

这是正确的做事方式吗? GetMsgSeqNum会被内联吗?我应该手动将方法标记为inline吗?我是否引入延迟添加此方法调用?

2 个答案:

答案 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