powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Корректно возвращать указатель на локальный объект функции?
19 сообщений из 19, страница 1 из 1
Корректно возвращать указатель на локальный объект функции?
    #39536266
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Написал такую полезную функцию:

Код: plaintext
1.
2.
3.
4.
std::string ConvertQStringToString(const QString Source)
{
    return Source.toUtf8().constData();  
}



Меня беспокоит, что constData() возвращает указатель, на ЛОКАЛЬНЫЙ массив, созданный функцией toUtf8(). Ведь он удалится при выходе из функции и не факт, что этот код всегда будет работать верно. Правильно мыслю?
Если так писать неверно, то передавать строку приемник в качестве второго параметра?
...
Рейтинг: 0 / 0
Корректно возвращать указатель на локальный объект функции?
    #39536272
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQL Правильно мыслю?

Неправильно. Возврат идёт по значению, а не указателю или ссылке. Данные будут скопированы
в свежевыделенную память.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Корректно возвращать указатель на локальный объект функции?
    #39536273
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо!
...
Рейтинг: 0 / 0
Корректно возвращать указатель на локальный объект функции?
    #39536297
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще-то в QString есть встроенная функция преоьразования
В std::string ...

AlekseySQLНаписал такую полезную функцию:

Код: plaintext
1.
2.
3.
4.
std::string ConvertQStringToString(const QString Source)
{
    return Source.toUtf8().constData();  
}



Меня беспокоит, что constData() возвращает указатель, на ЛОКАЛЬНЫЙ массив, созданный функцией toUtf8(). Ведь он удалится при выходе из функции и не факт, что этот код всегда будет работать верно. Правильно мыслю?

?

Неправильно.
Массив то локальный, но и из него должна ДО выхода из функции
Сформироваться выходная строка string, и платно вернуться из функции.
Поэтому в этом коде все ок в этом смысле.

А вот как ты собираешься хранить utf8 в std:: string, не понятно.
Оно конечно можно, но ...
[src c++]

Если так писать неверно, то передавать строку приемник в качестве второго параметра?[/quot]

Это как раз был бы вверх идиотизма
...
Рейтинг: 0 / 0
Корректно возвращать указатель на локальный объект функции?
    #39536300
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQLНаписал такую полезную функцию:

Код: plaintext
1.
2.
3.
4.
std::string ConvertQStringToString(const QString Source)
{
    return Source.toUtf8().constData();  
}


Это полностью валидный код - возвращаемое значение создается до удаления всех временных переменных.
Это не оптимальный код правда, но это смотря насколько часто такая функция вызывается.
AlekseySQLпередавать строку приемник в качестве второго параметра?
Не надо.
Возврат std::string в большинстве случаев оптимизируется так что становится равным по эффективности передаче ссылки на результат в аргументах. А в C++11 и выше оптимизация происходит всегда.
...
Рейтинг: 0 / 0
Корректно возвращать указатель на локальный объект функции?
    #39536815
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZiv , Anatoly Moskovsky - спасибо!
...
Рейтинг: 0 / 0
Корректно возвращать указатель на локальный объект функции?
    #39543624
MasterZivА вот как ты собираешься хранить utf8 в std:: string, не понятно.А в чём проблема?

MasterZivЭто как раз был бы вверх идиотизмаstd::getline смотрит с недоумением.
...
Рейтинг: 0 / 0
Корректно возвращать указатель на локальный объект функции?
    #39543625
Anatoly MoskovskyА в C++11 и выше оптимизация происходит всегда.Может в C++17?
...
Рейтинг: 0 / 0
Корректно возвращать указатель на локальный объект функции?
    #39543666
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyВозврат std::string в большинстве случаев оптимизируется так что становится равным по эффективности передаче ссылки на результат в аргументах. А в C++11 и выше оптимизация происходит всегда.
Всегда? Можно ссылку на параграф стандарта С++ и где было описано "всегда". И как "всегда", кстати?

Я хотел бы получить ответ, Анатолий. Если Вас не затруднит, я не ёрничаю.
...
Рейтинг: 0 / 0
Корректно возвращать указатель на локальный объект функции?
    #39543759
Dimitry SibiryakovВозврат идёт по значению, а не указателюПопридираюсь: возврата по указателю не существует, есть возврат по значению для значения указателя. Так что есть только возвраты/передачи по значению и ссылке
...
Рейтинг: 0 / 0
Корректно возвращать указатель на локальный объект функции?
    #39543790
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПриплюснутыйТак что есть только возвраты/передачи по значению и ссылке

Да, но ссылка это и есть указатель.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Корректно возвращать указатель на локальный объект функции?
    #39543793
Dimitry SibiryakovПриплюснутыйТак что есть только возвраты/передачи по значению и ссылке

Да, но ссылка это и есть указатель.
Цитатку из стандарта, плес.
...
Рейтинг: 0 / 0
Корректно возвращать указатель на локальный объект функции?
    #39543808
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПриплюснутыйЦитатку из стандарта

Без цитатки сложно опознать синтаксический сахар?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Корректно возвращать указатель на локальный объект функции?
    #39543812
Dimitry SibiryakovБез цитатки сложно опознать синтаксический сахар?..Думаю, ты не знаешь определения термина "синтаксический сахар".
Ссылки это не просто сахар, они обладают своей семантикой в языке, которую никак не выразишь через указатели. Взять ту же пресловутую способность продлевать время жизни временных объектов. Никакими синтаксическими заменами это не выразишь через указатели.

Синтаксический сахар — это, например, range-based for loop, который тупо синтаксически можно переписать через обычный for loop.
...
Рейтинг: 0 / 0
Корректно возвращать указатель на локальный объект функции?
    #39544813
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПриплюснутыйMasterZivА вот как ты собираешься хранить utf8 в std:: string, не понятно.А в чём проблема?

MasterZivЭто как раз был бы вверх идиотизмаstd::getline смотрит с недоумением.

так это ж STL, им же надо было показать всем, как не нужно писать программы, а то ж никто и не знал до этого....
...
Рейтинг: 0 / 0
Корректно возвращать указатель на локальный объект функции?
    #39544814
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovПриплюснутыйТак что есть только возвраты/передачи по значению и ссылке

Да, но ссылка это и есть указатель.


нет, ссылка и указатель р разные типы.
...
Рейтинг: 0 / 0
Корректно возвращать указатель на локальный объект функции?
    #39544817
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivссылка и указатель р разные типы.

Типы разные, ассемблерный код один. Ссылка просто не даёт передать инвалидное значение
типа nullptr.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Корректно возвращать указатель на локальный объект функции?
    #39544820
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovMasterZivссылка и указатель р разные типы.

Типы разные, ассемблерный код один. Ссылка просто не даёт передать инвалидное значение
типа nullptr.

1. Если аргумент константная ссылка - туда можно передавать временные объекты (в том числе и созданные конструкторами преобразования).
2. Удержание ссылки.

Для указателей такого нет. Может я что-то еще забыл.
...
Рейтинг: 0 / 0
Корректно возвращать указатель на локальный объект функции?
    #39544823
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я тут перечислил что-то важное. А так конечно различий больше, в том числе нельзя для ссылки изменить объект на который она ссылается - аля константный указатель.
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Корректно возвращать указатель на локальный объект функции?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]