gpt4 book ai didi

c++ - 可移动类型的类型特征?

转载 作者:IT老高 更新时间:2023-10-28 22:33:24 26 4
gpt4 key购买 nike

我正在尝试编写一个模板,如果 T 具有移动构造函数,则该模板以一种方式运行,如果 T 没有,则以另一种方式运行。我试图寻找一种可以识别这一点的类型特征,但没有这样的运气,我为此编写自己的类型特征的尝试失败了。

任何帮助表示赞赏。

最佳答案

我觉得有必要指出一个微妙的区别。

<type_traits>确实提供std::is_move_constructiblestd::is_move_assignable ,这些并不能准确地检测一个类型是否具有移动构造函数(分别是移动赋值运算符)。例如,std::is_move_constructible<int>::valuetrue ,并考虑以下情况:

struct copy_only {
copy_only(copy_only const&) {} // note: not defaulted on first declaration
};
static_assert( std::is_move_constructible<copy_only>::value
, "This won't trip" );

请注意,用户声明的复制构造函数抑制了移动构造函数的隐式声明:甚至没有隐藏的、编译器生成的copy_only(copy_only&&) .

类型特征的目的是促进泛型编程,因此用表达式来指定(因为缺少概念)。 std::is_move_constructible<T>::value正在问这个问题:例如T t = T{};有效的?它不是询问(假设 T 是这里的类类型)是否存在 T(T&&) (或任何其他有效形式)移动构造函数声明。

我不知道你想做什么,我没有理由不相信 std::is_move_constructible但是不适合您的目的。

关于c++ - 可移动类型的类型特征?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7054952/

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