【发布时间】:2014-12-15 19:46:50
【问题描述】:
如果问题标题不准确,我深表歉意 - 但我很难理解这里发生了什么。
考虑以下类:
struct foo {
foo(foo&);
};
以下没有错误:
void func(foo& f) {
foo bar{f};
}
但是,当我使用自动时:
void func(foo& f) {
auto bar = foo{f};
}
我得到(gcc):
test.cpp: In function ‘void func(foo&)’:
test.cpp:6:21: error: no matching function for call to ‘foo::foo(foo)’
test.cpp:6:21: note: candidate is:
test.cpp:2:5: note: foo::foo(foo&)
test.cpp:2:5: note: no known conversion for argument 1 from ‘foo’ to ‘foo&’
(叮当声)
test.cpp:6:10: error: no matching constructor for initialization of 'bar'
auto bar = foo{f};
^ ~~~~~~
test.cpp:2:5: note: candidate constructor not viable: expects an l-value for 1st argument
foo(foo&);
^
有人可以解释为什么这是一个错误吗?
谢谢!
编辑:如果我将复制构造函数添加到 foo.但是,我的印象是,'=' 语法右侧的变量声明 + 对构造函数的显式调用被特殊处理,不是复制构造,而是直接初始化。
【问题讨论】: