Вопрос Спавн/смерть рошана

Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
781
Реакции[?]
331
Поинты[?]
63K
Да... звучит убедительно. Ну, видимо настало время мне ебейшую кучу кода переписать и перестать уже быть консерватором.
Энивей, спасибо за развернутый ответ. Теперь я понял, о чем ты.
UPD: Справебыдлости ради, я видимо просто не очень понимал, как все эти новые приколы работают.
Почитал документацию щас. Да, штука крутая, глупо её не юзать.
главное когда какой-нибудь потенциально нулевой конст чар заворачиваешь, не забывай нуллптр чекать. стандарт требует чтобы в конструктор string_view передавался валидный, не нуллптр, указатель(то есть ответственность за проверку указателя лежит на тебе)
типичный пример заворачивания конст чара(например из какого-нибудь класса) в стрингвью:
C++:
std::string_view CGameEvent::GetName()//c++17
{
    if(name_ptr_const_char)
        return {name_ptr_const_char};
    return {};//нельзя из нуллптр конструировать, пустой возвращай если нуллптр
}
можно пойти еще дальше и сделать для удобства в каком-нибудь общем заголовке хелпер функцию
C++:
constexpr std::string_view MakeStringView(const char* ptr) noexcept
{
    if (ptr)
        return { ptr };
    return {};
}
и потом юзать типа
std::string_view CGameEvent::GetName() { return MakeStringView(name_ptr_const_char); }
C++:
#include <iostream>

constexpr std::string_view MakeStringView(const char* ptr) noexcept
{
    if (ptr)//comment check = crash
        return { ptr };
    return {};
}

class Shit
{
    const char* x{ nullptr };
public:
    Shit(const char* _x) : x{ _x } {}

    std::string_view GetName() const noexcept;
};
std::string_view Shit::GetName() const noexcept { return MakeStringView(x); }

int main()
{
    Shit a{ nullptr }; std::cout << a.GetName() << std::endl;
    Shit b{ nullptr }; std::cout << b.GetName() << std::endl;
    Shit c{ nullptr }; std::cout << c.GetName() << std::endl;
    Shit d{ "d"}; std::cout << d.GetName() << std::endl;
    Shit e{ "e" }; std::cout << e.GetName() << std::endl;
    Shit f{ "f" }; std::cout << f.GetName() << std::endl;
    Shit g{ nullptr }; std::cout << g.GetName() << std::endl;
    Shit h{ "h" }; std::cout << h.GetName() << std::endl;
    Shit i{ "f" }; std::cout << i.GetName() << std::endl;
    Shit j{ nullptr }; std::cout << j.GetName() << std::endl;
    return 0;
}
 
Сверху Снизу