我正在编写一个友元函数来扩展我创建的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;
}
它编译没有错误。为什么呢?
答案 0 :(得分:2)
行Vector res = from;
不调用operator=(const Vector&)
,它是调用复制构造函数的copy-initialization语法。您的复制构造函数很可能定义为Vector(Vector&)
而不是Vector(Vector const &)
。
答案 1 :(得分:0)
正如VTT所说的那样,我被称为复制构造函数,我已将其定义为Vector(Vector&),原因不在于问题之外。仍然不确定为什么compilator(gcc)不使用默认构造函数然后复制构造函数,这将是有效的,但我想这是一个简单的解决方案