编译器错误 C3446

“class”:不允许对值类成员使用默认成员初始化表达式

在 Visual Studio 2015 及更早版本中,编译器允许(但会忽略)值类成员的默认成员初始值设定项。 值类的默认初始化始终对成员执行零初始化;不允许使用默认构造函数。 在 Visual Studio 2017 中,默认成员初始值设定项引发编译器错误,如下例所示:

示例

以下示例在 Visual Studio 2017 及更高版本中生成 C3446:

// C3446.cpp
value struct V
{
       int i = 0; // error C3446: 'V::i': a default member initializer
                  // is not allowed for a member of a value class
       int j {0}; // C3446
};

若要纠正此错误,请删除初始化表达式:

// C3446b.cpp
value struct V
{
       int i;
       int j;
};