/Zc:externConstexpr
(启用 extern constexpr 变量)
/Zc:externConstexpr
编译器选项告诉编译器符合 C++ 标准并允许 constexpr
变量的外部链接。 默认情况下,Visual Studio 始终为 constexpr
变量提供内部链接,即使你指定了 extern
关键字。
语法
]$
备注
/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 中设置此编译器选项
打开项目的“属性页” 对话框。 有关详细信息,请参阅在 Visual Studio 中设置 C++ 编译器和生成属性。
选择“配置属性”>“C/C++”>“命令行”属性页。
将
/Zc:externConstexpr
或/Zc:externConstexpr-
添加到“附加选项:”窗格中。