从空C字符串构造std::string的代码是否存在未定义行为?
代码是否存在未定义行为?
这段代码不会导致未定义行为,具体解释如下:
- 首先,
strlen("")的返回值是0,实际调用的是std::basic_string的第4个构造函数:basic_string(const CharT* s, size_type count, const Allocator& alloc = Allocator())。 - 对于这个构造函数,当
count为0时,标准只要求指针s是有效指针(不需要指向可解引用的对象)。这里aptr指向空字符串的首地址,属于有效指针范畴。 - 你担心的
[aptr, aptr)范围问题,实际上C++标准允许这种空范围的构造场景——此时构造函数不会尝试访问任何内存元素,最终只会创建一个空的std::string对象,不存在越界访问或无效内存操作的情况。
内容的提问来源于stack exchange,提问作者QF0
相关产品推荐
相关产品推荐

