gpt4 book ai didi

c++ - 推导指南中的引用和值之间的差异

转载 作者:太空狗 更新时间:2023-10-29 21:11:11 26 4
gpt4 key购买 nike

考虑类型A :

template <typename T, size_t N>
struct A
{
T arr[N];
};

C++17用户定义的deduction guides有什么区别吗?

template <typename T, typename ... Ts>
A(const T&, const Ts& ...) -> A<T, 1 + sizeof...(Ts)>;

template <typename T, typename ... Ts>
A(T, Ts ...) -> A<T, 1 + sizeof...(Ts)>;

?

或者换句话说,const 引用和推导指南中的值之间有什么区别吗?


请注意,问题不是关于模板函数类型推导,而是关于新的 C++17 功能,类模板参数推导的用户定义推导指南,因此您可以简单地声明 A instance{1,2,3}而不是 A<int, 3> instance{1,2,3} .

最佳答案

Or, in other words is there any difference between const references and values in deduction guides?

在你的情况下可能不是,但一般来说,是的。

T不可复制。

在下面的示例中,第一种情况(const 引用)编译接收 std::unique_ptr<int> ,第二个(值)给出错误

#include <iostream>
#include <memory>

template <typename T, size_t N>
struct A
{ template <typename ... Ts> A (Ts const & ...) {} };

template <typename T, size_t N>
struct B
{ template <typename ... Ts> B (Ts const & ...) {} };

template <typename T, typename ... Ts>
A(T const &, Ts const & ...) -> A<T, 1U + sizeof...(Ts)>;

template <typename T, typename ... Ts>
B(T, Ts ...) -> B<T, 1 + sizeof...(Ts)>;


int main()
{
std::unique_ptr<int> up;

auto a = A{up}; // compile
// auto b = B{up}; // doesn't compile
}

关于c++ - 推导指南中的引用和值之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51235025/

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