提问人:Lukas Vozenilek 提问时间:12/14/2022 最后编辑:Lukas Vozenilek 更新时间:12/14/2022 访问量:92
在 constexpr 构造函数中按引用传递 std::array 会导致数据指针为 null
Passing std::array by reference in constexpr constructor results in null data pointer
问:
我的类有一个 constexpr 构造函数,它引用了 .当创建我的类的全局 constexpr 常量并传递一个即时数组时,构造函数会从数组引用中获取一个空数据指针,即使基础数据存在:std::array
class MyClass {
public:
explicit constexpr MyClass(const std::array<int, 3> &from) {
assert(from[0] == 1); // Ok
assert(from[1] == 2); // Ok
assert(from[2] == 3); // Ok
assert(from.data() != nullptr); // Compilation halts here
}
};
static constexpr MyClass constGlobal{std::array{1, 2, 3}};
需要 C++ 17+
测试于:
明GW w64 9.0
ARM gcc 12.2 版本
我希望指针存在,因为工作得很好。data()
operator[]
编辑:
指针确实存在。这似乎是 GCC 不允许将指针与临时对象进行比较的问题。仍然存在一个相关的问题,这个简化的例子试图描述(很糟糕)。data()
编辑:
看起来这可能是在constexpr上下文中比较临时地址的gcc错误:
答: 暂无答案
评论
assert()
用于运行时,需要在编译时解析。请考虑一下。constexpr
static_assert()