/Zc:externConstexpr(启用 extern constexpr 变量)

/Zc:externConstexpr 编译器选项告诉编译器符合 C++ 标准并允许 constexpr 变量的外部链接。 默认情况下,Visual Studio 始终为 constexpr 变量提供内部链接,即使你指定了 extern 关键字。

语法

/Zc:externConstexpr[-]

备注

/Zc:externConstexpr 编译器选项使编译器将外部链接应用于使用 extern constexpr 声明的变量。

在 Visual Studio 的早期版本中,默认情况下或如果指定了 /Zc:externConstexpr-,则 Visual Studio 会将内部链接应用于 constexpr 变量(即使使用了 extern 关键字)。 /Zc:externConstexpr 选项从 Visual Studio 2017 Update 15.6 开始可用。 默认关闭此选项。

从 Visual Studio 2022 更新 17.6 起,此选项 /permissive- 将同时启用 /Zc:externConstexpr/Zc:lambda。 在以前的版本中,/permissive- 未启用两者中的任何一个。

如果头文件包含声明为 extern constexpr 的变量,则必须将其标记为 __declspec(selectany),以便将重复的声明合并到链接二进制文件中的单个实例中。 否则,你可能会看到链接器错误,例如 LNK2005,因为违反了单一定义规则。

在 Visual Studio 中设置此编译器选项

  1. 打开项目的“属性页” 对话框。 有关详细信息,请参阅在 Visual Studio 中设置 C++ 编译器和生成属性

  2. 选择“配置属性”>“C/C++”>“命令行”属性页

  3. /Zc:externConstexpr/Zc:externConstexpr- 添加到“附加选项:”窗格中。

另请参阅

auto 关键字
permissive
/Zc(一致性)