constexpr构造函数需要常量成员函数时出现问题
problem with constexpr constructor requiring constant member function
我的代码与要求成员函数为常量的编译器有关,出现问题。我不知道如何让它工作,因为我需要在get函数中修改m_data
,因此它不能是一个常量成员函数。
这是代码
#include <array>
#include <cstdint>
#include <cstdlib>
template <typename t, const size_t size, const size_t key>
class XorArray {
public:
// holds encrypted array data
std::array<t, size> m_data;
// compile-time create xor array
__attribute__((always_inline)) constexpr XorArray(
const std::array<t, size> &elements)
: m_data{} {
for (size_t i = 0; i < size; ++i) m_data[i] = elements[i] ^ key;
}
// retrive unxored data at runtime
__attribute__((always_inline)) const t *get(){
for (auto &element : m_data) element ^= key;
return m_data.data();
}
};
static constexpr std::array<uint8_t, 5> test_data = {68, 88, 66, 67, 80};
int main() {
static constexpr auto test_data_enc =
XorArray<uint8_t, test_data.size(), 0x5>(test_data);
const auto test_get = test_data_enc.get();
return 0;
}
错误消息为
error: passing 'const XorArray<unsigned char, 5, 5>' as 'this' argument discards qualifiers [-fpermissive]
const auto test_get = test_data_enc.get();
演示
您可以在本地var中计算未异或的数据并返回它。
__attribute__((always_inline)) const std::array<t, size> get() const {
auto data = m_data;
for (auto &element : data) element ^= key;
return data;
}
或者存储原始元素并将其返回。
std::array<t, size> m_data;
std::array<t, size> m_elements;
// compile-time create xor array
__attribute__((always_inline)) constexpr XorArray(
const std::array<t, size> &elements)
: m_data{}, m_elements(elements) {
for (size_t i = 0; i < size; ++i) m_data[i] = elements[i] ^ key;
}
// retrive unxored data at runtime
__attribute__((always_inline)) const t *get() const {
return m_elements.data();
}
相关文章:
- Visual Studio中的函数声明和函数定义问题
- C++quit()函数中可能存在作用域问题
- 类似于strcat()的函数出现问题
- 当调用switch语句中的函数时(即使函数不包含循环),似乎是永不结束的循环的问题
- 类C++中的函数问题(LNK2019和LNK1120错误)
- c++binary_search函数排序数组(流行名称搜索)出现问题
- 关于简单C++函数(is_palindrome)的逻辑的问题
- C++LinkedList问题.数据类型之间存在冲突?没有匹配的构造函数
- 如何在C++向量中奇数元素前面加上值-1,我在使用insert函数时遇到了问题
- constexpr构造函数需要常量成员函数时出现问题
- 添加存储在向量中的大整数的函数出现问题
- 使用自定义比较函数使用std::sort()对矢量字符串进行排序时出现问题
- 关于 c++ 函数中指针赋值的简单问题
- 如何在标头中声明(或定义)函数的问题
- 有关 c++ 构造函数的问题
- 模板类转换问题 - 无法推断调用的函数
- 从 C++ 中的函数返回数组地址问题
- 关于复制构造函数的一个棘手问题
- 移动赋值运算符;尝试引用已删除的函数.我该如何解决这个问题?
- Arduino:在 loop() 和自定义函数中运行相同的代码时出现问题