【发布时间】:2022-01-26 20:05:14
【问题描述】:
在cppreference 上,std::basic_string_view<CharT,Traits>::starts_with 存在三个重载:
constexpr bool starts_with( basic_string_view sv ) const noexcept; (1)
constexpr bool starts_with( CharT c ) const noexcept; (2)
constexpr bool starts_with( const CharT* s ) const; (3)
为什么第三个没有标记为noexcept?类似于std::basic_string_view<CharT,Traits>::ends_with
【问题讨论】:
-
第三个可能会因非空终止 C 字符串而失败(UB),允许异常?
-
有趣,MS 的实现是
noexcept: docs.microsoft.com/en-us/cpp/standard-library/… -
@AdrianMole
std::string_view的构造函数执行动态分配还是执行复制?我希望不会。 -
@MatG 幸运的是,没有。然而,有些构造函数可能会抛出,可能与此函数的原因相同(原因不是分配)。
-
@digito_evo 因为标准不要求它是
noexcept。
标签: c++ c++20 string-view