我现在正在学习C ++,因为我需要编写一些低级程序。
当我了解" auto"关键字,它提醒我" var"关键字,来自C#。
那么,C#" var"的区别是什么?和C ++" auto"?
答案 0 :(得分:21)
在C#中,var关键字仅在函数内部工作:
var i = 10; // implicitly typed
在C ++中,自动关键字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 performance。并且var关键字does not affect performance as well。
另一个区别在于IDE中的intellisense支持。可以很容易地推断出C#中的Var关键字,你会看到鼠标悬停的类型。使用C ++中的auto关键字可能会更复杂,它取决于IDE。
答案 1 :(得分:8)
简单地说,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));
答案 2 :(得分:6)
它们是等价的。它们都允许您不自己指定变量的类型,但变量保持强类型。以下行在c#中是等效的:
var i = 10; // implicitly typed
int i = 10; //explicitly typed
以下几行在c ++中是等效的:
auto i = 10;
int i = 10;
但是,您应该记住,在c ++中,auto
变量的正确类型是使用函数调用的模板参数推导规则来确定的。