作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
考虑到 cppreference 和当前的 c++ 工作草案,一个类在以下情况下是可简单复制的:
平凡的非删除析构函数
所以我想出了这个代码示例:
#include <type_traits>
struct non_trivially_copyable {
non_trivially_copyable(non_trivially_copyable const&) = delete;
non_trivially_copyable& operator=(non_trivially_copyable const&) = delete;
non_trivially_copyable(non_trivially_copyable &&) = delete;
non_trivially_copyable& operator=(non_trivially_copyable &&) = delete;
};
int main()
{
return std::is_trivially_copyable<non_trivially_copyable>::value;
}
我的类(class)不满足第 5 条要求。它仍然给我的结果是我的类(class) non_trivially_copyable
是平凡可复制的。我在一些在线编译器上测试了它:
我怀疑所有的实现都是错误的;那么为什么我会得到这个结果呢?
最佳答案
这在 C++17 中有所改变;在此之前,non_trivially_copyable
将是平凡可复制的。根据您自己引用的标准部分,您的类(class)确实无法在 C++17 中轻松复制。
但是,libstdc++ 和 libc++ 似乎尚未更新以反射(reflect)这一点。所以直接回答你的问题:这两个实现确实是错误的。请注意,您的 Godbolt 链接显示 MSVC 确实正确。
由于这被认为是一个缺陷(参见 CWG 1734 ),这也应该针对 C++ 的旧版本的实现进行更改。
据我所知,改变标准的一个核心动机是使 memcpy
-ing 围绕原子和互斥锁成为非法的。
关于c++ - std::is_trivially_copyable 错了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50720054/
我无法在附加行中显示“真”、“假”、"is"和“否”按钮。 我在这里有一个应用程序:Application 请按照以下步骤使用应用程序: 1。当你打开应用程序时,你会看到一个绿色的加号按钮,点击 在此
我是一名优秀的程序员,十分优秀!