我现在正在学习C++,因为我需要写一些低级的程序。
当我了解到"auto“关键字时,它让我想起了来自C#的"var”关键字。
那么,C# "var“和C++ "auto”有什么区别呢?
发布于 2016-11-24 17:06:03
在C#变量中,关键字只在函数内部局部起作用:
var i = 10; // implicitly typed 在C++ auto keyword can deduce中,不仅在变量中键入,而且在函数和模板中键入:
auto i = 10;
auto foo() { //deduced to be int
return 5;
}
template<typename T, typename U>
auto add(T t, U u) {
return t + u;
}从性能的角度来看,auto keyword in C++ does not affect runtime performance。和var关键字does not affect runtime performance as well。
另一个不同之处在于IDE对intellisense的支持。C#中的Var关键字可以很容易地推断出来,您可以通过鼠标悬停来查看类型。在C++中使用auto关键字可能会更复杂,这取决于集成开发环境。
发布于 2016-11-24 21:38:15
简单地说,auto是比var复杂得多的野兽。
首先,auto可能只是推导出的类型的一部分;例如:
std::vector<X> xs;
// Fill xs
for (auto x : xs) x.modify(); // modifies the local copy of object contained in xs
for (auto& x : xs) x.modify(); // modifies the object contained in xs
for (auto const& x : xs) x.modify(); // Error: x is const ref其次,auto可以用于一次声明多个对象:
int f();
int* g();
auto i = f(), *pi = g();第三,在函数声明中,auto被用作尾随返回类型语法的一部分:
template <class T, class U>
auto add(T t, U u) -> decltype(t + u);它也可以用于函数定义中的类型推导:
template <class T, class U>
auto add(T t, U u) { return t + u; }第四,将来可能会开始使用它来声明函数模板:
void f(auto (auto::*mf)(auto));
// Same as:
template<typename T, typename U, typename V> void f(T (U::*mf)(V));发布于 2016-11-24 16:43:38
它们是等效的。它们都允许您不必自己指定变量的类型,但变量仍然是强类型的。以下几行在c#中是等效的:
var i = 10; // implicitly typed
int i = 10; //explicitly typed 下面这几行在c++中是等效的:
auto i = 10;
int i = 10;然而,,您应该记住,在c++中,auto变量的正确类型是使用函数调用的模板参数推导规则确定的。
https://stackoverflow.com/questions/40781475
复制相似问题