/Zc:hiddenFriend 选项启用 /permissive- 选项行为的子集。 它告知编译器遵守隐藏友元的标准。 编译器仅包括 依赖参数的查找 (ADL) 中的隐藏友元,用于显式实例或封闭类类型的模板参数。 此限制允许你使用隐藏友元来防止对类型执行的操作应用于隐式转换。 此选项可以提高代码生成速度,但此代码无法使用 /permissive-

隐藏友元 是在类或类模板定义中声明的 friend 函数或函数模板。 默认情况下,Microsoft C++ 编译器不会删除可随处作为重载解析候选项的隐藏友元声明。 此旧行为可以通过在更多上下文中包括隐藏友元函数来降低编译器速度。

/permissive- 默认情况下,标准 C++ 隐藏友元行为处于启用状态。 若要在已指定 /permissive- 选项时指定旧隐藏友元行为,请使用 /Zc:hiddenFriend- 。 使用 C++20 模块需要标准隐藏友元行为。

从 Visual Studio 2019 版本 16.4 开始, /Zc:hiddenFriend 选项可用。

有关指定 /Zc:hiddenFriend 时编译器行为的示例,请参阅 隐藏友元名称查找规则

在 Visual Studio 开发环境中设置此编译器选项

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

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

  • 修改“附加选项”属性以包含 /Zc:hiddenFriend /Zc:hiddenFriend- ,然后选择“确定”。

    /Zc (一致性)
    /permissive-

  •