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
参照を作成すると問題が発生する理由がわかりません。