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」は一時オブジェクトであり、非 const 参照にバインドできません

于 2013-01-29T16:19:52.017 に答える
0

f("test");A一時的な-を作成しようとしますf(A("test"));が、その一時的なものは非 const 参照にバインドできません。理論的にはコピーが作成されるため、値渡しは問題ありません (実際にはコピー省略が発生します)。

于 2013-01-29T16:05:13.863 に答える