[ Web Proxy ]
URL:
Viewing: https://fr.cppreference.com/cpp/language/reference_initialization [Back]  [Original]

reference initialization cppreference.com
cppreference.com
Espaces de noms
Variantes

reference initialization

De cppreference.com

<metanoindex/>

 
 
Langage C++
Sujets gnraux
Contrle de flux
Instructions conditionnelles
Instructions d'itration
Instructions de saut
Fonctions
dclaration de fonction
expression lambda
fonction gnrique
spcificateur inline
spcification d'exception (obsolte)
spcificateur noexcept (C++11)
Exceptions
Espaces de noms
Types
spcificateur decltype (C++11)
Qualificatifs
qualificatifs const et volatile
qualificatifs de stockage
qualificatif constexpr (C++11)
qualificatif auto (C++11)
qualificatif alignas (C++11)
Initialisation
Littraux
Expressions
oprateurs alternatifs
Utilitaires
Types
dclaration typedef
dclaration d'alias de type (C++11)
attributs (C++11)
Jette
Original:
Casts
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
conversions implicites
conversion const_cast
conversion static_cast
conversion dynamic_cast
conversion reinterpret_cast
conversions style C et style fonction
Allocation de mmoire
Classes
Qualificatifs spcifiques aux membres de classe
Fonctions membres spciales
Modles
classes gnriques
fonctions gnriques
spcialisation de modles
paquets de paramtres (C++11)
Divers
Assembleur
 
Li une rfrence un objet
Original:
Binds a reference to an object
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

Syntaxe

T & ref = object ;

T & ref ( object ) ;

T & ref { object } ;

(1)
T && ref = object ;

T && ref ( object ) ;

T && ref { object } ;

(2) (depuis C++11)
R fn ( T & arg );

or

R fn ( T && arg );

fn ( object )

(3)
T & fn () {

or

T && fn () {

return object ;

(4)

Explication

Une rfrence T peut tre initialis avec un objet de T type, en fonction de T type, ou d'un objet implicitement convertible en T. Une fois initialis, une rfrence ne peut pas tre modifi pour faire rfrence un autre objet .
Original:
A reference to T can be initialized with an object of type T, a function of type T, or an object implicitly convertible to T. Once initialized, a reference cannot be changed to refer to another object.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
Les rfrences sont initialiss dans les situations suivantes:
Original:
References are initialized in the following situations:
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
1)
Quand un nom de rfrence lvalue variable est dclare avec un initialiseur
Original:
When a named lvalue reference variable is declared with an initializer
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
2)
Quand une variable de rfrence rvalue nomme est dclare avec un initialiseur
Original:
When a named rvalue reference variable is declared with an initializer
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
3)
Dans une expression d'appel de fonction, lorsque le paramtre de fonction est du type de rfrence
Original:
In a function call expression, when the function parameter has reference type
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
4)
Dans la dclaration return, lorsque la fonction retourne un type rfrence
Original:
In the return statement, when the function returns a reference type
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
Les effets de l'initialisation de rfrence sont les suivants:
Original:
The effects of reference initialization are:
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
  • Si la rfrence est une rfrence lvalue:
    Original:
    If the reference is an lvalue reference:
    The text has been machine-translated via Google Translate.
    You can help to correct and verify the translation. Click here for instructions.
  • Si object est une expression lvalue, et son type est T ou une base de T, et est galement cv ou moins qualifis, alors la rfrence est li l'objet identifi par la lvalue ou le sous-objet de classe de base de l'objet .
    Original:
    If object is an lvalue expression, and its type is T or a base of T, and is equally or less cv-qualified, then the reference is bound to the object identified by the lvalue or the base class subobject of the object.
    The text has been machine-translated via Google Translate.
    You can help to correct and verify the translation. Click here for instructions.
  • Si object est une expression lvalue, et son type est implicitement convertible en un type qui est soit T ou une base de T, gale ou moindre cv-qualifi, alors les fonctions de conversion non explicites du type de source et de ses classes de base qui retourne rfrences lvalue sont envisages et la meilleure solution est choisie par la rsolution de surcharge. La rfrence est alors li l'objet identifi par la lvalue retourn par la fonction de conversion (ou son sous-objet de classe de base)
    Original:
    If object is an lvalue expression, and its type is implicitly convertible to a type that is either T or a base of T, equally or less cv-qualified, then the non-explicit conversion functions of the source type and its base classes that return lvalue references are considered and the best one is selected by overload resolution. The reference is then bound to the object identified by the lvalue returned by the conversion function (or its base class subobject)
    The text has been machine-translated via Google Translate.
    You can help to correct and verify the translation. Click here for instructions.
  • Dans le cas contraire, si la rfrence est soit rvalue de rfrence ou une rfrence lvalue const:
    Original:
    Otherwise, if the reference is either rvalue reference or lvalue reference to const:
    The text has been machine-translated via Google Translate.
    You can help to correct and verify the translation. Click here for instructions.
  • Si object est un xValue, un prvalue classe, un tableau prvalue, ou un type de fonction qui est soit lvalue T ou une base de T, gale ou infrieure cv-qualifi, le renvoi est li la valeur de l'expression d'initialisation ou de son sous-objet de base .
    Original:
    If object is an xvalue, a class prvalue, an array prvalue, or a function lvalue type that is either T or a base of T, equally or less cv-qualified, then the reference is bound to the value of the initializer expression or its base subobject.
    The text has been machine-translated via Google Translate.
    You can help to correct and verify the translation. Click here for instructions.
  • Si object est une expression de type classe qui peut tre implicitement converti en un xValue, un prvalue classe ou d'une valeur de fonction de type qui est soit T ou une base de T, gale ou moindre cv-qualifi, alors la rfrence est li la rsultat de la conversion ou de son sous-objet de base .
    Original:
    If object is a class type expression that can be implicitly converted to an xvalue, a class prvalue, or a function value of type that is either T or a base of T, equally or less cv-qualified, then the reference is bound to the result of the conversion or its base subobject.
    The text has been machine-translated via Google Translate.
    You can help to correct and verify the translation. Click here for instructions.
  • Dans le cas contraire, un temporaire du T type est construit et copie-initialis de object. La rfrence est alors li cette temporaire .
    Original:
    Otherwise, a temporary of type T is constructed and copie-initialis from object. The reference is then bound to this temporary.
    The text has been machine-translated via Google Translate.
    You can help to correct and verify the translation. Click here for instructions.

Dure de vie d'un fichier temporaire

Chaque fois qu'une rfrence est li un emploi temporaire ou un sous-objet de base de manire temporaire, la dure de vie de l'application temporaire est prolonge en fonction de la dure de vie de la rfrence, avec les exceptions suivantes:
Original:
Whenever a reference is bound to a temporary or to a base subobject of a temporary, the lifetime of the temporary is extended to match the lifetime of the reference, with the following exceptions:
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
  • un temporaire lie une valeur de retour d'une fonction dans un tat return n'est pas tendu: il est dtruit immdiatement la fin de l'expression de retour. Une telle fonction renvoie toujours une rfrence pendantes .
    Original:
    a temporary bound to a return value of a function in a return statement is not extended: it is destroyed immediately at the end of the return expression. Such function always returns a dangling reference.
    The text has been machine-translated via Google Translate.
    You can help to correct and verify the translation. Click here for instructions.
  • temporaire li un lment de rfrence dans un liste d'initialisation constructeur ne persiste que jusqu' ce que les sorties de constructeur, pas tant que l'objet existe .
    Original:
    a temporary bound to a reference member in a constructor liste d'initialisation persists only until the constructor exits, not as long as the object exists.
    The text has been machine-translated via Google Translate.
    You can help to correct and verify the translation. Click here for instructions.
  • temporaire li un paramtre de rfrence dans un appel de fonction existe jusqu' la fin de la pleine expression contenant cet appel de fonction: si la fonction retourne une rfrence, qui survit la pleine expression, il devient une rfrence pendantes .
    Original:
    a temporary bound to a reference parameter in a function call exists until the end of the full expression containing that function call: if the function returns a reference, which outlives the full expression, it becomes a dangling reference.
    The text has been machine-translated via Google Translate.
    You can help to correct and verify the translation. Click here for instructions.
  • temporaire lie une rfrence dans l'initialiseur utilis dans une nouvelle expression existe jusqu' la fin de la pleine expression contenant cette nouvelle expression, pas tant que l'objet initialis. Si l'objet initialis survit la pleine expression, son lment de rfrence devient une rfrence pendantes .
    Original:
    a temporary bound to a reference in the initializer used in a new-expression exists until the end of the full expression containing that new-expression, not as long as the initialized object. If the initialized object outlives the full expression, its reference member becomes a dangling reference.
    The text has been machine-translated via Google Translate.
    You can help to correct and verify the translation. Click here for instructions.
En gnral, la dure de vie d'un temporaire ne peut pas tre tendue d'"le transmettre: une deuxime rfrence, initialise partir de la rfrence laquelle le temporaire est tenu, n'affecte pas sa dure de vie .
Original:
In general, the lifetime of a temporary cannot be further extended by "passing it on": a second reference, initialized from the reference to which the temporary was bound, does not affect its lifetime.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

Notes

Rfrences apparatre sans que dans la dclaration initialiseurs paramtre de la fonction, dans la dclaration de type de fonction de retour, dans la dclaration d'un membre du groupe, et avec le spcificateur extern .
Original:
References appear without initializers only in function parameter declaration, in function return type declaration, in the declaration of a class member, and with the extern specifier.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

Exemple

#include <utility>
#include <sstream>
struct S {
 int mi;
 const std::pair<int,int>& mp; // reference member
};

void foo(int) {}

struct A {};
struct B : A {
   int n;
   operator int&() { return n; };
};

B bar() {return B(); }

//int& bad_r; // error: no initializer
extern int& ext_r; // OK

int main()
{
 // lvalues
    int n = 1;
    int& r1 = n;  // lvalue reference to the object n
    const int& cr(n); // reference can be more cv-qualified
    volatile int& cv{n}; // any initializer syntax can be used
    int& r2 = r1; // another lvalue reference to the object n
//    int& bad = cr; // error: less cv-qualified
    int& r3 = const_cast<int&>(cr); // const_cast is needed

    void (&rf)(int) = foo; // lvalue reference to function
    int ar[3];
    int (&ra)[3] = ar; // lvalue reference to array

    B b;
    A& base_ref = b; // reference to base subobject
    int& converted_ref = b; // reference to the result of a conversion

// rvalues
//  int& bad = 1; // error: cannot bind lvalue ref to rvalue
    const int& cref = 1; // bound to rvalue
    int&& rref = 1; // bound to rvalue

    const A& cref2 = bar(); // reference to A subobject of B temporary
    A&& rref2 = bar();      // same

    int&& xref = static_cast<int&&>(n); // bind directly to n
//  int&& copy_ref = n; // error: can't bind to an lvalue
    double&& copy_ref = n; // bind to an rvalue temporary with value 1.0

// restrictions on temporary lifetimes
    std::ostream& buf_ref = std::ostringstream() << 'a'; // the ostringstream temporary
                      // was bound to the left operand of operator<<, but its lifetime
                      // ended at the semicolon: buf_ref is now a dangling reference.

    S a { 1, {2,3} }; // temporary pair {2,3} bound to the reference member
                      // a.mp and its lifetime is extended to match a
    S* p = new S{ 1, {2,3} }; // temporary pair {2,3} bound to the reference
                      // member a.mp, but its lifetime ended at the semicolon
                      //  p->mp is a dangling reference
    delete p;
}


Voir aussi


Web Proxy Viewer  |  New URL  |  Original Page