auto ile tip atama

auto, beraberinde tanımlandığı değişkene, atandığı değerin tipini atar. C++11 ile dile eklenmiştir ve C#‘taki var anahtar sözcüğüne benzetilebilir.

auto b     = false; // bool
auto i 	   = 24; // int
auto d     = 21.333; // double
auto s1    = "hello"; // const char *
auto s2    = "hello"s; // std::string
auto v 	   = std::vector<int> { 1, 2 ,3 }; // std::vector<int> 
auto p     = std::make_shared<int>(32); // std::shared_ptr<int>
auto max   = [] (const int& x, const int& y) { return x > y ? x : y; }; // lambda fonksiyon

ayrıca uzun tipleri daha kolay tanımlamada kullanılabilir:

vector <string> parts;

parts.push_back("keyboard");
parts.push_back("mouse");

for (vector<string>::iterator it = parts.begin(); it != parts.end(); ++it)
	cout << *it

kod auto anahtar sözcüğüyle

for (auto it = parts.begin(); it != parts.end(); ++it)
	cout << *it

şeklinde sadeleşebilir.

C++14 ile birlikte üye fonksiyonların dönüş tipini auto yapabiliriz:

class Book {
       private:
	std::string m_name{};
	std::string m_author{};

       public:
	Book() = default;
	Book(const std::string& t_name, const std::string& t_author) {
		this->m_name = t_name;
		this->m_author = t_author;
	}

	auto name() { return m_name; }
	auto author() { return m_author; }
	auto bookInfo() { return m_name + " by " + m_author; }
};

C++14 ile birlikte lambda fonksiyonların argümanları auto olabilir:

auto cmp = [](const auto& x, const auto& y) { return x > y ? 1 : x == y ? 0 : -1; };

auto‘ya yönelik bir eleştiri kodun okunurluğunu azalttığı yönündedir ve kullanılıp kullanılmayacağı, büyük projelerin kodlama kılavuzunda (coding guideline) belirtilir.