Различия между C#" var "и C++" auto"
Я изучаю C++ сейчас, потому что мне нужно написать несколько программ низкого уровня.
когда я узнал о ключевом слове "auto", это напоминает мне ключевое слово" var " из C#.
Итак, каковы различия C# "var" и C++ "auto"?
3 ответов
в C# var ключевое слово работает только локально внутри функции:
var i = 10; // implicitly typed
В C++ ключевое слово auto можно вывести тип не только переменные, но и функции и шаблоны:
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 в C++ не влияет на производительность. И VAR ключевое слово не влияет на производительность, а также.
другое отличие может заключаться в поддержке intellisense в IDE. Ключевое слово Var в C# может быть легко выводится, и вы увидите тип с помощью мыши. С ключевым словом auto в C++ это может быть сложнее, это зависит от IDE.
, чтобы положить вещи просто, 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));
они эквивалентны. Они оба позволяют вам не указывать тип переменной самостоятельно, но переменная остается строго типизированной. Следующие строки эквивалентны в c#:
var i = 10; // implicitly typed
int i = 10; //explicitly typed
и следующие строки эквивалентны в C++:
auto i = 10;
int i = 10;
, вы должны иметь в виду, что в C++ правильно типа auto
переменная определяется с использованием правил вывода аргумента шаблона для вызова функции.