Здравствуйте, blacksun, Вы писали:
B>В MSVC++ 2010 на печать уходит "func1(int)"
B>Почему??
B>На основании чего был сделан выбор в пользу int?
На основании стандарта (2.13.1/2):
The type of an integer literal depends on its form, value, and suffix. If it is decimal and has no suffix, it has the first of these types in which its value can be represented: int, long int; if the value cannot be represented as a long int, the behavior is undefined
В MSVC++ 2010 на печать уходит "func1(int)"
Почему??
На основании чего был сделан выбор в пользу int?
#include <iostream>
void func1(long n)
{
std::cout << "func1(long)" << std::endl;
}
void func1(int n)
{
std::cout << "func1(int)" << std::endl;
}
int _tmain(int argc, _TCHAR* argv[])
{
func1(555);
return 0;
}
Здравствуйте, blacksun, Вы писали:
B>В MSVC++ 2010 на печать уходит "func1(int)"
B>Почему??
B>На основании чего был сделан выбор в пользу int?
B>B>void func1(long n)
B>void func1(int n)
B> func1(555);
B>
тип целочисленного литерала '555' int, поэтому выбирается функция принимающая int. см. стандарт [2.14.2] про тип целочисленных литералов и главу 13 про перегрузки.
Здравствуйте, blacksun, Вы писали:
B>В MSVC++ 2010 на печать уходит "func1(int)"
B>Почему??
B>На основании чего был сделан выбор в пользу int?
B>B>#include <iostream>
B>void func1(long n)
B>{
B> std::cout << "func1(long)" << std::endl;
B>}
B>void func1(int n)
B>{
B> std::cout << "func1(int)" << std::endl;
B>}
B>int _tmain(int argc, _TCHAR* argv[])
B>{
B> func1(555);
B> return 0;
B>}
B>
Все целые числа по стандарту автоматически имеют тип int (long int), если иного явно не указано. Думаю вам еще заодно надо прочитать про explicit и implicit вызовы, а так же про explicit конструкторы, тогда вам все станет понятней...