1

我想“迁移”到 C++17 并正在研究它。

我发现这是:

https://gcc.godbolt.org/z/sPnsEM

#include <string_view>
#include <type_traits>

int main(){
    return 
            (std::is_standard_layout_v<std::string_view> ? 10 : 20)
    +
            (std::is_trivial_v<std::string_view> ? 100 : 200)
    +       (std::is_trivially_copyable_v<std::string_view> ? 1000 : 2000)
    ;
}

返回 1210,例如std::string_viewisstandard_layouttrivially_copyable,但令人惊讶的是 is not trivial

我在这里检查了一些实现:

https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/experimental/string_view

而且我没有看到任何 d-tor。

那是因为它的c-tors吗?

4

1 回答 1

2

您的特定实现string_view可能是微不足道的可复制和标准布局。但是该标准并不要求所有string_view实现都这样做。因此,您所做的只是测试您的特定标准库版本是否具有这些属性。

一个有效的string_view实现根本不可能是 Trivial 类型。该标准要求默认构造函数string_view为空,这要求其默认构造函数是非平凡的。

于 2019-10-06T14:20:50.120 回答