1

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

4

2 回答 2

1

试试这个解决方案

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

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

于 2013-01-29T16:19:52.017 回答
0

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

于 2013-01-29T16:05:13.863 回答