C++ 以自动返回类型作为参数的函数
这是不允许的,因为它包含C++ 以自动返回类型作为参数的函数,c++,C++,这是不允许的,因为它包含auto: void f(auto fp()) { } // error: 'auto' not allowed in function prototype 我们可以显式地将其设置为函数指针,并得到相同的错误: void f(auto (*fp)) { } 现在,如果我们给它一个尾随返回类型: void f(auto fp() -> int) { } 现在没事了。这是合法的,是编译器错误还是疏忽 有趣的是,它不允许我将auto函数指针作为参数 // OK vo
auto
:
void f(auto fp())
{
}
// error: 'auto' not allowed in function prototype
我们可以显式地将其设置为函数指针,并得到相同的错误:
void f(auto (*fp))
{
}
现在,如果我们给它一个尾随返回类型:
void f(auto fp() -> int)
{
}
现在没事了。这是合法的,是编译器错误还是疏忽
有趣的是,它不允许我将auto
函数指针作为参数
// OK
void f(auto f(auto () -> int) -> int)
{
}
// Complain
void f(auto f(auto (*fp) -> int) -> int)
{
}
用于自动类型扣除的
auto
与用于指定尾部返回类型的auto
不同
C++11中的函数参数不支持自动类型推断的auto
但是,C++14及更高版本支持lambda函数参数的auto
。本质上,这将在lambda类型中创建一个模板化的操作符()
你的榜样
void f( auto fp() -> int )
{}
使用尾部返回类型语法指定C++03语法函数
void f( int fp() )
{}
由于作为形式参数类型使用的函数类型的衰减,它等价于
void f( int (*fp)() )
{}
带有函数指针参数。用于自动类型推断的自动
与用于指定尾部返回类型的
不同
C++11中的函数参数不支持自动类型推断的auto
但是,C++14及更高版本支持lambda函数参数的auto
。本质上,这将在lambda类型中创建一个模板化的操作符()
你的榜样
void f( auto fp() -> int )
{}
使用尾部返回类型语法指定C++03语法函数
void f( int fp() )
{}
由于作为形式参数类型使用的函数类型的衰减,它等价于
void f( int (*fp)() )
{}
带有函数指针参数。auto(*fp)
是一个普通指针,函数指针看起来像auto(*fp)(
。对我来说,它看起来像是一个遗漏,因为gnu编译器阻塞了它()。这个问题是由一个无法再复制的问题或一个简单的印刷错误引起的。虽然类似的问题可能在这里的主题,这是一个解决的方式不太可能帮助未来的读者。这通常可以通过识别和仔细检查来避免。@dasblinkenlight请不要使用ideone。它充满了广告,而且他们有一个旧版本的GCC(5.1,尽管现在大多数人都在使用5.3.1或6.1)。@sleeptightpupper请使用adblock,它将广告从ideone上剥离得非常好,以至于我第一次意识到他们的页面有太多广告是在我读到你的评论时。我通常会在右角看到一则非常普通的广告,导致一位非常优秀的在线编程竞赛培训评委。auto(*fp)
是一个普通的指针,函数指针看起来像auto(*fp)(
。对我来说,这看起来像是一个遗漏,因为gnu编译器被这个()。这个问题是由一个无法再复制的问题或一个简单的印刷错误引起的。虽然类似的问题可能在这里的主题,这是一个解决的方式不太可能帮助未来的读者。这通常可以通过识别和仔细检查来避免。@dasblinkenlight请不要使用ideone。它充满了广告,而且他们有一个旧版本的GCC(5.1,尽管现在大多数人都在使用5.3.1或6.1)。@sleeptightpupper请使用adblock,它将广告从ideone上剥离得非常好,以至于我第一次意识到他们的页面有太多广告是在我读到你的评论时。我通常会在右角看到一则非常温和的广告,引来一位非常优秀的在线编程竞赛培训评委。