AnsiString и оператор + = - PullRequest
       10

AnsiString и оператор + =

0 голосов
/ 07 марта 2019

этот очень маленький фрагмент кода сильно смущает меня, хотя я только пытаюсь объединить строки.

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    AnsiString HelloWorld = "Hello ";
    HelloWorld += "World";

    TStringList *sl1 = new TStringList();
    sl1->Add("Hello");
    sl1->Strings[0] += " World";

    TStringList *sl2 = new TStringList();
    sl2->Add("Hello");
    sl2->Strings[0] = sl2->Strings[0] + " World";

    Memo1->Lines->Add( HelloWorld );         // prints "Hello World"
    Memo1->Lines->Add( sl1->Strings[0] );    // prints "Hello"  =====> WHY?
    Memo1->Lines->Add( sl2->Strings[0] );    // prints "Hello World"
}

Оператор + = не работает с элементами TStringList?

Как правильно это сделать?

1 Ответ

2 голосов
/ 07 марта 2019

Потому что, когда вы используете Strings [0], вы фактически получаете доступ к свойству, а не к фактической строке.Таким образом, когда вы используете

sl1->Strings[0] += " World";

, на самом деле происходит вызов метода read для свойства Strings, которое затем приводит к появлению строки.В этой результирующей строке вы объединяете что-то еще.

Это вовсе не меняет внутреннюю строку свойства.

В этом случае, просто для понимания того, как это работает, вы можете подумать, что чтение

sl1->Strings[0]

- это то же самое, что вызов функции, которая возвращает строку (и на самом деле,это так! Потому что когда вы читаете свойство, оно запускается, это метод read).

...