不能将参数用作带有传递引用C ++的unsigned int

时间:2015-09-26 18:43:12

标签: c++ arguments parameter-passing unsigned-integer

我有一些C ++代码:

#include <bjarne/std_lib_facilities.h>

double random(unsigned int &seed);
int main ()
{
    int seed = 42;
    cout << random((unsigned int)seed) << endl;
}

double random(unsigned int &seed)
{
    const int MODULUS = 15749;
    const int MULTIPLIER = 69069;
    const int INCREMENT = 1;
    seed = (( MULTIPLIER * seed) + INCREMENT) % MODULUS;
    return double (seed)/MODULUS;
}

我在尝试编译时遇到错误:

error: invalid initialization of non-const reference of type ‘unsigned int&’ from an rvalue of type ‘unsigned int’

cout << random((unsigned int)seed) << endl;

我不明白为什么我不能使用int seed作为函数random的参数。我甚至尝试将type-casting int作为参数的unsigned int。我无法将unsigned int &seed参数设为const变量,因为我在函数中更改了它的值。提前谢谢!

1 个答案:

答案 0 :(得分:2)

如果您对某个类型有左值引用,则只能使用类型的内容对其进行初始化:

T obj = ...;
T& ref = obj;

派生类型

Derived obj = ...;
Base& ref = obj;

就是这样。您正尝试使用unsigned int&初始化int。或者,使用强制转换,您尝试使用临时值初始化左值引用。那些不适合两种允许的情况。您只需要传递正确的类型即可:

unsigned int seed = 42;
cout << random(seed);

虽然,为什么random()会改变种子?好像你应该按价值传递它......