М
Маша С++
@masha_cpp107 подп.
285просмотров
17 августа 2025 г.
Score: 314
Многим известно, что std::string можно создать из указателя на char (допустим из некой C-шной функции): #include <iostream> #include <string> static std::string str = "OK"; const char getStr() { return str.c_str(); } int main() { std::cout << "str: " << std::string(getStr()) << std::endl; } Но что будет, если нам прилетит nullptr и мы передадим его в конструктор std::string? const char* getStr() { return nullptr; //return str.c_str(); } Можно подумать, что создастся пустая строка. В конце концов, почему бы и нет, я бы например реализовала строку именно так. На самом же деле передавать nullptr в конструктор строки нельзя и в общем случае будет UB. На gcc у меня это приводит к std::logic_error. А вот на msvc уже будет Access violation reading location 0x0000000000000000. Ситуация немного прояснилась с выходом C++23. Создавать строку из nullptr более нельзя: basic_string( std::nullptr_t ) = delete; // C++23 std::string s = nullptr; // нельзя Хотя кажется, что проблему с возвратом nullptr это не решает.
285
просмотров
1041
символов
Нет
эмодзи
Нет
медиа

Другие посты @masha_cpp

Все посты канала →
Многим известно, что std::string можно создать из указателя — @masha_cpp | PostSniper