在返回参数列表中C++局部变量(如CodeFights所示)

C++ local variables in return argument list (as seen on CodeFights)

本文关键字:CodeFights 所示 局部变量 C++ 返回 参数 列表      更新时间:2023-10-16

我已经在 CodeFights.com 上看到了这种形式的语法,用于C++函数:

int i,j,w,myFunction(auto s, auto v) {
// here, i, j,and w are local variable, apparently initialized to 0 
// all work done inside this function is typical, legal C++
return [some int value];
}

我一直在网络上搜索以识别此语法,但我无法识别。 这是法律C++还是 CodeFights 特有的语法? 有人可以给我这种初始化的名称,以便我可以查找它吗?

该代码可能会在 20 C++成为合法代码。原因如下...

C++年C声明遗产的一个怪癖是多个声明可以在一条线上进行。

int a, b, c;

如您所知,您可以向组合添加指针和引用,保留"基本"类型:

int a, *b, &c = x;

将此语法怪癖扩展到函数声明也是合法的。下面声明f为返回int的函数:

int a, b, c, f();

给定适当的上下文,您甚至可以在同一行上定义函数:

struct S {
int a, b, c, f() { return 0; }
};

当然,您可以向函数添加参数:

struct S {
int a, b, c, f(float x, double y) { return x + y; }
};

最后一步是将这些参数类型转换为auto,C++20 可能允许作为概念提案的一部分,这是最初计划在 C++17 中使用的功能。

GCC 已支持此语法作为扩展。下面是一个完整的示例:

#include <iostream>
struct S {
int a, b, c, f(auto x, auto y) { return x + y; }
};
int main()
{
S s;
std::cout << s.f(1.0, 2.0) << 'n';
}

这意味着,虽然代码是半正确的或将来可能是正确的,但注释不是,因为ijw不是局部变量,它们没有初始化为 0。

这也肯定不是C++的"典型"使用。

先尝试编译它,然后再问!

prog.cc:1:38: error: a function-definition is not allowed here before '{' token
int i,j,w,myFunction(auto s, auto v) {
^