C#" var"之间的差异和C ++" auto"

时间:2016-11-24 08:40:12

标签: c# c++ var auto

我现在正在学习C ++,因为我需要编写一些低级程序。

当我了解" auto"关键字,它提醒我" var"关键字,来自C#。

那么,C#" var"的区别是什么?和C ++" auto"?

3 个答案:

答案 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)

简单地说,autovar要复杂得多。

首先,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变量的正确类型是使用函数调用的模板参数推导规则来确定的。