Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C++;? < C++中缩写函数的状态是什么?四处搜索,我看到一些关于它的C++概念。同时,GCC似乎对类似这样的代码没有问题 #包括 自动foo(自动x){ std::cout_C++_C++14_C++17 - Fatal编程技术网

在C++;? < C++中缩写函数的状态是什么?四处搜索,我看到一些关于它的C++概念。同时,GCC似乎对类似这样的代码没有问题 #包括 自动foo(自动x){ std::cout

在C++;? < C++中缩写函数的状态是什么?四处搜索,我看到一些关于它的C++概念。同时,GCC似乎对类似这样的代码没有问题 #包括 自动foo(自动x){ std::cout,c++,c++14,c++17,C++,C++14,C++17,看起来您正在尝试创建一个模板函数,至少看起来您需要一个:) 模板 void foo(X X){ std::cout我想你要问的是缩写函数模板。你链接到的文档是这样定义的: 如果自动类型说明符出现在函数声明的参数类型中,则函数声明将声明一个缩写函数模板。例如:void f(const auto&,int); 这意味着该示例将转化为: template <typename T> void f(const T&, int); 模板 空f(常数T和int); C++14标准正在变

看起来您正在尝试创建一个模板函数,至少看起来您需要一个:)

模板
void foo(X X){

std::cout我想你要问的是缩写函数模板。你链接到的文档是这样定义的:

如果自动类型说明符出现在函数声明的参数类型中,则函数声明将声明一个缩写函数模板。例如:
void f(const auto&,int);

这意味着该示例将转化为:

template <typename T>
void f(const T&, int);
模板
空f(常数T和int);
C++14标准正在变得越来越成熟。例如:
auto lambda=[](auto x,auto y){return x+y;};
但是我没有看到任何关于“通用lambda”功能将扩展到传统函数的说法

与之不同,将作为单独的技术规范发布:

看来,概念技术规范的下一个障碍是


您可以在此处阅读更多有关概念技术规范的内容:

不,在C++14标准中没有这样的内容。您甚至可以自己登录。这将由概念TS添加。请注意,它还允许您编写类似于
auto foo(std::vector const&v)的内容
-毕竟,模板参数推断规则和
自动
规则是相同的-模初始值设定项列表。似乎您回答了自己的问题:它们不在当前标准中,但在概念提案中。过去有一个很接近的原因是“太本地化”,因此这个问题应该结束。没有可以接受的明确答案,“当前状态”可以随每次WG21会议而变化。@mAlters:我不知道这是否完全公平。基本上,我正在尝试了解这是否只是GCC中的一个扩展,或者它是否预定在C++17或更高版本的标准中。是的,事情可以改变,但我不确定事情目前在哪里。编译器会像它一样知道类型oes当您使用多态lambda时:通过将
foo()
转换为函数模板:)是的,问题中的缩写函数模板等同于该模板(
auto
,就像在C++14多态lambda中一样,被推导为模板参数)但你还没有回答这个问题:他们在C++标准和普通C++编译器方面的现状是什么?我读到当前的草案时肯定错过了这一部分:这是一个很长的准备工作,所以最早的是C++ 17。但是老实说,我相信有人有更精确的答案:,它是为ballot@Cubbi非常感谢您的更新!我正在查看阵列扩展技术规范,您是否也了解该规范的状态?
template <typename X>
void foo(X x) {
    std::cout << x << std::endl;
}
template <typename T>
void f(const T&, int);