【问题标题】:Modifying std::string internal buffer via the non-cont c++17 data() overload通过非 cont c++17 data() 重载修改 std::string 内部缓冲区
【发布时间】:2021-01-21 21:32:09
【问题描述】:

我刚刚看到 c++17 重载了一个非常量 data() 方法,即CharT* data() noexcept;,并希望确保如下调用它的行为是明确定义的:

std::string str(some_size,'0');
memcpy((void*)str.data(),source,some_size);

【问题讨论】:

  • 天哪,不要(void*)str.data()——要么是空投,要么是疯狂的危险;它可以将整数转换为 void 指针,将指向 const 的指针转换为非常量。如果它被提供一个指向非 const 的指针......它确实是 zilch。至少static_cast<void*>(ptr) 如果你想将你的演员表标记为无效,那么它们就很明显了。

标签: c++ c++17 stdstring


【解决方案1】:

是的,这是明确定义的。这是提供对原始数据的可变访问的预期目的。

【讨论】:

    猜你喜欢
    • 2013-06-16
    • 2010-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-10
    • 2016-12-06
    • 2014-09-02
    相关资源
    最近更新 更多