/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 开发环境中设置此编译器选项
打开项目的“属性页” 对话框。 有关详细信息,请参阅在 Visual Studio 中设置 C++ 编译器和生成属性。
选择“配置属性”>“C/C++”>“命令行”属性页。
修改“附加选项”属性以包含 /Zc:inline,然后选择“确定”。