类Foo
只有一个默认构造函数和一个复制构造函数。由类型的对象初始化的大小为10的向量在Foo
某种程度上是不正确的。
#include <iostream>
#include <vector>
class Foo
{
public:
Foo() = default; // Error1
Foo(Foo& foo) { // Error2
std::cout << "copied" << std::endl;
}
};
int main( void )
{
Foo f;
std::vector<Foo> vec(10, f); // Error3
return 0;
}
上面的示例代码有3个错误:
错误1:候选构造函数不可行:需要0个参数,但提供了1个
错误2:候选构造函数不可行:第一个参数('const Foo')将失去const限定词
错误3:在此处实例化成员函数'std :: __ 1 :: vector> :: vector'
当我在主函数中删除复制构造函数或向量时,没有错误。
题:
代码的哪一部分是错误的,为什么?
ps
当向量定义替换为时Foo ff(f)
,错误也消失了。是const
预选赛是由向量请求?
查看以下调用的构造函数的签名std::vector
:
vector(size_type n, const T& value, const Allocator& = Allocator());
该参数f
由const引用(参数value
)传递。因此,该参数不能绑定到复制构造函数foo
类型Foo&
的非常量参数Foo
。
相同(更简单)的情况:
Foo f;
const Foo& value = f;
Foo& foo = value; // error
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句