Константы в аргументах функций |
Здравствуйте, гость ( Вход | Регистрация )
Константы в аргументах функций |
RazrFalcon |
28.9.2011, 12:38
Сообщение
#1
|
Zombie Mod Группа: Участник Сообщений: 1654 Регистрация: 24.5.2010 Из: Харьков Пользователь №: 1752 Спасибо сказали: 64 раз(а) Репутация: 212 |
Пример:
1) Я так понимаю, что в первом случае я не смогу изменить переменную text в самой функции, да? 2) Какой вариант предпочтительней? |
|
|
kuzulis |
28.9.2011, 13:06
Сообщение
#2
|
Активный участник Группа: Участник Сообщений: 393 Регистрация: 29.6.2009 Пользователь №: 862 Спасибо сказали: 36 раз(а) Репутация: 7 |
>>1) Я так понимаю, что в первом случае я не смогу изменить переменную text в самой функции, да?
Проверь >>2) Какой вариант предпочтительней? Смотря для чего. |
|
|
hoRUS |
28.9.2011, 14:35
Сообщение
#3
|
Студент Группа: Участник Сообщений: 30 Регистрация: 10.7.2008 Из: Москва Пользователь №: 231 Спасибо сказали: 5 раз(а) Репутация: 0 |
1) а) Передача ссылки на строку, копирования самой строки не производится, но изменить не сможешь, т.к. ссылка константная.
б) Тут бы следовало ждать передачу по значению, т.е. копирование строки, но в Qt есть для QString (и некот. др. классов) механизм "неявного совместного использования" (http://doc.qt.nokia.com/4.7-snapshot/implicit-sharing.html) - передается ссылка на строку, но если где-то в функции setName() как-то изменить строку, то создастся независимая копия строки, которая будет локальной по отношению к setName(), т.е. все изменения, сделанные над строкой text в setName(), так в setName() и останутся. Этот механизм придуман для возможного увеличения производительности при сохранении семантики копирования по значению - если исходная строка никак не изменяется в функции, то и нефиг ее реально копировать, т.е. передавать по значению - достаточно передать ссылку, результат будет тот же. Если же строка изменяется внутри функции, то (как и требует семантика копирования по значению) - создаем копию данных... Детали реализации этого механизма могут быть другими, но идея такая. Т.о. оба подхода фактически эквивалентны для QString, если внутри setName() строка не изменяется (хотя, конечно, это все еще зависит и от деталей реализации механизма) |
|
|
Текстовая версия | Сейчас: 22.11.2024, 20:18 |