Форум программистов, компьютерный форум CyberForum.ru

Еще одно размышление о string из STL - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Как UUIDGEN.EXE генерит GUID http://www.cyberforum.ru/cpp-beginners/thread461893.html
Мне говорили, что она инфу с конкретной машины стягивает, а какую?
C++ Вставка нового элемента в ListCtrl Проблема с вставкой нового элемента в ListCtrl LVITEM newItem; newItem.mask=LVIF_TEXT|LVIF_STATE; newItem.iItem=0; newItem.iSubItem=1; newItem.state=0; newItem.stateMask=0; newItem.pszText='sdvsvd'; newItem.cchTextMax=0; http://www.cyberforum.ru/cpp-beginners/thread461883.html
Портабельная библиотека для C++ C++
Поделитесь опытом использования портабельных С++ библиотек (linux, sun, win32) ? Необходимо чтобы были : потоки, процессы, события, мютексы, семафоры
C++ Подскажите функцию для получения HWND текущего окна, или по названию окна (для экспорта в VFP6)
пусто
C++ Нужна помощь по переделке интерфейса программного продукта SGI MineSet (за вознагрождение) http://www.cyberforum.ru/cpp-beginners/thread461797.html
Нужна помощь по переделке интерфейса программного продукта SGI MineSet: возможность встраивания окон визуализации в произвольный интерфейс; переделка самого интерфейса программы - поменять размеры некоторых панелей, изменение расположения кнопок; подправить некоторые баги, появляющиеся при использовании русских шрифтов Пакет написан на C++ и Java. Есть SDK, но довольно мало документации. ...
C++ Как лучше реализовать прозрачность окна? надо реализовать сабж, пожозреваю что надо для этого окна установить флаг прозрачности окна. Но деталей найти несмог. Подскажите. подробнее

Показать сообщение отдельно
Igor Soukhov
0 / 0 / 0
Регистрация: 06.01.2008
Сообщений: 62
06.01.2008, 16:52
Понятно ... на зачем пихать во временную переменную ? (вызов конструктора копирования - все же накладно) - а у тебя он вызывается 2 раза ... вернее 1 раз кострукторо копирования - второй раз о
C++
1
2
3
4
5
6
string GetMyFavouriteString() 
{
string tmp_string;//тут вызывается default ctor
tmp_string = 'My favourite phrase';//тут операция присваивания ...
return tmp_string;//тут copy ctor ...
}
вот более оптимальный вариант:
C++
1
2
3
4
5
string & GetMyFavouriteString() 
{
  static string strFavouritePhrase = 'My favourite phrase';
  return strFavouritePhrase;
}
так как обект статический - создается 1 раз (да и то если функция будет вызвана хоть раз)... возвращается по ссылке - значит копирования не происходит ....

А вообзе стринговые литералы есть КОНСТАНТЫ (=> время жизни у них - глобальное)- посему ВПОЛНЕ законен такой код (без оборачивания в STL-ный стринг)
C++
1
2
3
4
5
char * GetMyFavouriteString() 
{
  char *szFavouritePhrase = 'My favourite phrase';
  return strFavouritePhrase;
}
или
C++
1
2
3
4
char * GetMyFavouriteString() 
{
  return 'My favourite phrase';
}
Igor Soukhov,
Member of Russian Software Developer Network - rsdn.ru
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru