gpt4 book ai didi

c++ - GCC 8 无法编译 make_shared()

转载 作者:太空狗 更新时间:2023-10-29 20:33:54 25 4
gpt4 key购买 nike

这段代码编译干净,适用于我尝试过的所有编译器,除了 GCC 8(和当前的 GCC 主干):

std::make_shared<volatile int>(0)

我想知道:

  1. GCC 8 拒绝此代码是否正确?
  2. 是否有 GCC 8 会接受的替代品(具有相同的语义和性能)?我知道 std::atomic , 但语义不一样所以建议使用它而不是 volatile不是我要找的。

在这里查看:https://godbolt.org/z/rKy3od

最佳答案

根据标准语言,这是 libstdc++ 不符合项。

这可能是一个错误。 make_shared电话 allocate_shared使用标准分配器,std::allocator<remove_const_t<T>>其中 T是共享对象的类型。此分配器将仅用于为底层共享对象(包含 volatile int 和原子计数器的结构)获取重新绑定(bind)的分配器。因此,将此基础对象声明为非 const 非 volatile 是完全没问题的。

此定义为 make_shared将工作:

template<class T,class...Args>
auto make_shared(Args&&...args){
using ncvT= std::remove_cv_t<T>;
return std::allocate_shared<T>(std::allocator<ncvT>(),std::forward<Args>(args)...);
}

关于c++ - GCC 8 无法编译 make_shared<volatile int>(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52268878/

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