使用语句1不会报错,而使用语句2会报错,请问是什么原因呢?
代码片段
void addText(string text) {
// p = m.insert(p, text.begin(), text.end()); 语句1
p = m.emplace(p, text.begin(), text.end()); // 语句2
p += text.length();
}In file included from prog_joined.cpp:1:
In file included from ./precompiled/headers.h:25:
In file included from /usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/ccomplex:39:
In file included from /usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/complex:45:
In file included from /usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/sstream:40:
In file included from /usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/istream:40:
In file included from /usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/ios:44:
In file included from /usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/ios_base.h:41:
In file included from /usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/locale_classes.h:40:
In file included from /usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/string:54:
In file included from /usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/basic_string.h:39:
In file included from /usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/ext/alloc_traits.h:34:
/usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/alloc_traits.h:536:4: error: no matching function for call to 'construct_at'
531 | std::construct_at(__p, std::forward<_Args>(__args)...);
| ^~~~~~~~~~~~~~~~~
/usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/vector.tcc:397:23: note: in instantiation of function template specialization 'std::allocator_traits<std::allocator<char>>::construct<char, __gnu_cxx::__normal_iterator<char *, std::basic_string<char>>, __gnu_cxx::__normal_iterator<char *, std::basic_string<char>>>' requested here
392 | _Alloc_traits::construct(this->_M_impl, this->_M_impl._M_finish,
| ^
/usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/stl_vector.h:1349:11: note: in instantiation of function template specialization 'std::vector<char>::_M_emplace_aux<__gnu_cxx::__normal_iterator<char *, std::basic_string<char>>, __gnu_cxx::__normal_iterator<char *, std::basic_string<char>>>' requested here
1344 | { return _M_emplace_aux(__position, std::forward<_Args>(__args)...); }
| ^
Line 11: Char 13: note: in instantiation of function template specialization 'std::vector<char>::emplace<__gnu_cxx::__normal_iterator<char *, std::basic_string<char>>, __gnu_cxx::__normal_iterator<char *, std::basic_string<char>>>' requested here
11 | p=m.emplace(p,text.begin(), text.end());
| ^
/usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/stl_construct.h:94:5: note: candidate template ignored: substitution failure [with _Tp = char, _Args = <__gnu_cxx::__normal_iterator<char *, std::basic_string<char>>, __gnu_cxx::__normal_iterator<char *, std::basic_string<char>>>]: excess elements in scalar initializer
89 | construct_at(_Tp* __location, _Args&&... __args)
| ^
90 | noexcept(noexcept(::new((void*)0) _Tp(std::declval<_Args>()...)))
91 | -> decltype(::new((void*)0) _Tp(std::declval<_Args>()...))
| ~~~
1 error generated.