Compartilhar via


/Zc:referenceBinding (Impor regras de associação de referência)

Quando a opção /Zc:referenceBinding é especificada, o compilador não permite que uma referência lvalue não constante seja associada a um temporário.

Sintaxe

/Zc:referenceBinding[-]

Comentários

Se /Zc:referenceBinding for especificado, o compilador seguirá a seção 8.5.3 do padrão C++11: ele não permitirá expressões que associam um tipo definido pelo usuário temporário a uma referência lvalue não constante. Por padrão, ou se /Zc:referenceBinding- for especificado, o compilador permitirá expressões como uma extensão da Microsoft, mas um aviso de nível 4 será emitido. Para segurança de código, portabilidade e conformidade, recomendamos que você use /Zc:referenceBinding.

A opção /Zc:referenceBinding está desativada por padrão. A opção do compilador /permissive- define implicitamente essa opção, mas ela pode ser substituída usando /Zc:referenceBinding-.

Exemplo

Este exemplo mostra a extensão da Microsoft que permite que um temporário de um tipo definido pelo usuário seja associado a uma referência lvalue não constante.

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

Para obter mais informações sobre problemas de conformidade no Visual C++, confira Comportamento fora do padrão.

Para definir esta opção do compilador no ambiente de desenvolvimento do Visual Studio

  1. Abra a caixa de diálogo Páginas de Propriedades do projeto. Para obter detalhes, confira Definir as propriedades de build e do compilador do C++ no Visual Studio.

  2. Selecione a página de propriedades Propriedades de Configuração>C/C++>Linha de Comando.

  3. Modifique a propriedade Opções Adicionais para incluir /Zc:referenceBinding e escolha OK.

Confira também

Opções do compilador MSVC
Sintaxe da linha de comando do compilador MSVC
/Zc (conformidade)