什么" const& X",其中X是方法原型中的结构意义?

时间:2013-02-19 13:33:26

标签: c++ methods const

我正在读一本书C ++和R中的统计计算(Eubank和Kupresanin,2012),并且有以下练习:

“3.27。为具有两个整数成员元素Xa的结构b编写代码。结构的一个方法应该有原型

bool compare(const& X)

compare方法应比较两个X对象,并返回a成员值较小的对象。“

这里的问题是我不明白const& X应该代表什么,并且似乎g ++编译器不理解它,因为它给出了错误。这应该意味着什么,还是只是一个错字?我的解决方案忽略了const&部分,是这样的:

struct X{
    int a;
    int b;
    X(int A, int B);
    bool compare(X x);
};

X::X(int A, int B){
    a=A;
    b=B;
}

bool X::compare(X x){
    if(x.a>(*this).a){
        return true;
    } else return false;
}

int main(){
    X y(5,0);
    X z(2,3);
    if(y.compare(z))
        cout << "y.a = "<<y.a<< " which is larger than z.a = "<< z.a<<endl;
    else
        cout << "y.a = "<<y.a<< " which is smaller than z.a = "<< z.a<<endl;
    return 0;
}

这似乎工作正常。

3 个答案:

答案 0 :(得分:3)

如果您已正确转录,则会出现拼写错误,但&的存在不是它。它应该是:

bool compare(const X&)

这是引用类型。也就是说,const X&是“const X的引用”。获取引用类型参数意味着不会复制传入的X对象 - 您在函数中看到的对象是从外部传入的对象。

答案 1 :(得分:2)

这很可能是一个错字,它们可能意味着const X &,就像对常量X的引用一样:

bool compare(const X &)

答案 2 :(得分:1)

语法

bool compare(const X&){ }

表示对X的常量“引用”; 引用是变量的别名。它的工作方式类似于指针,但它连接到它在其生命周期中引用的对象。您将更改传递给函数的对象,就像使用指针一样。