在ConstexPR函数中,断点被击中
In constexpr function breakpoint is hit
这是我的代码:
#include <string.h>
#include <stdlib.h>
template <int ...I>
class MetaString
{
char buffer_[sizeof...(I)+1];
public:
// A constexpr constructor
constexpr MetaString(const char * arg) :buffer_{ encrypt(arg[I])... }
{}
constexpr const char *get()const { return buffer_; }
private:
constexpr char encrypt(const char c) const { return c ^ 0x55; }
};
char *decrypt(const char* buffer_, int size)
{
char* tmp = (char *)malloc(size + 1);
strcpy_s(tmp, size + 10, buffer_);
for (int i = 0; i < size; i++)
{
*(tmp + i) = *(tmp + i) ^ 0x55;
}
return tmp;
}
int main()
{
constexpr MetaString<0,1,2,3,5> var("Post Malone");
char * var1 = decrypt(var.get(), 5);
std::cout << var1 << std::endl;
return 1;
}
这个想法很简单,我创建了MetaString
的对象,并为其提供了一些string
。构造函数通过XOR
对参数进行加密。然后,我有decrypt
函数,可以解密重新值。
问题是我在构造函数中设置了断点(特别是此行constexpr MetaString(const char * arg) :buffer_{ encrypt(arg[I])... }
(,并且在调试模式下运行时会击中。据我了解,这意味着在运行时调用构造函数。
为了确保在编译时间评估函数,我以这种方式创建对象constexpr MetaString<0,1,2,3,5> var("Post Malone");
,但我已经读到constexpr
变量必须是字面类型。
所以我的问题是我如何设法具有诸如var
之类的变量(它们会加密其中的数据并在编译时进行评估(,然后在运行时致电decrypt
并获取原始值?
constexpr
仅保证函数或变量可以在常数表达式中使用。它不能保证函数/对象将始终在编译时进行评估/构造。在您的特殊情况下,这实际上是不可能的,因为我们正在谈论具有自动存储持续时间的对象。如果要创建该对象,则只能在程序运行时真正创建。尝试使您的变量static
&Hellip;
相关文章:
- 代码在 msvcrt .dll函数上设置断点失败
- 如何在 gdb 中的所有构造函数上同时为 C++ 对象设置断点?
- 从函数获取 char* 后的条件 gdb 断点
- 触发的断点(析构函数)与类模板类型是自身的一个版本
- 在ConstexPR函数中,断点被击中
- GDB:在 C++ 中的类函数上创建一个断点
- 在WindBG断点命令中调用JavaScript函数
- 在Visual Studio中的dll中的函数处设置断点
- 如何在gdb中为函数的所有调用设置断点
- GDB:调用特定对象的析构函数时的断点
- C++成员函数的 GDB 断点
- 如何使用 windbg 在不属于任何类的函数声明上设置断点
- 在名称包含 WinDBG 中的空格的重载函数处设置断点
- 使用 'gdb' 在函数内的特定行中设置断点
- VS2008调试WEC7应用程序-断点目前不会被击中.此函数当前没有加载可执行代码
- 如何在CPP文件中为所有函数设置断点
- 如何在Visual Studio匿名命名空间中通过函数名设置断点
- 如何在Windbg的析构函数中设置断点
- 通过 GDB 设置断点时未定义函数"d::~d"
- 为类成员函数设置断点不成功