/Zc:referenceBinding(强制引用绑定规则)

指定 /Zc:referenceBinding 选项时,编译器不允许非 const 左值引用绑定到临时值。

语法

/Zc:referenceBinding[-]

备注

如果指定 了 /Zc:referenceBinding,编译器将遵循 C++11 标准的第 8.5.3 节:它不允许将用户定义的类型临时绑定到非 const lvalue 引用的表达式。 默认情况下,或指定 /Zc:referenceBinding- 时,编译器允许 Microsoft 扩展等表达式,但发出级别 4 警告。 对于代码安全性、可移植性和一致性,建议使用 /Zc:referenceBinding

默认情况下,/Zc:referenceBinding 选项处于关闭状态。 /permissive- 编译器选项隐式设置此选项,但可以使用 /Zc:referenceBinding- 重写它。

示例

此示例显示了 Microsoft 扩展,该扩展允许将用户定义的类型的临时绑定到非常量左值引用。

// zcreferencebinding.cpp
struct S {
};

void f(S&) {
}

S g() {
    return S{};
}

int main() {
    S& s = g();         // warning C4239 at /W4
    const S& cs = g();  // okay, bound to const ref
    f(g());             // Extension: error C2664 only if /Zc:referenceBinding
}

有关 Visual C++ 中一致性问题的详细信息,请参阅 Nonstandard Behavior

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

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

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

  3. 修改“附加选项”属性以包含 /Zc:inline,然后选择“确定”。

另请参阅

MSVC 编译器选项
MSVC 编译器命令行语法
/Zc(一致性)