传递值期间的隐式转换有效,但是按引用传递则不然

时间:2013-01-29 16:01:46

标签: c++ clang++

使用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参考会导致问题。

2 个答案:

答案 0 :(得分:1)

尝试此解决方案

void f(const A &a)
{
    cout << a._s << endl;
}

“test”是临时对象,不能绑定到非const引用

答案 1 :(得分:0)

f("test");尝试创建临时A - f(A("test"));,但该临时不能绑定到非const引用。传递值是可以的,因为理论上可以制作副本(实际上会发生复制省略)。