在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);