【发布时间】:2023-02-22 07:58:41
【问题描述】:
C++ 模板是编译时构造。在 C++20 中,模板函数怎么可能用非静态对象实例化?
struct X {};
template<typename T, X x> auto f() {
return x;
}
int main() {
auto x = X{};
f<double, x>();
}
【问题讨论】:
C++ 模板是编译时构造。在 C++20 中,模板函数怎么可能用非静态对象实例化?
struct X {};
template<typename T, X x> auto f() {
return x;
}
int main() {
auto x = X{};
f<double, x>();
}
【问题讨论】:
它是否是静态的并不重要,重要的是它是否在编译时可用。上面代码中的 x 由于其定义方式而在编译时可用。您可以在constexpr(以及对于函数,consteval)下阅读更多相关信息。
【讨论】:
constexpr,那么它在编译时是如何可用的呢?