Opérateur d'assignation C++ en tant qu'opérateur implicite Delphi

De RAD Studio
Aller à : navigation, rechercher

Remonter à Gestion des types de données et des concepts du langage Delphi


Cette section décrit la syntaxe C++Builder pour l'utilisation de l'opérateur d'assignation C++ en tant qu'opérateur implicite Delphi.

En Delphi, l'opérateur implicite est utilisé à la fois pour l'assignation et la construction. En C++ pour C++Builder, il est possible d'utiliser operator= uniquement pour l'assignation du type de résultat (et non pas pour la construction du type de résultat).

Cette syntaxe autorise l'utilisation de operator= pour l'assignation C++, exactement comme l'opérateur implicite utilisé en Delphi.

Ceci est particulièrement vrai, par exemple, lors de l'utilisation de TValue en C++ : plusieurs opérateurs implicites en Delphi permettent aux utilisateurs d'assigner plusieurs types de façon transparente.

Delphi :
procedure doSomething();
var
  a : TValue;
begin
  a := 'assigning a string';
  a := 123;
  a := 3.14;
end;

Sans l'opérateur d'assignation, l'équivalent C++ du code Delphi ci-dessus est le suivant.

C++ :
void doSomethingCppOld()
{
  TValue a;
  a = TValue::_op_Implicit(UnicodeString(L"assigning a string"));
  a = TValue::_op_Implicit(123);
  a = TValue::_op_Implicit(3.14L);
}

Avec l'opérateur d'assignation, il est possible d'écrire l'équivalent C++ suivant.

C++ :
void doSomethingCpp()
{
  TValue a;
  a = UnicodeString(L"assigning a string");
  a = 123;
  a = 3.14L;
}
Remarque : Que vous utilisiez la première version ou la seconde version C++, il est important d'appeler le constructeur UnicodeString lors de l'assignation d'une chaîne littérale, puisque son type est const wchar_t * (ou const char * en l'absence de préfixe L spécifié explicitement). Autrement, le pointeur serait évalué en tant qu'expression booléenne, car il s'agit du cas le plus pertinent résultant probablement d'un appel d'opérateur implicite inattendu.

Voir aussi