gpt4 book ai didi

c++ - 推导的模板 arg 和自动 arg 之间有什么区别吗?

转载 作者:行者123 更新时间:2023-12-03 06:51:31 29 4
gpt4 key购买 nike

这两个函数是否有任何有意义的不同?有什么理由通常更喜欢一个而不是另一个吗?

void foo(auto x, auto &... y) { /* ... */ }

template<typename T, typename... Tx>
void foo(T x, Tx &... y) { /* ... */ }
当我不需要方便的 T 型时,我倾向于使用第一个,因为它更短......但我想知道是否有任何缺点。

最佳答案

在显示的示例中,两个版本之间绝对没有区别。两者都是不受约束的函数模板,它们按值接受 1 个任何类型的参数,然后按引用接受 0 个或多个任何类型的参数。
就我个人而言,和您一样,我更喜欢第一个,因为它打字更少且更易于阅读。

用一种形式替换另一种形式时需要小心,例如替代:

template<typename T>
void foo(T x, T y) { /* ... */ } // #1
void foo(auto x, auto y) { /* ... */ }  // #2 // not equivalent to #1
不正确,因为对 x 没有要求和 y#2 中具有相同的类型,与 #1 不同.

关于c++ - 推导的模板 arg 和自动 arg 之间有什么区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63946645/

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