Цитата:
Сообщение от Deamon
Майдфак в том, что у функции формальный параметр - класс, а фактический - число. Этот пример демонстрирует автоматическое преведение типов в С++: перед вызовом функции f неявно вызывается конструктор класса A.
|
С++ — статически типизированный язык. Всё верно. Не хотите неявность — укажите это!
http://codepad.org/5WMSbjLr
Таким же образом можно выстрелить себе в ногу в, скажем, строго-типизированном C#:
Код:
public class MainClass
{
struct A
{
public int i;
public static implicit operator A(int a)
{
return new A { i = a };
}
}
static void f(A a)
{
Console.WriteLine("{0}", a.i);
}
public static void Main()
{
f(15);
Console.ReadLine();
}
}