考虑以下代码(live):
#include <vector>
#include <iterator>
int main() {
std::vector<int> v1 = {1, 2, 3};
// auto b1 = std::back_inserter{v1};
auto b2 = std::back_inserter(v1);
}
如果我用b1
取消注解,gcc会给出以下错误:
<source>: In function 'int main()':
<source>:6:24: error: unable to deduce 'auto' from 'std::back_inserter'
6 | auto b1 = std::back_inserter{v1};
| ^~~~~~~~~~~~~
<source>:6:24: note: couldn't deduce template parameter 'auto'
<source>:6:37: error: expected ',' or ';' before '{' token
6 | auto b1 = std::back_inserter{v1};
|
另一方面,使用带有b2
的行编译得很好。
为什么带有b1
的行会导致错误,而带有b2
的行编译正常?如果可能的话,你能给我指出https://en.cppreference.com或标准中的相关文档吗?
1条答案
按热度按时间a9wyjsp71#
std::back_inserter
是一个 * 函数 *,它返回一个std::back_insert_iterator<Container>
示例:你不能使用
{
调用函数…}
就像你在auto b1 = std::back_inserter{v1};
中尝试做的那样。调用函数(
...)
需要包围参数,就像在auto b2 = std::back_inserter(v1);
中一样。