В стандарте языка говорится, что десятичный целочисленный литерал без суффикса должен иметь первый тип из списка: int
, long int
, long long int
, который может представить значение этого литерала.
Однако, попытка компиляции такого кода:
int a = -2147483648;
в MS Visual Studio 2010 с 32-битными int
'ом и long
'ом, и 64-битным long long
'ом приводит к появлению предупреждения "C4146: unary minus operator applied to unsigned type, result still unsigned".
Справка, говорит, что литерал 2147483648
, слишком велик, чтобы поместиться в int
, и потому он имеет тип unsigned int
. Но ведь согласно стандарту в данной ситуации литерал 2147483648
должен иметь тип long long
!
Почему в довольно таки простой ситуации в Visual Studio реализовано поведение, прямо противоречащее стандарту???
Исправлено ли это в более поздних версиях Visual Studio?
Такое поведение распространено среди других компиляторов?
gcc version 7.1.0 при таком коде
#include <iostream>
template<typename T>
void getType(T t){
std::cout << "T" << std::endl;
}
void getType(int t){
std::cout << "int" << std::endl;
}
void getType(unsigned int t){
std::cout << "unsigned int" << std::endl;
}
void getType(long int t){
std::cout << "long int" << std::endl;
}
int main(){
int a = -2147483648;
getType(a);
getType(-2147483648);
return 0;
}
выдает
int
long int
без всяких варнингов
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Не уверен, что правильно сделал, но все же данные не сохраняются в txt файл их загрузка вроде как происходит (диск у курсора, VS 2015), но открывая...
У Егора есть взвешенный ориентированный граф, состоящий из n вершинВ этом графе между любой парой различных вершин есть ребро в обоих направлениях
Почему все элементы выводтся в столбецЕсли мы сначала в i кладем vector