gpt4 book ai didi

c++ - constexpr 函数及其参数

转载 作者:行者123 更新时间:2023-11-30 01:37:13 29 4
gpt4 key购买 nike

constexpr int hello(int j) {
return j * 12;
}

constexpr int bye(int j = 6) {
return j * 12;
}

int main() {
int i = 6;
constexpr int a1 = hello(i); //error
constexpr int a2 = hello(6); //ok
constexpr int a3 = hello(int(6)); //ok
constexpr int a4 = bye(); //ok
constexpr int a5 = bye(i); //error
constexpr int a6 = bye(6); //ok
return 0;
}

hello(i)hello(6) 有什么区别?我认为一个是 int j = i; 并且 j 不是一个 constexpr,而另一个是 int j = 6 并且 j 仍然不是一个 constexpr,两个 j 都是 int 类型。
int * literal != constexpr,因此返回类型不是 constexpr。

我从书中的一个例子得出了以上结论:
int staff_size = 27;//staff_size 不是 const 表达式

Although staff_size is initialized from a literal, it is not a constant expression because it is a plain int, not a const int.

此外,我注意到 hello(int(6)) 也工作正常,这里的“东西”是什么?

此外,bye() 有效而 hello(i) 无效,两个参数都在函数内部初始化,只有一个具有默认值,这里有什么意义?

很困惑,希望有人能解释一下:D

PS:想不出更好的标题,抱歉

最佳答案

hello(6)hello(i)的区别在于hello(6)中的6 code> 是一个 constexpr 函数参数,而 hello(i) 中的 i 是一个常规的 int 参数.

如果您将i声明为constexpr int i = 6;,那么hello(i)将编译并执行。

hello(int(6)) 中,您说的是将整数文字 6 转换为 int。这是一个多余的操作。 hello(int(6))hello(6) 将具有相似的行为,即使不完全相同。

bye() 有效,因为函数参数使用默认参数(constexpr int bye(int j = 6) 中的 j = 6);)。默认的初始化参数在编译时已知,因此根据定义是 constexpr

关于c++ - constexpr 函数及其参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50077600/

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