【发布时间】: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)如果你想将你的演员表标记为无效,那么它们就很明显了。