#include <string>
#include <string_view>
#include <ranges>
#include <array>
#include <utility>
#include <algorithm>
#include <cassert>
#include <stdexcept>
template <typename Key, typename Value, std::size_t Size>
struct Map {
std::array<std::pair<Key, Value>, Size> data;
constexpr Value at(const Key key) const {
const auto iter = std::find_if(std::begin(data), std::end(data),
[&key](const auto& v) { return v.first == key; });
if (iter == std::end(data)) {
throw std::range_error("unknown character");
}
return iter->second;
}
};
static constexpr std::array<std::pair<std::string_view, char>, 51> MORSE_MAP = { {
{"•-", 'A'}, {"-•••", 'B'}, {"-•-•", 'C'}, {"-••", 'D'},
{"•", 'E'}, {"••-•", 'F'}, {"--•", 'G'}, {"••••", 'H'},
{"••", 'I'}, {"•---", 'J'}, {"-•-", 'K'}, {"•-••", 'L'},
{"--", 'M'}, {"-•", 'N'}, {"---", 'O'}, {"•--•", 'P'},
{"--•-", 'Q'}, {"•-•", 'R'}, {"•••", 'S'}, {"-", 'T'},
{"••-", 'U'}, {"•••-", 'V'}, {"•--", 'W'}, {"-••-", 'X'},
{"-•--", 'Y'}, {"--••", 'Z'}, {"-----", '0'}, {"•----", '1'},
{"••---", '2'}, {"•••--", '3'}, {"••••-", '4'}, {"•••••", '5'},
{"-••••", '6'}, {"--•••", '7'}, {"---••", '8'}, {"----•", '9'},
{"•-•-•-", '.'}, {"--••---", ','}, {"---•••", ':'}, {"••--••", '?'},
{"•----•", '\''}, {"-••••-", '-'}, {"-••-•", '/'}, {"-•--•", '('},
{"-•--•-", ')'}, {"•-••-•", '"'}, {"-•••-", '='}, {"•-•-•", '+'},
{"-••-", 'x'}, {"•--•-•", '@'}, {"/", ' '} } };
constexpr auto decode(std::string_view morse) {
constexpr auto map = Map<std::string_view, char, MORSE_MAP.size()>{ MORSE_MAP };
return morse
| std::ranges::views::split(' ')
| std::ranges::views::transform([](auto&& range) {
return map.at(std::string_view{ range });
})
| std::ranges::to<std::string>();
}
int main() {
const auto CODE = "•••• • •-•• •-•• --- --••--- / •-- --- •-• •-•• -••";
const auto TEXT = "HELLO, WORLD";
assert(decode(CODE) == TEXT);
return 0;
}fopen_s внезапно не сможет открыть файл и вернёт ошибку. Допустим, файла не существует, или на его открытие нет прав у пользователя. Ты же не проверяешь возврат результата из функции открытия и пытаешься что-то записать в F, даже если функция не смогла открыть файл и вернула ошибку. А когда она вернёт её, переменная F останется нулевыем указателем или, в первом твоём случае, вообще будет обращение к неинициализированной переменной, где ты получишь неопределённое поведение. Вот оно и ругается на эту ветку развития событий.dst-nat на заранее указанный для метки/списка_адресов апстрим socks5.не спрашивайте зачем мне это нужнодействительно. C++ ABI -- это боль, сильная боль. Даже разработчики компиляторов страдают от неё. Если вам уж прям так важно поковыряться в его кишках, то изучайте исходники LLVM и спецификацию стандарта ABI. А если нет, то возьмите OpenCV C API и не выносите себе голову.
но описан как функцияА как он должен быть описан, как сферический код в вакууме?
чем отличается от обычных деструкторовСтандарт определяет деструкторы:
что на самом деле означает `vbase destructor`, в каких случаях он вызываетсяЕсть предположение, что это имя экспортируемого
complete object destructor для класса, базовым классом которого является класс с виртуальным деструктором. То есть, он выполняет часть процесса цепочки деструкторов, которая помимо вызова base object destructor, вызывает также все деструкторы для всех базовых виртуальных классов. Но при этом ещё не вызван deleting destructor, который собственно вызывает operator delete. Т.е. получается, что complete object destructorпо включённому в него списку действий, как бы "наследуется" от base object destructor. В свою очередь, deleting destructor "наследуется" от complete object destructor.Предполагаю, что вызывается автоматически в замыканиях. Но что на самом деле означает `default constructor closure'Для чего он может вызываться в замыканиях, просто чтоб было?