gpt4 book ai didi

c++ - `typename std::remove_reference`和 `constexpr typename std::remove_reference`有什么区别?

转载 作者:行者123 更新时间:2023-12-02 09:53:50 27 4
gpt4 key购买 nike

根据文档(https://en.cppreference.com/w/cpp/utility/move),std::move<T>有两种构造函数,在下面发布。

这些构造函数之间有什么区别?
最让我困惑的是,为什么在第二个构造函数中需要关键字(typename)。

我是C++的新手。对于这个问题的任何提示,我将不胜感激。

template< class T >
typename std::remove_reference<T>::type&& move( T&& t ) noexcept; (since C++11)(until C++14)

template< class T >
constexpr typename std::remove_reference<T>::type&& move( T&& t ) noexcept; (since C++14)

最佳答案

[...] there are two kinds of constructors for std::move<T>...



不,它们不是构造函数,而是 std::move的函数签名。一个在 之前(即,自 开始),第二个在C++ 14之后。

在第二个中 specifier constexpr is used,意思是

constexpr - specifies that the value of a variable or function can appear in constant expressions



在这里阅读更多: What are 'constexpr' useful for?

What confused me most is that why there needs the keyword(typename) in the second constructor.



根据 cppreference.com,存在 std::remove_reference的帮助程序类型,因为
template< class T >
using remove_reference_t = typename remove_reference<T>::type; (since C++14)

因此在第二个中,可能是
template< class T >
constexpr std::remove_reference_t<T>&& move( T&& t ) noexcept;
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^

关于c++ - `typename std::remove_reference<T>`和 `constexpr typename std::remove_reference<T>`有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62057431/

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