Различия между 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 переменная определяется с использованием правил вывода аргумента шаблона для вызова функции.