С++. Ambiguity resolution

Тема в разделе "LANGS.C", создана пользователем Necromancer13, 23 июл 2010.

  1. Necromancer13

    Necromancer13 Виталий

    Публикаций:
    0
    Регистрация:
    26 окт 2007
    Сообщения:
    202
    Адрес:
    Украина, Берегово
    здравствуйте)
    это отрывок из черновика С++-стандарта..
    может какой-то добрый человек, объяснить, как это работает и почему?
    чем отличается int(a) от (int)a? ведь и то и другое вроде бы явное преобразование типа

    Код (Text):
    1. struct S {
    2.   S(int);
    3. };
    4. void foo(double a) {
    5.   S w(int(a)); // function declaration
    6.   S x(int()); // function declaration
    7.   S y((int)a); // object declaration
    8.   S z = int(a); // object declaration
    9. }
     
  2. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    параметр функции может выглядеть не только как
    T x или T
    но и как
    T (x) или T().

    S w(int(a)); эквивалентно S w(int a);
    S w(int()); эквивалентно S w(int);
     
  3. RedLord

    RedLord Member

    Публикаций:
    0
    Регистрация:
    23 июн 2005
    Сообщения:
    183
    Адрес:
    Ukraine
    GoldFinch

    эквивалентно этому:
    S (*w)(int (*)())
     
  4. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    действительно
     
  5. RedLord

    RedLord Member

    Публикаций:
    0
    Регистрация:
    23 июн 2005
    Сообщения:
    183
    Адрес:
    Ukraine
    Necromancer13
    ничем. функционально.
    только парсер не всегда считает такую запись преобразованием.
     
  6. Necromancer13

    Necromancer13 Виталий

    Публикаций:
    0
    Регистрация:
    26 окт 2007
    Сообщения:
    202
    Адрес:
    Украина, Берегово
    спасибо большое :)