Показать сообщение отдельно
Старый 13.08.2011, 21:43   #9
LordJZ
Супер-модератор
 
Аватар для LordJZ
 
Регистрация: 07.03.2010
Сообщений: 647
Сказал(а) спасибо: 100
Поблагодарили 252 раз(а) в 123 сообщениях
LordJZ Как самоцвет среди гранитаLordJZ Как самоцвет среди гранитаLordJZ Как самоцвет среди гранита
По умолчанию

Цитата:
Сообщение от 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();
        }
    }

Последний раз редактировалось LordJZ; 13.08.2011 в 21:55.
LordJZ вне форума   Ответить с цитированием