ФлеймФорумПрограммирование

Общие вопросы по программированию (1291 стр)

Страницы: 11290 1291 1292 12931303 Следующая »
#19350
0:53, 21 мая 2025

totoro
> Но в дизасме временный объект живет до тех пор, пока ret не наступит из вызываемой ф-ии, не смотря на то что захват по ссылке не осуществлялся.
у тебя нет временного объекта, твой случай про время жизни аргумента. Временный объект о котором я тебя предупреждал это когда ты возвращаешь его из функции. Что-то типа такого:

const int* getPtr() const
{
  int v(value);
  return &v;
}
#19351
0:57, 21 мая 2025

totoro
> Но в дизасме временный объект живет до тех пор, пока ret не наступит из вызываемой ф-ии.
Повторяю: он живёт до точки с запятой по месту создающего выражения. У тебя сначала создаётся один Темп, на котором вызывается гетВальюПтр, после чего отрабатывает наПолучи целиком, и только после этого — когда все вычисления в текущем выражении закончены — тогда начинается фаза очистки временных и Один Темп удаляется. Это самый минимум времени жизни объекта — до конца statement. Некоторые формы инициализации могут сделать удлиннение до конца скоупа. Но даже без удлиннения — все темпы, сконструированные выражениями в этом statement, живут до самого окончания этого statement, даже если это надефайненный по самые яйца 15-километровый statement с 30 уровнями вложенности и 40 операторами запятая.

#19352
0:58, 21 мая 2025

Aroch
> у тебя нет временного объекта, твой случай про время жизни аргумента.
Аргумент и временный объект в моем примере имеют разные типы и разное время жизни. Аргументом является указатель на целочисленный знаковый объект, который, в свою очередь, так же является полем временного объекта.

#19353
(Правка: 3:04) 2:56, 21 мая 2025

totoro
> и разное время жизни
нет и под нет разумеется не имеется ввиду тупо указатель, а данные на которые он указывает.
https://timsong-cpp.github.io/cppwp/class.temporary#4

#19354
15:31, 21 мая 2025

А есть смысл рисковать? Сейчас видна сомнительность ситуации (пусть и допустимо, если верить Ведьмаку), а потом будешь рефакторить - и стрельнет когда не ждали.

#19355
15:42, 21 мая 2025

Dmitry_Milk
> А есть смысл рисковать?
Согласен. Код явно стремный.

#19356
15:59, 21 мая 2025

entryway
> Согласен. Код явно стремный.

Ну на самом деле (a+b).c_str() можно пихать в WinAPI-функции. Это уже не изменится.

#19357
18:24, 23 мая 2025

Накой чорд нам std::byte, когда есть унсигнид чар и std::uint8_t?

#19358
18:37, 23 мая 2025

nes
https://gamedev.ru/flame/forum/?id=248221&page=36&m=5087412#m526

#19359
18:43, 23 мая 2025

nes

std::uint8_t опциональный тип. unsigned char арифметический тип и, в зависимости от контекста, символ. А std::byte одновременно и чист, как слеза комсомолки, и любой объект можно представить в виде массива std::byte.

#19360
18:46, 23 мая 2025

entryway

> https://gamedev.ru/flame/forum/?id=248221&page=36&m=5087412#m526
Мда

#19361
19:11, 23 мая 2025

entryway
у nes'a "вопросы от нуба" закончились и он решил по второму кругу пойти.

#19362
19:13, 23 мая 2025

Ghost2
А де тогда наши std::word, std::dword, в стандарте 2030 высруть?

#19363
(Правка: 16:15) 16:11, 25 мая 2025

Безопасен ли код:

double foo(double x) {
if (x==0.0) // гарантировано, что нулевое значение не попадёт в операцию деления? 
return 0.0;
return 1/x;
} 

Вообще, вопрос возник из задачи для ноомализации вектора.
Upd: в Ogre3d версии 1.9 есть ссылка на форум в коде нормализации вектора, которая объясняет зачем они отказались от использования эпсилон. Но я так и не понял, почему.

#19364
16:44, 25 мая 2025

nes
> Накой чорд нам std::byte, когда есть унсигнид чар и std::uint8_t?
Чтобы когда ты увидишь функцию с сигнатурой
    size_t hash(std::byte const* buf, size_t len)
У тебя не возникало вопроса: "а если в буфе встретится нулевой байт раньше чем лен, это будет воспринято как конец строки и всё что дальше будет проигнорировано, или же нули не имеют никакой специальной обработки и все лен байтов будут прочитаны без вариантов?"

Страницы: 11290 1291 1292 12931303 Следующая »
ФлеймФорумПрограммирование