Но если он основан на динамическом массиве, то как тогда выполняется вставка элементов?
так и чему он не равен?
в пропозале C++ написно, что он отложен до C++29.
Мне в целом фиолетово, что написано в стандарте, мой код компилирует компилятор, а не стандарт.
ОК. На этом мои полномочия -- всё.
А ещё у вас UB, когда вызываете placement new на невыровненный массив байтов
Вы можете использовать только так:
То есть размер должен быть известен на момент компиляции.
date
с типом структуры Date
. Эта глобальная переменная неявным образом инициализируется статической функцией Core::get_system_parameters
, которая использует Config::search_str
для инициализации полей переменной date
.Date
. А удобно ли тебе указывать эти же имена полей еще десятки раз там, где ты ими пользуешься? Не смущает ли тебя что эти поля везде модифицируемые, т.к. date
не константна? Не беспокоит ли тебя то, что в результате get_system_parameters();
переменная date
внезапно становится инициализированной и это вообще никак не описано в имени функции? Слово get
в префиксе функции сразу говорит о том, что функция является аксессором, в частности - геттером и возвращает инициализированное значение, но у тебя слева от get_system_parameters();
нет присвоения, тебе это странным не кажется?Date
у тебя является агрегатной и для нее доступна агрегатная инициализация.return {
Config::search_str("title"),
Config::search_bool("fullskreen"),
Config::search_bool("window_mode"),
Config::search_int("width"),
Config::search_int("height"),
Config::search_int("render_API")
};
const Date& Core::get_system_parameters() {
static const Date date{
Config::search_str("title"),
Config::search_bool("fullskreen"),
Config::search_bool("window_mode"),
Config::search_int("width"),
Config::search_int("height"),
Config::search_int("render_API")
};
return date;
}
Core::get_system_parameters()
. я не хочу по 2 раза писать одни и те же переменые в структуре объявляя их
// Определение структуры `Date`.
struct Date {
int a; // Определение поля `a` в структуре `Date`.
};
// Определение глобальной переменной `date` типа `Date`.
Date date;
// Определение глобальной процедуры `get_parametrs`.
void get_parametrs(){
// Полю `a` глобальной переменной `date` присваивается значение `5`.
date.a = 5;
}
parent[num] = findMN(parent[num]);
return parent[num];
А разве в случае prvalue трейты std::remove_reference+std::remove_const не сделают ничего ?
std::decay
даже понятнее, т.к. его семантика говорит снять все что есть. А если ничего нет, то и снимать нечего. Тут нужно видеть разницу между "снять все что есть" и "снять именно это".std::decay
удобен своей семантикой. Читаешь и сразу понимаешь что происходит с переданным типом.std::decay
. Преобразование к указателю - незначительное зло, с которым даже можно успешно жить.std::decay
, они всегда идут разными путями. test
первым параметром зайдет внезапно prvalue, для которого T
выведется в чистый тип. Трансляция даже не остановится, т.к. std::remove_reference
и std::remove_const
созданы так, чтобы не замечать отсутствия того, что они призваны удалять.static_assert
на соответствие типов. И в этом месте яб именно std::decay
использовал. Так твой контракт получит механизм соблюдения.requires
для явного определения контракта.
Корректным в C++ является только сравнение значений одного типа между собой. Если полагаться на неявное приведение при сравнении, то выстрелить себе в ногу становится очень легко. Не смотря на то, что C++ это все позволяет.
yourtexthere, понимать совершаемое - это значит полностью усвоить информацию о совершаемом процессе, выработать навык безошибочного совершения процесса и иметь возможность на каждом шаге экспертно оценить правильность хода совершаемого процесса.
Нет ничего страшного в том, что ты не понимаешь то, что делаешь. Нет ничего страшного в том, что ты признаешь очевидное для профессионала. Это - просто твои обстоятельства. Слова автора ответа - это просто изложение твоих обстоятельств в тексте.
Изложенный тобой код действительно безграмотен и на самом деле он не работает так, как ты думаешь. Совпадение результата этого кода с библиотечным значением - чистая случайность.
И для твоего уровня знаний - это нормально. Нечего стесняться своей безграмотности тогда, когда с ней нужно бороться через изучение и практику.