【发布时间】:2019-03-03 14:00:38
【问题描述】:
标题可能具有误导性,不知道如何解释,但我将提供一个示例。
所以我有这个结构:
struct mom {
public:
static constexpr auto create(int i) {
return a(i);
}
struct a {
int* m_a;
constexpr a(int i) : m_a(&i) {
change();
}
constexpr void change(void) {
*m_a += 100;
}
struct b {
public:
static int get(a* import) {
int* arr = new int[10];
arr[1] = *import->m_a;
return arr[1];
}
};
};
};
我这样称呼它:
printf("%d", mom::a::b::get(&(mom::create(10))));
它应该在编译时将 10(或您给它的任何其他值)加 100,然后在运行时将其存储到动态数组中并返回给您。
这段代码几乎与我的项目完全相同,但它有一个问题:它不是将值加 100,而是返回一个随机大数 (-95321314)。我试过调试它,一切都很好,直到我调用 get() 函数,我不知道发生了什么导致这个
有什么想法吗?
【问题讨论】:
-
FWIW,Clang 给了我一个nice warning。
-
@chris 你是对的,现在正在寻找修复它
标签: c++ constexpr compile-time