gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:59:51 25 4
gpt4 key购买 nike

我在 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/

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