Применяю std::remove_reference_t
для выделения памяти под тип указателя, т.е.:
p = new remove_reference_t <decltype (*p)> [10];
Этот способ мне подсказали, но я не разобрался как работает remove_reference_t
. Есть ли какие-то "подводные камни" о которых мне следовало бы знать?
Если p
имеет обычный "голый" указательный тип, то никаких подводных камней тут нет.
Особенность тут скорее содержится в decltype
. Когда decltype
применено непосредственно к имени переменной (напр. decltype(p)
), то в результате получается тот тип, с которым эта переменная объявлена. А вот когда decltype
применено к какому-то более сложному выражению, результирующий тип зависит от категории значения (value category) этого выражения. Для lvalue аргумента типа T
получится ссылочный тип T &
, т.е. lvalue-ссылка.
В этом случае *p
- как раз lvalue. Ссылочный тип в new
нас не устраивает, т.е. нам надо превратить тип T &
обратно в T
, по каковой причине и приходится применять std::remove_reference_t
.
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Как включить подчеркивание ошибок красными волнистыми линиями в QT Creator?
Есть ли существенные отличия между двумя стандартами c++14 и gnu++14 (расширение GNU)? Имеет ли смысл для компиляции под линуксом придерживаться...
style подчеркивается красным и выбивает ошибку "Неверное название свойства style(M16)", хотя вроде бы все подключил, в документации так же все делается
Очень хочу понять как преобразовать данный од чтобы он работал для открытия 1-битных bmp файловВот нашёл такой код