如何通过 constexpr 表达式调用 returns void 的 constexpr 函数?
How to call a constexpr function which returns void by a constexpr expression?
调用 test
编译失败但 test1
成功
constexpr void test(int n)
{
return;
}
constexpr int test1(int n)
{
return n;
}
int main()
{
constexpr test(5); // Failed
constexpr (test)(5); // Also failed
constexpr auto n = test1(5); // OK
return 0;
}
我可能误用了某些东西,或者这不是真实案例。请帮忙解释一下。我在 SO
上找不到相同的问题
输出:
<source>: In function 'int main()':
<source>:14:15: error: ISO C++ forbids declaration of 'test' with no type [-fpermissive]
14 | constexpr test(5); // Failed
| ^~~~
<source>:15:16: error: ISO C++ forbids declaration of 'test' with no type [-fpermissive]
15 | constexpr (test)(5); // Also failed
| ^~~~
您使用了错误的语法。编译器感到困惑,因为它期望您要声明一个名为 test
的变量,并抱怨说您不能在不声明其类型的情况下这样做。这是编译器所期望的:
constexpr int test(5); // OK
constexpr int (test_x)(5); // also OK
这就是您真正想要的:
test(5);
(test)(5); // ok, but unusual to put the () here
您无需明确声明您正在调用 constexpr
方法。 constexpr
是声明的一部分,而不是函数调用的一部分。
调用 test
编译失败但 test1
成功
constexpr void test(int n)
{
return;
}
constexpr int test1(int n)
{
return n;
}
int main()
{
constexpr test(5); // Failed
constexpr (test)(5); // Also failed
constexpr auto n = test1(5); // OK
return 0;
}
我可能误用了某些东西,或者这不是真实案例。请帮忙解释一下。我在 SO
上找不到相同的问题输出:
<source>: In function 'int main()':
<source>:14:15: error: ISO C++ forbids declaration of 'test' with no type [-fpermissive]
14 | constexpr test(5); // Failed
| ^~~~
<source>:15:16: error: ISO C++ forbids declaration of 'test' with no type [-fpermissive]
15 | constexpr (test)(5); // Also failed
| ^~~~
您使用了错误的语法。编译器感到困惑,因为它期望您要声明一个名为 test
的变量,并抱怨说您不能在不声明其类型的情况下这样做。这是编译器所期望的:
constexpr int test(5); // OK
constexpr int (test_x)(5); // also OK
这就是您真正想要的:
test(5);
(test)(5); // ok, but unusual to put the () here
您无需明确声明您正在调用 constexpr
方法。 constexpr
是声明的一部分,而不是函数调用的一部分。