确实可以复制,这意味着不可复制
Does being trivially copyable imply being nothrow copyable?
另外,还有一个可以投掷的copy构造函数的类型示例,但仍然很琐碎?如果不是,这是否意味着is_nothrow_copy_constructible_v<T>
应在is_trivially_copy_constructible_v<T>
为true时是正确的?
请注意,根据标准(最新草稿[23.15.4.3]),要使T型不可复制,我们需要表达式T t(declval<const T&>());
是一个形式良好的可变定义任何例外。这个措辞对我来说似乎有些危险 - 对于而言,这意味着什么?noexcept
指数是否足以建立知识?或者也许将确定保留给实施?
编辑:我意识到,在微不足道的复制和易于复制的构造之间存在区别。我的重点是后者。
难以复制的是不可复制吗?
否。例如:
struct X {
X(X&& ) = default;
X(X const& ) = delete;
};
这种类型在可复制的上是微不足道的,但根本不可复制。
但是,给定,一种类型是可复制的&Dagger; > 和琐碎的可复制,那么它必须无需投掷即可复制(任何潜在的例外都会必须来自不存在的非平凡副本)。
&Dagger; 简单地默认复制构造函数,但对其进行标记noexcept(false)
将其定义为已删除,因此这种类型是不可复制的。
在实现dr2171的编译器上:
struct X {
X(X&) = default;
template<class U> X(U&&){ throw 1; }
};
static_assert(std::is_trivially_copyable_v<X>, "");
static_assert(std::is_copy_constructible_v<X>, "");
static_assert(!std::is_nothrow_copy_constructible_v<X>, "");
static_assert(!std::is_trivially_copy_constructible_v<X>, "");
相关文章:
- 简单可复制与可简单复制
- reinterpret_cast,只读访问,简单的可复制类型,会出什么问题?
- 对于参加可复制和可移动类的访问者来说,应该有多少过载?
- 可变参数宏:无法通过"..."传递非平凡可复制类型的对象
- 为什么 std::atomic<std::string> 会给出微不足道的可复制错误?
- 我可以隐式地创建一个琐碎的可复制类型吗
- 是std::memcpy在不同的可复制类型之间的未定义行为
- 为什么一对常量是微不足道的可复制的,而对不是?
- 在一个微不足道的可复制结构中,移动语义应该实现吗?
- 防止作用域枚举可复制/可移动
- C :对象上的可复制视图
- 防御性地应用 std::move 到平凡可复制的类型是否不可取
- 为什么 std::function 本身是可复制构造的类型?
- C++不可复制的 lambda 的行为是可复制的
- 错误:无法通过'...'传递非平凡可复制类型的对象'class boost::filesystem::path'
- 不能让类是微不足道的可复制的。我做错了什么?
- 确实可以复制,这意味着不可复制
- 使用临时存储区复制普通的可复制类型:允许吗
- 使用realloc可以安全地重新分配琐碎的可复制对象的存储吗
- 为什么Boost.Asio处理程序必须是可复制的