شاید برای بعضی به اشتباه این نوع تعریف با مفهوم متغیر های داینامیک که در زبان های اسکریپتی وجود دارد همسان به نظر بیاید ولی از این خبر ها نیست و شما قادر به تغیر نوع پس از تعریف متغیر نیستید .

چند مثال کاربردی تر در استفاده همراه سایر ساختار های داده ای :

std::map<std::string, std::vector<int>> map;
for(auto it = begin(map); it != end(map); ++it) 
{
}

البته نمی توان از auto به عنوان نوع داده بازگشتی یک تابع به صورت مستقیم استفاده کرد .اما می توان auto را به عنوان نوع بازگشتی استفاده کرده و در اعلان برنامه مشخص نمود که نوع بازگشتی تابع در اصل از چه نوع داده ای است (با استفاده از decltype)

template <typename T1, typename T2>
auto compose(T1 t1, T2 t2) -> decltype(t1 + t2)
{
   return t1+t2;
}
auto v = compose(2, 3.14); // v's type is double

 nullptr

در زبان C و ++C عبارت NULL بیانگر مقدار 0 بود و از آن برای مشخص کردن اشاره گر های که به جای خاصی اشاره نمی کنند و اشیای که فاقد داده هستند استفاده می شود در استاندارد جدید با استفاده از کلمه کلیدی nullptr می توان همین عمل را انجام داد ولی باید توجه داشت که NULL یک نوع داده صحیح و nullptr به صورت بولین تعریف شده است 

void foo(int* p) {}

void bar(std::shared_ptr<int> p) {}

int* p1 = NULL;
int* p2 = nullptr;   
if(p1 == p2)
{
}

foo(nullptr);
bar(nullptr);

bool f = nullptr;
int i = nullptr; // error: A native nullptr can only be converted to bool or, using reinterpret_cast, to an integral type

پیمایش ساختار های داده ای با استفاده از for به صورت ساده تر:

for each جزو دستوراتی است که در حال حاظر اکثر زبان های برنامه نویسی برای استفاده از ساختار های داده ای مانند ارایه ها و ... از آن استفاده می کنند که در استاندارد جدید ++C هم راهی برای استفاده و پیمایش راحت تر این ساختار ها با استفاده از همان دستور for در نظر گرفته است که کار با ساختار های داده ای که در ان خیلی با ایندکس کار نداریم را راحت تر کرده است

std::map<std::string, std::vector<int>> map;
std::vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
map["one"] = v;

for(const auto& kvp : map) 
{
  std::cout << kvp.first << std::endl;

  for(auto v : kvp.second)
  {
     std::cout << v << std::endl;
  }
}

int arr[] = {1,2,3,4,5};
for(int& e : arr) 
{
  e = e*e;
}