0

对不起,这个问题可能太简单了,我是 C++ 的新手。我应该如何实现int只能在类内部修改但具有公共访问器的字段?

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

public int MsgSeqNum { get; private set; }

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

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

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

4

2 回答 2

7

这是做事的正确方式吗?

是的,您应该将函数返回参数标记为const

int GetMsgSeqNum()const { return msgSeqNum; };  

正如评论中提到的那样,const不允许您修改对象,因此如果您需要这样做,您应该将 getter 设为非 const,或者将您要在您的 stil constgetter 中更改的成员声明为mutable.

GetMsgSeqNum 会被内联吗?

很可能是的,在类声明中定义的任何函数都具有隐式内联。通过 inline 无论是显式还是隐式都不能保证该函数将被内联。

添加此方法调用时是否会引入延迟?

很可能不会,任何理智的编译器实现都会优化这样的调用。

于 2013-04-23T11:43:46.570 回答
2

这是在...中执行此操作的唯一明智的方法C++...您可以尝试

public:
    inline int GetMsgSeqNum() const { return msgSeqNum; } //const -> doesn't change object

但是你不能强迫编译器坚持inline. 编译器决定是否使用inline此方法。如果编译器不内联该方法,不会有严重的性能损失,所以不用担心。

在 MSVC 中有__forceinline-keyword ,您可以在其中强制编译器内联您的方法,但与 getter 和 setter 一样,这可能有点过分了。

参见维基百科

于 2013-04-23T11:43:42.290 回答