大佬教程收集整理的这篇文章主要介绍了c – __has_trivial_copy在clang和gcc中的行为有所不同.谁是对的?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
struct A { A(A const&) =delete; };
__has_trivial_copy(A)在clang中返回1,在gcc中返回0.
我正在挖掘标准,并且找不到一个条款,说明当删除复制构造函数时,该类是否仍然被认为是可复制的.
谁是对的?
我倾向于相信gcc是正确的,因为结构A根本不可复制,更不用说可以复制了.此外,还有一个广泛的共识,即删除的拷贝构造函数可以被视为私有声明但未定义的构造函数,在这种情况下gcc仍然是正确的.
另一方面,第9/6节中的标准描述了没有任何非平凡操作的简单可复制性.我想如果你按标准阅读标准,铿锵可能是正确的.
删除的声明显然是用户提供的.当我在这里说“清楚”时,我的意思是我不能立即通过宣布删除函数的标准来支持它计为用户提供的…
进一步的调查显示,8.4.2 [dcl.fct.def.default]第4段(感谢jesse Good提供参考)使得非用户提供的删除功能:
因此,如果没有其他理由可以进行非平凡的可复制,那么具有已删除的复制构造函数的类确实可以轻易地复制(但这些都不适用于问题中的类型A.这有点奇怪:类型类型无法使用它的复制构造函数,但它可以使用std :: memcpy()复制!我不确定这是否真的是故意的.
以上是大佬教程为你收集整理的c – __has_trivial_copy在clang和gcc中的行为有所不同.谁是对的?全部内容,希望文章能够帮你解决c – __has_trivial_copy在clang和gcc中的行为有所不同.谁是对的?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。