|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
25.11.2010, 12:10 | #1 |
Пользователь
Регистрация: 20.11.2010
Сообщений: 16
|
Является ли "operator+" lvalue?
Уважаемые форумчане! В процессе активного экспериментирования в среде Borland C++ Builder (6.0) заступорился на следующей вещи.
Есть библиотечный класс AnsiString, у него есть метод "operator+", его прототип таков: Код:
Есть фрагмент кода: Код:
Ошибка "Lvalue required" не выскакивает, программа компилится! Словно прототип выглядит так: Код:
Можно было бы мне, конечно, отследить ход работы процессора, но я не являюсь большим спецом по ассемблеру Последний раз редактировалось AJlekceu; 25.11.2010 в 12:34. |
25.11.2010, 12:20 | #2 |
Старожил
Регистрация: 31.05.2010
Сообщений: 13,543
|
Совершенно верно. Никакой ошибки не будет так-как operanor+, это перегруженный оператор. В данном случае он выполняет функцию не сложения (т.е. буквы строк не складываются между собой, как бы в столбик), а канкотенации, т.е. слияния строк. Если в функцию добавить знак амперсанда, то будет происходить сложение в столбик. причём сложение будет не арифметическим, а логическим.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder |
25.11.2010, 12:32 | #3 |
Пользователь
Регистрация: 20.11.2010
Сообщений: 16
|
Ясно, что конкатенации =) Я не перегружал оператор+, и поэтому, как я думал, должен происходить вызов библиотечного метода
Код:
Код:
И, как ни странно, никакой ошибки с++ не выдаёт. |
25.11.2010, 12:51 | #4 | |
Старожил
Регистрация: 31.05.2010
Сообщений: 13,543
|
Цитата:
Когда вы обращаетесь к библиотеке, производя операцию A + B (AnsiString), автоматически вызывается operator+ и всё происходит само собой.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder |
|
25.11.2010, 13:14 | #5 |
Старожил
Регистрация: 21.03.2009
Сообщений: 2,193
|
А что такого в том, что объект возвращается не по ссылке?
Код:
Попробуйте, например, на событие кнопки кинуть такой код: Код:
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта Тема на форуме, посвященная ему же |
25.11.2010, 13:31 | #6 |
Пользователь
Регистрация: 20.11.2010
Сообщений: 16
|
Гром, в этом и дело! =) Значит, это что-то временное. Но почему тогда я сам, когда напишу
Код:
Последний раз редактировалось AJlekceu; 25.11.2010 в 13:34. |
25.11.2010, 13:33 | #7 |
Пользователь
Регистрация: 20.11.2010
Сообщений: 16
|
Упс, прошу прощения, никакой ошибки нет)
|
25.11.2010, 13:59 | #8 | ||||
Great Code Monkey
Форумчанин
Регистрация: 09.08.2007
Сообщений: 533
|
Цитата:
Цитата:
Цитата:
Автор, в С++ lvalue это не просто "та штука, которая может стоять слева от оператора присваивания". Советую все-таки поглядывать в стандарт - там ясно написано, что для rvalue-классов можно вызывать функции-члены, поэтому некоторые rvalue вполне могут находиться слева от =. Цитата:
|
||||
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Помогите что обозначает "диск D:/ не является приложением win32." | Ospa | Windows | 19 | 05.06.2011 21:02 |
ошибкa "missing operator or semicolon" | Дим@@ | Помощь студентам | 3 | 11.11.2010 15:14 |
Qt, как использовать "operator==" | lecume | Помощь студентам | 0 | 05.10.2010 18:00 |
ошибка expected init-declarator before "operator" | Tev | Общие вопросы C/C++ | 2 | 13.11.2008 22:31 |
Является ли Assembler для вас "лесом дремучим"? | Delpher | Свободное общение | 9 | 14.12.2007 11:32 |