gpt4 book ai didi

c++ - 模板函数参数类型中的模板标识符与 decltype

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

你认为哪个更好?

template <typename T> void func(T x,T y) {}

template <typename T> void func(T x,decltype(x) y) {}

恕我直言,第二种形式似乎更可取,因为 x 和 y 类型之间的链接是明确的,并且至少在重命名模板标识符时,事情似乎不太容易出错。

编辑

第二种形式允许您使用第一个参数使用的子类型调用函数,而第一种形式需要完全相同的类型。这个论点似乎比前一个稍微好一点。

最佳答案

它们在语义上是不同的,所以这取决于你想要实现什么。第二个比第一个限制更多。考虑:

template <typename T> void func1(T x, decltype(x) y) {}
template <typename T> void func2(T x, T y) {}

func1(2., 4); // converts 4 to double
func2(2., 4); // fails to compile

在 SFINAE 上下文中,它会导致不同的编译时行为(不一定是编译错误),并且这两个选项可以间接编译为不同的程序。

关于c++ - 模板函数参数类型中的模板标识符与 decltype,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44651860/

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