gpt4 book ai didi

c++ - 禁用异常和 noexcept()

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:30:47 32 4
gpt4 key购买 nike

std::swap以这种方式声明:

template <class T> void swap (T& a, T& b)
noexcept (is_nothrow_move_constructible<T>::value &&
is_nothrow_move_assignable<T>::value);

如果我在我的程序中禁用异常(比如为 g++ 使用 -fno-exceptions)将 std::swap如果我的自定义类型支持移动,无论它们是否为 noexcept,都对它们使用移动操作?

编辑:后续问题:

在意识到 std::swap 将始终使用移动(如果我的类型有移动)之后,我真正的问题是像 is_nothrow_move_assignable<> 这样的特征会发生什么? ?

威尔std::vector如果我的类型有 noexcept(true),则在重新分配时总是使用移动移动操作?

最佳答案

swap 的 noexcept-specification 只告诉用户她可以在哪里使用 swap 而不会遇到异常。 实现实际上总是等同于

auto tmp = std::move(a);
a = std::move(b);
b = std::move(tmp);

当且仅当重载决策选择移动赋值运算符和/或构造函数时,它才会四处移动对象。

关于c++ - 禁用异常和 noexcept(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30276965/

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