В приведенном ниже примере почему я не могу просто передать string
в printFoo()
?
#include <string>
#include <iostream>
using namespace std;
class Foo {
public:
Foo(const Foo &foo) : str(foo.str) {}
Foo(string str) : str(str) {}
string str;
};
void printFoo(Foo foo) {
cout << foo.str << endl;
}
int main() {
Foo foo("qux");
printFoo(foo); // OK
printFoo("qix"); // error: no matching function for call to 'printFoo'
return 0;
}
По какой-то причине у меня было в голове, что конструктор будет автоматически определяться и использоваться для построения объекта.
Почему я не могу это сделать, но могу передать константу char[n]
аргументу, принимающему std::string
, например?