代码之家  ›  专栏  ›  技术社区  ›  rainer

后台插入程序的初始化

  •  0
  • rainer  · 技术社区  · 1 年前

    考虑以下代码( 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 回复  |  直到 1 年前
        1
  •  3
  •   Ted Lyngmo    1 年前

    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);