2017-09-02 7 views
1

Si j'écrire le code comme ceci:Est-ce que "auto" est sûr du dépassement d'entier dans C++ 17?

auto n = 2048 * 2048 * 5; 
char* buf = new char[n]; 

Alors, est-auto type de déduction sûre du débordement d'entier en C++ 17?

+7

'2048 * 2048 * 5' est déduit à' int', peu importe le trop-plein. La déduction ne concerne que les types, pas les valeurs. – Zereges

+0

Je suis curieux, qu'est-ce qui vous amène à poser des questions sur C++ 17 spécifiquement? – Borgleader

+3

@Borgleader C++ 17 est la dernière version de C++. –

Répondre

7

2048 et 5 en C++ ont un type, et ce type est int. La multiplication de deux int a un type et ce type est int. Il y a des valeurs pour lesquelles le résultat ne peut pas tenir dans un int, et auto ne peut pas empêcher cela.

Qu'est-ce que auto peut empêcher un rétrécissement accidentellement le résultat, .: par exemple

short x = 4 * 8192;