为什么允许将 0 或 nullptr 分配给 std::string,即使它会直接导致运行时异常?
Why is assignment of 0 or nullptr to std::string allowed, even when it results in a straight forward runtime exception?
std::string s = 0; // = nullptr ---> throws `std::logic_error`
以上语句导致分段错误。为什么允许?
[至少 nullptr
的构造函数重载应该是 =delete
,不是吗?]
在这种情况下,const char*
的构造函数会由于重载解析的工作方式而被调用。
并且如果该指针是 nullptr
,则标准库会尝试取消引用具有未定义结果的空指针值。
std::string
已经臃肿得可怕。我的猜测是,没有人能够说服 C++ 标准委员会相信拥有 std::string(std::nullptr_t)
构造函数的优点。
std::string s = 0; // = nullptr ---> throws `std::logic_error`
以上语句导致分段错误。为什么允许?
[至少 nullptr
的构造函数重载应该是 =delete
,不是吗?]
在这种情况下,const char*
的构造函数会由于重载解析的工作方式而被调用。
并且如果该指针是 nullptr
,则标准库会尝试取消引用具有未定义结果的空指针值。
std::string
已经臃肿得可怕。我的猜测是,没有人能够说服 C++ 标准委员会相信拥有 std::string(std::nullptr_t)
构造函数的优点。