gpt4 book ai didi

c++ - std::is_trivially_xxx 其中一个暗示另一个

转载 作者:行者123 更新时间:2023-12-03 12:14:25 25 4
gpt4 key购买 nike

我很难理解以下概念:

  • 是_trivially_copyable
  • is_trivially_copy_assignable
  • 是_trivially_copy_constructible
  • 是_trivially_destructible
  • is_trivially_move_assignable

std::string_view为例。

#include <string_view>

int main(){
using sv = std::string_view;

// static_assert(std::is_trivial_v<sv> );
static_assert(std::is_trivially_copyable_v<sv> );
static_assert(std::is_trivially_copy_assignable_v<sv> );
static_assert(std::is_trivially_copy_constructible_v<sv> );
static_assert(std::is_trivially_destructible_v<sv> );
static_assert(std::is_trivially_move_assignable_v<sv> );
}

我的问题是这些中的哪一个,暗示其他的,所以我可以在我的代码中减少 static_assert?

我知道 is_trivial 暗示所有这些,

请注意,我对 c-tors 不感兴趣:

  • 是_trivially_constructible
  • is_trivially_default_constructible

最佳答案

std::is_trivially_copyable 涵盖其余部分,但允许删除相关方法。它说:

If T is a TriviallyCopyable type, provides the member constant value equal true. For any other type, value is false.

以及 TriviallyCopyable 的要求是:

  • Every copy constructor is trivial or deleted
  • Every move constructor is trivial or deleted
  • Every copy assignment operator is trivial or deleted
  • Every move assignment operator is trivial or deleted
  • at least one copy constructor, move constructor, copy assignment operator, or move assignment operator is non-deleted
  • Trivial non-deleted destructor

您甚至可以检查 llvm implementation .

这与 rule of zero 有关.

AFAIK 测试的其余部分是基本的,并且在逻辑含义方面彼此无关。

除了你提到的测试 is_copy_assignableis_copy_constructible(以及可能的其他“复制”版本)可以根据无复制测试来制定,例如is_assignable .但这是不同的,因为检查“复制”只是添加额外的类型约束。

关于c++ - std::is_trivially_xxx 其中一个暗示另一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58393491/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com