gpt4 book ai didi

c++ - 为什么不允许 constexpr 局部变量作为默认函数参数?

转载 作者:行者123 更新时间:2023-12-03 21:42:59 25 4
gpt4 key购买 nike

我想我明白为什么 C++ 不允许局部变量作为默认函数参数:

int main () {
auto local{1024};
auto lambda = [](auto arg1 = local){}; // "illegal use of local variable as default parameter"
}
但即使该变量是 constexpr 本地变量也是不允许的:
int main () {
constexpr auto local{1024};
auto lambda = [](auto arg1 = local){}; // "illegal use of local variable as default parameter"
}
但是,允许使用全局变量(即使是非 constexpr):
int global;
int main () {
auto lambda = [](int arg1 = global){}; // OK
}
有人可以解释在这种情况下不允许使用 constexpr 局部变量的理由吗?当默认值是固定的并且在编译时已知时,编译器似乎应该能够为函数构造适当的“默认参数”重载。

最佳答案

这是一个关于生命周期的问题。让我们将您的功能修改为

auto get_functor() {
constexpr auto local{1024};
return [](auto arg1 = local){}; // "illegal use of local variable as default parameter"
}
现在,在 get_functor的调用站点,你会得到一个 lambda,它的默认值是一个不再存在的对象的值。由于每次调用函数时都会评估默认参数,而相应参数没有参数,因此您需要初始化表达式在所有范围内都有效。

关于c++ - 为什么不允许 constexpr 局部变量作为默认函数参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66325200/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com