在返回参数列表中C++局部变量(如CodeFights所示)
C++ local variables in return argument list (as seen on CodeFights)
我已经在 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';
}
这意味着,虽然代码是半正确的或将来可能是正确的,但注释不是,因为i
、j
和w
不是局部变量,它们没有初始化为 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) {
^
相关文章:
- 如何从C++中的依赖类型中获得它所依赖的类型
- 有什么方法可以将元素添加到列表中,如图所示?
- 如何将字符串转换为整数,如下所示
- 如何使用 2D 数组构建如下所示的坐标系?C++
- 带有自定义类的共享指针语法背后的任何原因,如下所示
- 在返回参数列表中C++局部变量(如CodeFights所示)
- 所需的输出为66.6,但我会得到giber虫(如下所示),如何解决此问题
- 二进制文件中的某些数据如图所示,并以奇怪的方式显示OS
- 如何从如下所示的文件中读取特定数据
- 为什么我无法访问静态函数中的私有构造函数,如下所示?
- 我如何在 c++ 中执行随机结果,如下所示的代码
- 我正在尝试用 DevC++ 编译一个套接字程序,但每次我这样做时,我都会收到很多链接器错误,如下所示:
- 用c++编写一个程序,输出一个矩阵,如下所示
- 如何更改模板实例化的外观,如std::函数中所示
- 从QWidget获取对象名称(如Qt Designer中所示)
- 所示方法的含义
- 可以将它分配给构造函数中的静态指针吗,如这里的示例所示
- 为什么在尝试读取数字和非数字混合输入时有些字符串会被截断,如下面的代码所示
- 如何在所示代码中对类的两个数据成员数组进行排序
- QGLWidget不显示如图所示的对象