大佬教程收集整理的这篇文章主要介绍了c – 组合两个复制和移动的构造函数,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
optional(const T& X) { construct(X); } optional(T&& X) { construct(std::move(X)); }
我可以将它们组合成一个构造函数模板,还是会以某种方式改变语义?
template<typename U> optional(U&& X) { construct(std::forWARD<U>(X)); }
class A {}; int main() { std::cout << std::is_constructible<optional<A>,int>::value << '\n'; };
您的原始代码将打印出来:
0
1
如果这是不合需要的,并且您仍然想要使用新代码,则可以启用它以将u限制为可接受的类型.
我看到的唯一其他可能的问题是T是否可以是引用类型(例如int&).在这种情况下,原始代码的第二个构造函数看起来很可疑,因为它将传入rvalue,并且您可能试图将该rvalue绑定到非const左值引用(无法确定).如果T永远不能成为引用类型,则无需担心这一点.
以上是大佬教程为你收集整理的c – 组合两个复制和移动的构造函数全部内容,希望文章能够帮你解决c – 组合两个复制和移动的构造函数所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。