/Zc:referenceBinding (Verweisbindungsregeln erzwingen)

Wenn die Option "/Zc:referenceBinding " angegeben ist, lässt der Compiler keinen Nichtkonst-Lvalue-Verweis für die Bindung an einen temporären Wert zu.

Syntax

/Zc:referenceBinding[-]

Hinweise

Wenn /Zc:referenceBinding angegeben ist, folgt der Compiler Abschnitt 8.5.3 des C++11-Standards: Es werden keine Ausdrücke zugelassen, die einen benutzerdefinierten Typ vorübergehend an einen nicht-const lvalue-Verweis binden. Standardmäßig oder wenn /Zc:referenceBinding- angegeben ist, lässt der Compiler solche Ausdrücke wie eine Microsoft-Erweiterung zu, aber eine Warnung der Ebene 4 wird ausgegeben. Für Codesicherheit, Portabilität und Konformität empfehlen wir die Verwendung von /Zc:referenceBinding.

Die Option "/Zc:referenceBinding " ist standardmäßig deaktiviert. Die Option "/permissive-compiler " legt diese Option implizit fest, kann jedoch mithilfe von /Zc:referenceBinding-überschrieben werden.

Beispiel

In diesem Beispiel wird die Microsoft-Erweiterung gezeigt, mit der ein temporärer benutzerdefinierter Typ an einen Nichtkonst-Lvalue-Verweis gebunden werden kann.

// 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
}

Weitere Informationen über Konformitätsprobleme in Visual C++ finden Sie unter Nonstandard Behavior.

So legen Sie diese Compileroption in der Visual Studio-Entwicklungsumgebung fest

  1. Öffnen Sie das Dialogfeld Eigenschaftenseiten des Projekts. Weitere Informationen erhalten Sie unter Set C++ compiler and build properties in Visual Studio (Festlegen der Compiler- und Buildeigenschaften (C++) in Visual Studio).

  2. Klicken Sie auf der Eigenschaftenseite auf Konfigurationseigenschaften>C/C++>Befehlszeile.

  3. Ändern Sie die Eigenschaft "Zusätzliche Optionen", um "/Zc:referenceBinding" einzuschließen, und wählen Sie dann "OK" aus.

Siehe auch

MSVC-Compileroptionen
Syntax für die MSVC-Compilerbefehlszeile
/Zc (Übereinstimmung)