我現在正在學習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