绑定到引用discard qualfier时出错

时间:2017-12-11 11:24:50

标签: c++ c++11

我正在编写一个友元函数来扩展我创建的Vector类。

    Vector myFunc (const Vector& from)
        {
        Vector res = from;
        //stuff
        return res;
        }

它给了我错误:将'const Vector'绑定到'Vector&'类型的引用丢弃限定符。

我不明白为什么这是无效的,因为我只修改了通过重载operator =(const Vector&)函数创建的const对象的副本

但是,如果我修改它以便创建矢量,那么复制

    Vector myFunc (const Vector& from)
        {
        Vector res;
        res = from;
        //stuff
        return res;
        }

它编译没有错误。为什么呢?

2 个答案:

答案 0 :(得分:2)

Vector res = from;不调用operator=(const Vector&),它是调用复制构造函数的copy-initialization语法。您的复制构造函数很可能定义为Vector(Vector&)而不是Vector(Vector const &)

答案 1 :(得分:0)

正如VTT所说的那样,我被称为复制构造函数,我已将其定义为Vector(Vector&),原因不在于问题之外。仍然不确定为什么compilator(gcc)不使用默认构造函数然后复制构造函数,这将是有效的,但我想这是一个简单的解决方案