c++ back_inserter的初始化

8oomwypt  于 2023-07-01  发布在  其他
关注(0)|答案(1)|浏览(128)

考虑以下代码(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或标准中的相关文档吗?

a9wyjsp7

a9wyjsp71#

std::back_inserter是一个 * 函数 *,它返回一个std::back_insert_iterator<Container>示例:

template< class Container >
constexpr std::back_insert_iterator<Container> back_inserter( Container& c );

你不能使用{调用函数…}就像你在auto b1 = std::back_inserter{v1};中尝试做的那样。调用函数( ... )需要包围参数,就像在auto b2 = std::back_inserter(v1);中一样。

相关问题