gpt4 book ai didi

c++ - 静态常量 : why does it need to be templated?

转载 作者:IT老高 更新时间:2023-10-28 22:22:34 28 4
gpt4 key购买 nike

我有两个结构 ab:

struct a {
static constexpr int f() {
return 1;
}

static constexpr int c = f();
};

template<int I>
struct b {
static constexpr int f() {
return I;
}

static constexpr int c = f();
};

a 显然不起作用,因为 f 被认为没有在这里定义。但是为什么 b 是有效的呢?

最佳答案

我不确定,但我认为编译器会以这种方式扩展该模板(如果 int I 为 1):

struct b {
static constexpr int f();
static const int c;
};

constexpr int b::f(){
return 1;
};

const int b::c = f();

所以它可以编译,因为 b::f 的调用是在它的声明之后完成的

事实上,如果你以这种方式声明 a 它将编译:

struct a {
static constexpr int f();
static const int c;
};

constexpr int a::f(){
return 1;
};

const int a::c = f();

所以答案是在编译期间编译器将 b::c 评估为 const 值而不是 constexpr。

关于c++ - 静态常量 : why does it need to be templated?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49329964/

28 4 0