Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Почему иногда не срабатывает  оператор += с AnsiSt


Автор: Vyacheslav 29.5.2002, 14:33
Оператор += не срабатывает , если он применен не просто к переменной, а свойству (property) класса.

Код

AnsiString Temp = Label1->Caption;

//это не сработает
Label1->Caption += “!!!!!!”;

//а это отработает нормально
Temp += “!!!!!!”;
Label1->Caption = Temp;


Когда Вы используете оператор += для свойства Caption, компилятор генерит код, который создает новую временную переменную AnsiString. Затем компилятор вызывает функцию GetText  для того, что бы скопировать содержимое во временную переменную. Следующим шагом создается новая временная переменная AnsiString, которая инициализируется строкой “!!!!!!”. В заключение  компилятор вызывает оператор += и соединяет две строки. Результат сохраняется в первой переменной. Проблема в том, что компилятор не генерит код, который бы записал полученный результат обратно в Caption

Автор ответа: команда http://www.bcdev.com/articles/suggest.htm

Вольный пересказ :) :Вячеслав Ермолаев.
PS переcказчика. Оператор += и прочие не работают со свойствами  тогда, когда в качестве атрибута read свойства  указана функция.
Код

//здесь оператор += не сработает
property AnsiString NoWorking = {read = GetNotWorking, write = SetNotWorking }
//здесь оператор += сработает
property AnsiString Working = {read = FWorking, write = SetWorking }


Но во избежание неприятностей, по моему, лучше не использовать такие операции применительно к свойствам.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)