使用clang ++ 4.1进行编译:
class A
{
public:
A(const char *s=0) : _s(s) {}
const char *_s;
};
void f(A a)
{
cout << a._s << endl;
}
int main()
{
f("test");
return 0;
}
印刷品,
test
如果我按如下方式定义f
,
void fA(A &a)
{
cout << a._s << endl;
}
我收到编译错误,
clang++ -std=c++11 -stdlib=libc++ -o test test.cpp
test.cpp:14:5: error: no matching function for call to 'f'
f("9000");
^
test.cpp:7:6: note: candidate function not viable: no known conversion from
'const char [5]' to 'A &' for 1st argument;
void f(A &a)
^
为什么呢?我不明白为什么让f
参考会导致问题。
答案 0 :(得分:1)
尝试此解决方案
void f(const A &a)
{
cout << a._s << endl;
}
“test”是临时对象,不能绑定到非const引用
答案 1 :(得分:0)
f("test");
尝试创建临时A
- f(A("test"));
,但该临时不能绑定到非const引用。传递值是可以的,因为理论上可以制作副本(实际上会发生复制省略)。