我现在正在学习C++,因为我需要编写一些低级程序。C#“var”和C++“auto”之间的区别
当我了解到“auto”关键字时,它提醒我“来自C#的”var“关键字。
那么,C#“var”和C++“auto”有什么区别?它看起来相同,看到他们的功能...
*不完全,但我明白了!感谢您的评论,回复大家!
*我从回答中删除了我的评论,因为我看到了消息“避免消息”谢谢!'“。
*我有很多信息...非常感谢你!
我现在正在学习C++,因为我需要编写一些低级程序。C#“var”和C++“auto”之间的区别
当我了解到“auto”关键字时,它提醒我“来自C#的”var“关键字。
那么,C#“var”和C++“auto”有什么区别?它看起来相同,看到他们的功能...
*不完全,但我明白了!感谢您的评论,回复大家!
*我从回答中删除了我的评论,因为我看到了消息“避免消息”谢谢!'“。
*我有很多信息...非常感谢你!
在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。
那么,汽车可以用更广泛的范围? –
是的,使用C++中的auto,您可以通过强类型检查来构建整个扣分链。 – qub1n
'var'不会影响C#中的性能,因此链接到的示例已损坏,因为'List
它们是等效的。它们都允许你不要自己指定变量的类型,但变量保持强类型。下面的线在C#中是相同的:
var i = 10; // implicitly typed
int i = 10; //explicitly typed
而下面的线是等价的C++:
auto i = 10;
int i = 10;
但是,你应该记住,在C++中正确类型的auto
变量是使用函数调用的模板参数推导规则确定的。
简单来说,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));
,它们都被用于类型推断 – UnholySheep
然后,他们都是相同的技术? –
这两个关键字可以达到相同的效果,只是使用不同的编程语言 – UnholySheep