这里哪个操作不是微不足道的?

Dr.*_*Gut 6 c++ type-traits

编译器同意,下面的XY是默认可构造的,但不是平凡的(demo)。

#include <type_traits>

struct X { int x {}; };
struct Y { int y = 0; };

static_assert(std::is_default_constructible_v<X>);
static_assert(std::is_default_constructible_v<Y>);
static_assert(!std::is_trivially_default_constructible_v<X>);
static_assert(!std::is_trivially_default_constructible_v<Y>);
Run Code Online (Sandbox Code Playgroud)

为什么它们不是微不足道的?根据 cppreference.com(请参阅 参考资料is_trivially_constructible),在默认构造期间必须调用一个不平凡的操作。那是哪一个?

Sol*_*cko 5

https://en.cppreference.com/w/cpp/language/default_constructor#Trivial_default_constructor说:

如果满足以下所有条件,则类 T 的默认构造函数很简单(即不执行任何操作):

  • ...
  • T 没有带有默认初始值设定项的非静态成员。(自 C++11 起)
  • ...