在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;
}
auto
关键字替代函数模板和特化吗?auto
?std::remove_reference<decltype(arg)>::type
或其他方式更方便。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
}
auto myFunction = [](auto &arg) {...};
- chrisvoid myFunction(auto &arg) {...}
。它的意思是函数myFunction可以接受任何类型的参数,并使用引用进行传递,而无需指定其类型。 - Sadeq