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

标签 c++ function syntax

我在 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 特有的语法?谁能给我这种初始化的名字,方便我查一下?

最佳答案

代码可能成为合法的 C++20。这就是为什么......

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 可能允许将其作为概念提案的一部分,a feature originally planned for 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++ 的“典型”用法。

关于返回参数列表中的 C++ 局部变量(如 CodeFights 中所见),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45401131/

相关文章:

c++ - 如何用非类函数指针调用类成员函数?

c++ - 该算法获取所有字梯的时间复杂度是多少?

c - C中静态函数声明的区别

c++ - 函数引用站点

c# - Sqlite "Update"C#语法错误

c++ - 链表操作的段错误

c++ - 具有嵌套可变参数模板的函数

c++ - Visual C++无法写入exe

javascript - 在javascript中实例化新对象时设置属性值

c - 我在重新定义 "fptr"时遇到问题