Помислете за следния код:
#include <iostream>
void foo(int m);
void foo(int &k);
int main()
{
foo(5); // ok, because there is no ambiguity
int m = 5;
//foo(m); // compile-time error, because of ambiguity
foo(m + 0); // ok, because it's an expression of type int and not object's lvalue
}
void foo(int m)
{
std::cout << "by value\n";
}
void foo(int &k)
{
std::cout << "by reference\n";
}
Разбирам, че въвежда двусмислие за foo(m)
, но позволено ли е това, когато изразът е от тип int
(или друг, който може да се преобразува в int
)?
Опитах се да намеря някаква стандартна справка за това, но без успех.
Отказ от отговорност: Имайте предвид, че не е дубликат на Претоварване на функции въз основа на стойност спрямо препратка към константа. Препратките const
са различни, тъй като могат да бъдат присвоени с rстойности, за разлика от „обикновените“, не-const
препратки.
m
също е израз от типint
. - person Kerrek SB   schedule 16.07.2015