Вопросы с тегом «lifetime»

373
Каково время жизни статической переменной в функции C ++?

Если переменная объявлена ​​как staticв области действия функции, она инициализируется только один раз и сохраняет свое значение между вызовами функции. Что именно это время жизни? Когда вызывается его конструктор и деструктор? void foo() { static string plonk = "When will I die?";...

224
Почему я не могу сохранить значение и ссылку на это значение в одной структуре?

У меня есть значение, и я хочу сохранить это значение и ссылку на что-то внутри этого значения в моем собственном типе: struct Thing { count: u32, } struct Combined<'a>(Thing, &'a u32); fn make_combined<'a>() -> Combined<'a> { let thing = Thing { count: 42 };...

136
Является ли этот объект-расширение-срок-закрытие ошибкой компилятора C #?

Я отвечал на вопрос о возможности закрытия (законно) продления времени жизни объектов, когда столкнулся с каким-то чрезвычайно любопытным генератором кода со стороны компилятора C # (4.0, если это имеет значение). Самое короткое повторение, которое я могу найти, следующее: Создайте лямбду, которая...

88
Что такое нелексические времена жизни?

В Rust есть RFC, связанный с нелексическим временем жизни, который был одобрен для реализации в языке в течение длительного времени. В последнее время поддержка этой функции в Rust значительно улучшилась и считается полной. У меня вопрос: что такое нелексическая жизнь?...

85
«Время жизни» строкового литерала в C

Разве указатель, возвращаемый следующей функцией, не будет недоступен? char *foo(int rc) { switch (rc) { case 1: return("one"); case 2: return("two"); default: return("whatever"); } } Значит, время жизни локальной переменной в C / C ++ находится практически только внутри функции, верно? Это...

26
Можно ли вернуть значение аргумента по умолчанию с помощью константной ссылки?

Можно ли вернуть значение аргумента по умолчанию с помощью константной ссылки, как в следующих примерах: https://coliru.stacked-crooked.com/a/ff76e060a007723b #include <string> const std::string& foo(const std::string& s = std::string("")) { return s; } int main() { const...

22
Использование переменной в собственном инициализаторе

[basic.scope.pdecl] / 1 стандартного черновика C ++ 20 содержал в примечании следующий (ненормативный) пример (частичная цитата до запроса на объединение 3580 , см. ответ на этот вопрос): unsigned char x = x; [...] x инициализируется своим собственным (неопределенным) значением. Это на самом деле...

19
Является ли значение указателя `this` постоянным в течение всего времени существования объекта?

thisГарантируется ли значение указателя постоянным в течение жизни определенного объекта? Я не могу представить себе случай, когда это изменится, но не знаю, не пропустил ли я...

10
Разрешена ли арифметика указателей на выделенном хранилище начиная с C ++ 20?

В стандарте C ++ 20 говорится, что типы массивов являются неявными типами времени жизни . Означает ли это, что массив неявного типа времени жизни может быть создан неявно? Неявное создание такого массива не будет вызывать создание элементов массива? Рассмотрим этот случай: //implicit creation of an...

9
Вариация на тему типа прокалывания: на месте тривиальная конструкция

Я знаю, что это довольно распространенная тема, но насколько легко найти типичный UB, я не нашел этот вариант до сих пор. Итак, я пытаюсь официально представить объекты Pixel, избегая при этом фактической копии данных. Это действительно? struct Pixel { uint8_t red; uint8_t green; uint8_t blue;...