函数模板与自动关键字
Function Templates vs. Auto Keyword
C++11中的auto
关键字能否取代函数模板和专业化?如果是,那么与简单地将函数参数键入为auto
相比,使用模板函数和专业化有什么优势?
template <typename T>
void myFunction(T &arg)
{
// ~
}
与。
void myFunction(auto &arg)
{
// ~
}
简而言之,auto
不能用于省略实际类型的函数参数,因此请使用函数模板和/或重载。auto
在法律上用于自动推导变量的类型:
auto i=5;
但是,要非常小心地理解以下之间的区别:
auto x=...
auto &x=...
const auto &x=...
auto *px=...; // vs auto px=... (They are equivalent assuming what is being
// assigned can be deduced to an actual pointer.)
// etc...
它也用于后缀返回类型:
template <typename T, typename U>
auto sum(const T &t, const U &u) -> decltype(t+u)
{
return t+u;
}
C++11中的
auto
关键字能否取代函数模板和专业化?
没有。有人建议为此目的使用关键字,但它不在C++11中,我认为C++14只允许它用于多态lambda,而不允许它用于函数模板。
如果是,那么与简单地将函数参数键入为
auto
相比,使用模板函数和专业化有什么优势。
如果要引用类型,则可能仍然需要命名模板参数;这将比CCD_ 7或其它更方便。
使其成为auto
关键字与template
关键字不同的唯一原因是,不能使用auto
关键字创建泛型类。
class B { auto a; auto b; }
当您创建上述类的对象时,它会给您一个错误。
B b; // Give you an error because compiler cannot decide type so it can not be assigned default value to properties
而使用模板,您可以创建这样的泛型类:
template <class T>
class B {
T a;
};
void main() {
B<int> b; //No Error
}
相关文章:
- 当函数模板参数是具有默认参数的类模板时,函数模板参数的推导如何执行
- 将重载的成员函数传递给函数模板
- C++17中函数模板中的静态数组初始化(MSVC 2019)
- 为什么 gcc 和 clang 为函数模板的实例化生成不同的符号名称?
- 具有常量引用参数的函数模板专用化
- std::span<const T> 作为函数模板中的参数
- 如何编写一个完美的缩写函数模板?
- 仅在函数模板中为那些定义了函数的类型执行函数
- 如何在C++中伪造虚拟可变参数函数模板?
- 以下代码中的函数模板有什么问题?
- 在 C++20 中是否不再允许在 std 中对程序定义类型的函数模板进行专用化?
- 将显式实例化的函数模板与转换匹配
- 使用定义函数模板别名
- 函数模板返回类型
- C++有什么方法可以在既不调用函数模板也不提供其模板参数的情况下引用函数模板?
- C++ std::functional 中的可变参数函数模板
- 单行函数模板 c++ 的内联性保证
- 没有类关键字的模板函数
- 函数模板与自动关键字
- 使用friend关键字查找模板函数