gpt4 book ai didi

c++ - 为什么从 void 函数模板返回时没有出现编译器错误?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:54:50 24 4
gpt4 key购买 nike

考虑:

void f() {
return 5;
}

以上会引发错误。但为什么不呢?:

template <typename = void> void f() {
return 0;
}

我正在使用 gcc-4.5.1 进行编译。为什么使用模板会有所不同,这样我就不会因为执行与非模板函数相同的非法返回语句而收到错误?我遇到的唯一挫折是我无法在不获取以下内容的情况下调用函数(即 f()):

error: return-statement with a value, in function returning 'void'

但是,我能够为 void 函数模板定义 return 语句的原因可能是什么?

这是我的代码:

template <typename = void> void f() {
return 0;
}

// pass

int main() {



}

尽管在函数中返回 void 的 return 语句可能是非法的,但上面的代码将通过。

最佳答案

大多数检查仅在您实例化模板时完成。

这通常是一件好事,因为代码可以很好地处理一种模板参数,但无法编译另一种模板参数。如果你有模板重载,编译器甚至会忽略编译失败的候选者,参见 SFINAE .

关于c++ - 为什么从 void 函数模板返回时没有出现编译器错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13255826/

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