gpt4 book ai didi

c++ - const in placement new 是多余的吗?

转载 作者:搜寻专家 更新时间:2023-10-31 02:02:40 24 4
gpt4 key购买 nike

我在尝试实现类似 std::any 的容器时遇到了这个问题。

placement new 中使用 const 是否多余?

如果不是,那是什么意思?

我应该在 placement new 上使用 std::decay 吗?

#include <iostream>

int
main() {
auto * address = std::malloc(sizeof(std::string));

// What does `const` means here?
// Is it superfluous?
// Is `std::decay` needed here too?
new (address) std::string const("hello, world");

// Is this undefined behaviour?
// In the context of my code: T -> std::decay<T>
// Here I'm just using a `std::string` as an example
auto & str = *static_cast<std::string *>(address);

str.append("hi");

std::cout << str << '\n';

return 0;
}

最佳答案

这具有未定义的行为,因为该对象是 const 并且它被 append 更改。它可能会遇到通过 malloc 值获取指向 string 的指针而不是使用 new< 的结果的问题:数组不能与其自己的第一个元素进行指针互换,更不用说它为其提供存储的对象(它本身只是一个 C++17 术语;这是一个活跃的研究,因为缺少更好的术语)。

关于c++ - const in placement new 是多余的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56914246/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com