【发布时间】:2023-01-11 03:30:52
【问题描述】:
在我看来,现代 C++ 似乎要求在调用运算符、c_str() 或 data() 之后,保证字符串的内容以 null 终止。
但是,这个初始化有没有可能“懒惰地”完成?也就是说,在调用其中一个函数之前,为字符串的内容分配的缓冲区可能不会以 null 终止,这可能会使该函数的使用不是 thread_safe?理想情况下,我正在以某种方式从标准中寻找特定的引文。
【问题讨论】:
-
所有
const限定的成员函数在标准库中都是线程安全的。 -
如果不先调用
c_str(),您如何获得指向此内容的指针? -
我认为 NathanOliver 提到的参考是 eel.is/c++draft/res.on.data.races#3 ,但是
data()有一个非常量重载,所以不确定整个标准律师的答案到底是什么。 -
@Mat 但仍然可以调用
const版本并获取以 null 结尾的字符串。所以非常量data()会以某种方式修改它是荒谬的。非常量版本只是返回一个非常量指针,因此用户可以对其进行编辑。
标签: c++ c++11 thread-safety stdstring