通过引用传递参数有两个原因:(1)为提高性能(在这种情况下,您希望通过const引用传递)和(2),因为您需要能够在函数内更改参数的值。
我高度怀疑,在现代建筑上花了无数的时间会大大降低您的速度。因此,我假设您打算更改State
方法内部的值。编译器抱怨,因为常量0
不能更改,因为它是一个右值(错误消息中的“非左值”)且不可更改(const
错误消息中的)。
简而言之,您想要一个可以更改传递的参数的方法,但是默认情况下,您想要传递一个不可更改的参数。
换句话说,非const
引用必须引用实际变量。函数签名(0
)中的默认值不是实数变量。您遇到了与以下问题相同的问题:
struct Foo {
virtual ULONG Write(ULONG& State, bool sequence = true);
};
Foo f;
ULONG s = 5;
f.Write(s); // perfectly OK, because s is a real variable
f.Write(0); // compiler error, 0 is not a real variable
// if the value of 0 were changed in the function,
// I would have no way to refer to the new value
如果您实际上并不打算State
在方法内部进行更改,则只需将其更改为即可const ULONG&
。但是您不会从中获得很大的性能优势,因此我建议将其更改为非引用ULONG
。我注意到您已经返回ULONG
,并且暗中怀疑它的值就是State
经过任何必要的修改后的值。在这种情况下,我只需要这样声明方法:
// returns value of State
virtual ULONG Write(ULONG State = 0, bool sequence = true);
当然,我不太确定你在写什么,写在哪里。但这是另一个问题。