Probablement ce n'est pas une question difficile, mais je suis toujours un peu confus sur la façon de traiter le type String comme un argument dans Visual C++. Je donne les résultats suivants aux fonctions:Passer un argument par référence dans C++/CLI de sorte que la réaffectation affecte l'appelant
void function_1(String ^str_1)
{
str_1 = gcnew String("Test");
}
void function_2()
{
String ^str_2 = nullptr;
function_1(str_2);
}
Après avoir appelé function_1
, str_2
est toujours égal à null
, mais ce que je veux atteindre est que str_2
est égal à Test
. Alors, comment puis-je atteindre que le contenu de str_1
est passé à function_2
?
Merci pour tout conseil.
Merci! J'ai appris quelque chose aujourd'hui! – stefangachter
@Agnel Je ne comprends pas pourquoi vous avez dit que lorsque vous passez un pointeur, seules les copies locales de la référence sont modifiées. Tout d'abord un pointeur n'est pas une référence. Deuxièmement, si vous passez un pointeur en C++ et modifiez les données vers lesquelles vous pointez, vous ne modifiez pas une copie locale des données. Ai-je été mêlé à la sémantique ou quoi? – Ian
@Ian, Ce que je voulais dire, c'est que si vous passez un pointeur et changez la valeur de la variable pointeur elle-même (par opposition à la valeur des données vers laquelle elle pointe), seule la valeur de la variable pointeur local changera. Et oui, si vous modifiez les données pointées vers un pointeur, les données elles-mêmes sont modifiées et non la copie locale. Aucune copie locale des données n'existe; une copie locale du pointeur existe. –