【发布时间】:2021-10-27 20:59:44
【问题描述】:
我有一个返回指针和长度的函数,我想调用std::string::assign(pointer, length)。当长度为零并且指针可能为 nullptr 时,我是否必须做一个特殊情况(调用 clear)?
C++ 标准说:
21.4.6.3 basic_string::assign
basic_string& assign(const charT* s, size_type n);
Requires: s points to an array of at least n elements of charT.
那么如果n 为零呢?什么是零字符数组,一个如何指向它?
调用是否有效
s.assign(nullptr, 0);
还是未定义的行为?
当大小 n 为零时,libstdc++ 的实现似乎不会取消引用指针 s,但这几乎不能保证。
【问题讨论】:
-
在相关说明中,
char a[4]; s.assign(s+4, 0);是否合法?这似乎是对“长度为 0 的数组”的合理解释,并且在实践中可能会出现。
标签: c++ language-lawyer c++-standard-library