Condividi tramite


Avviso del compilatore (livello 1) C4350

modifica del comportamento: viene chiamato 'membro1' anziché 'membro2'

Un rvalue non può essere associato a un riferimento non const. Nelle versioni di Visual C++ precedenti a Visual Studio 2003, è stato possibile associare un rvalue a un riferimento non const in un'inizializzazione diretta. Questo codice restituisce ora un avviso.

Per garantire la compatibilità con le versioni precedenti, è comunque possibile associare rvalue a riferimenti non const, ma le conversioni standard sono preferibili laddove possibile.

Questo avviso rappresenta una modifica del comportamento dal compilatore .NET 2002 di Visual C++. Se abilitata, è possibile che venga fornito questo avviso per il codice corretto. Ad esempio, può essere specificato quando si usa il modello di classe std::auto_ptr .

Se viene visualizzato questo avviso, esaminare il codice per verificare se dipende dall'associazione di rvalue ai riferimenti non const. L'aggiunta di un oggetto const al riferimento o la fornitura di un overload const-reference aggiuntivo può risolvere il problema.

Per impostazione predefinita, questo avviso non è attivo. Per altre informazioni, vedere Compiler Warnings That Are Off by Default.

L'esempio seguente genera l'errore C4350:

// C4350.cpp
// compile with: /W1
#pragma warning (default : 4350)
class A {};

class B
{
public:
   B(B&){}
   // try the following instead:
   // B(const B&){}

   B(A){}
   operator A(){ return A();}
};

B source() { return A(); }

int main()
{
   B ap(source());   // C4350
}