C++ std::这是一个简单的意思吗
我很难理解以下概念:C++ std::这是一个简单的意思吗,c++,c++17,C++,C++17,我很难理解以下概念: 是可复制的吗 是不是可以分配 是可构造的吗 是可破坏的吗 _琐碎_移动_可分配吗 例如std::string\u视图 #include <string_view> int main(){ using sv = std::string_view; // static_assert(std::is_trivial_v<sv> ); static_assert(std::is_trivially_copyable_v<s
- 是可复制的吗
- 是不是可以分配
- 是可构造的吗
- 是可破坏的吗
- _琐碎_移动_可分配吗
std::string\u视图
#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> );
}
#包括
int main(){
使用sv=std::string\u视图;
//静态断言(std::is_-triple_-v);
静态断言(std::是可复制的);
静态断言(std::is_琐碎地_copy_可分配的_v);
静态断言(std::是可构造的);
静态断言(std::是可破坏的);
静态断言(std::is_琐碎地_移动_可分配的_v);
}
我的问题是,这些中的哪一个暗示了其他,这样我就可以在代码中减少静态的断言
我知道是微不足道的
意味着所有这些
注:我对c-TOR不感兴趣:
- 是可构造的吗
- 是可构造的吗
std::是可复制的
涵盖了其余部分,但允许删除相关方法。它说:
如果T是类型,则提供成员常量值等于true。对于任何其他类型,值为false
有关的资料和要求如下:
- 每个副本构造函数都是琐碎的或删除的
- 每个移动构造函数都是琐碎的或删除的
- 每个副本分配运算符都是琐碎的或已删除的
- 每个移动分配运算符都是平凡的或已删除的
- 至少有一个复制构造函数、移动构造函数、复制分配运算符或移动分配运算符未被删除
- 平凡非删除析构函数
除了您提到的测试外,
是可复制的
(可能还有其他“复制”版本)可以根据无复制测试来制定,例如。但这是不一样的,因为检查“复制”只是添加了额外的类型约束。所以基本上测试std::is_littley_copyable是不够的吗?而std::is_littley_copyable是可复制的
暗示std::is_littlely_可破坏的吗
?是的,对不起,我误读了原始问题,遗漏了是可复制的
我几乎完全重新表述了答案,但它应该是正确的,并回答您的问题。因此,你对方法可以删除的挑剔是正确的。答案是这样的,但值得强调:是可复制的,并不意味着某些东西是可复制的,更不用说是可复制的。例如struct A{A(const A&)=delete;}代码>是可复制的,但不是可复制的!