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

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

direct 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
 
Initialise un objet d'ensemble explicite de arguments du constructeur .
Original:
Initializes an object from explicit set of constructor arguments.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

Syntaxe

T object ( arg );

T object ( arg1, arg2, ... );

(1)
T object { arg };

T object { arg1, arg2, ... };

(2) (depuis C++11)
T ( other )

T ( arg1, arg2, ... );

(3)
static_cast< T >( other ) (4)
new T(args, ...) (5)
Class::Class() : member(args, ...) {... (6)
[arg](){... (7) (depuis C++11)

Explication

L'initialisation directe est effectue dans les cas suivants:
Original:
Direct initialization is performed 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)
initialisation d'une liste entre parenthses d'expressions non vide
Original:
initialization with a nonempty parenthesized list of expressions
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
2)
au cours de la squence liste d'initialisation, si aucun constuctors initialiseur de liste sont prvus et un constructeur correspondant est accessible, et toutes les conversions ncessaires implicites sont non-rtrcissement .
Original:
during liste d'initialisation sequence, if no initializer-list constuctors are provided and a matching constructor is accessible, and all necessary implicit conversions are non-narrowing.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
3)
initialisation d'un prvalue temporaire par fonte fonctionnelle ou avec une liste d'expressions entre parenthses
Original:
initialization of a prvalue temporary by fonte fonctionnelle or with a parenthesized expression list
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
4)
initialisation d'un prvalue temporaire par un expession static_cast
Original:
initialization of a prvalue temporary by a static_cast expession
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
5)
l'initialisation d'un objet avec la dure de stockage dynamique d'un nouveau-expression d'un initialiseur non vide
Original:
initialization of an object with dynamic storage duration by a new-expression with a non-empty initializer
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
6)
l'initialisation d'une base ou d'un lment non-statique en liste d'initialisation constructeur
Original:
initialization of a base or a non-static member by constructor liste d'initialisation
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
7)
initialisation des membres de l'objet de fermeture partir des variables captures par copie dans une lambda-expression
Original:
initialization of closure object members from the variables caught by copy in a lambda-expression
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 directe sont les suivants:
Original:
The effects of direct 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 T est un type de classe, les constructeurs de T sont examins et la meilleure correspondance est slectionn par la rsolution de surcharge. Le constructeur est alors appele pour initialiser l'objet .
    Original:
    If T is a class type, the constructors of T are examined and the best match is selected by overload resolution. The constructor is then called to initialize the object.
    The text has been machine-translated via Google Translate.
    You can help to correct and verify the translation. Click here for instructions.
  • Autrement, si T est un type non-classe, conversions standard sont utiliss, si ncessaire, convertir la valeur de other la version CV-inconditionnel de T .
    Original:
    Otherwise, if T is a non-class type, conversions standard are used, if necessary, to convert the value of other to the cv-unqualified version of T.
    The text has been machine-translated via Google Translate.
    You can help to correct and verify the translation. Click here for instructions.

Notes

Direct-initialisation est plus permissif que la copie d'initialisation: la copie d'initialisation ne tient compte que non explicites constructeurs et des fonctions UDF de conversion, tandis que l'initialisation directe considre tous les constructeurs et les squences de conversion implicites .
Original:
Direct-initialization is more permissive than copy-initialization: copy-initialization only considers non-explicit constructors and user-defined conversion functions, while direct-initialization considers all constructors and implicit conversion sequences.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

Exemple

#include <string>
#include <iostream>
#include <memory>

struct Foo {
    int mem;
    explicit Foo(int n) : mem(n) {}
};

int main()
{
    std::string s1("test"); // constructor from const char*
    std::string s2(10, 'a');

    std::unique_ptr<int> p(new int(1)); // OK: explicit constructors allowed
//  std::unique_ptr<int> p = new int(1); // error: constructor is explicit

    Foo f(2); // f is direct-initialized:
              // constructor parameter n is copy-initialized from the rvalue 2
              // f.mem is direct-initialized from the parameter n
//  Foo f2 = 2; // error: constructor is explicit

    std::cout << s1 << ' ' << s2 << ' ' << *p << ' ' << f.mem  << '\n';
}

Rsultat :

test aaaaaaaaaa 1 2

Voir aussi


Web Proxy Viewer  |  New URL  |  Original Page