Constructing a constexpr std::weak_ptr
Constructing a constexpr std::weak_ptr
根据 std::weak_ptr
文档,可以构造 constexpr
weak_ptr
:
#include <memory>
constexpr weak_ptr<int> foo{};
但是,尝试使用叮当声会产生一个汇编错误,指出constexpr变量不能具有非文字类型的" const std::weak_ptr<int>
",这是因为weak_ptr<int>
具有用户提供的destructor。(确实是,查看libc 标题)
我的问题是,这是LIBC 错误,还是constexpr
weak_ptr
只是没有意义,并且拥有ConstexPr默认构造函数是错误的?我可以期望将来有效吗?
这是libc bug
no。
做
constexpr
weak_ptr
只是没有意义
是。
拥有constexpr默认构造函数是一个错误?
否。在非文字类型上使用的constexpr
构造函数允许在任何动态初始化之前进行静态和线程存储持续变量的恒定初始化。
这意味着,例如,全局默认构建的weak_ptr
对象始终是初始化的,并且可以安全地用于全局对象的构造函数。
// TU 1
namespace foo {
std::weak_ptr<int> meow;
}
// TU 2
namespace foo {
extern std::weak_ptr<int> meow;
}
struct C {
C() { /* can safely use foo::meow here */ }
} c;
我可以期望这个[
constexpr
weak_ptr
]将来可以使用吗?
no。
相关文章:
- CLANG 编译器 说:变量"PTR"可能未初始化
- 在以唯一ptr为值的C++映射中,动态内存何时会被销毁
- 将 ptr 传递给 ptr 到 A 作为参数传递给 A 的函数是不好的做法吗?
- 为共享 ptr 向量实现复制 c'tor?
- 字符和整数中 **(ptr+1) 的值差异
- C++:在不中断共享的情况下通过引用传递共享 PTR?
- 为什么"weak.lock()"返回"nullptr" "auto weak=std::make_shared<int>(42);"的定义?
- 如何将派生类从基 ptr 分配给 nlohmann::json
- 引用 std::shared:ptr 以避免引用计数
- 为什么我不能在不进行任何转换的情况下将浮点数放入任何类型的 ptr 中?
- 在调用函数时,ptr** 和 ptr*& 之间是否有区别,或者首选C++?
- 另一种类型的智能ptr,比如具有弱refs的unique_ptr
- 尝试打印出 *ptr++ 的值,以了解它是如何工作的
- 如何控制共享 ptr 引用计数?
- C++中的指针否定 (!ptr == NULL)
- 从const ptr*转换为ptr*时出现问题
- 这是MSVC 2013中具有共享PTR的单例的正确实现吗?
- 对唯一 ptr 无效读取的引用向量
- C++ 类型转换基础 PTR 到派生 PTR 保存在引用类中
- 为什么使用模板生成的函数具有"weak"符号类型?