С++. Ambiguity resolution

Discussion in 'LANGS.C' started by Necromancer13, Jul 23, 2010.

  1. Necromancer13

    Necromancer13 Виталий

    Blog Posts:
    0
    Joined:
    Oct 26, 2007
    Messages:
    202
    Location:
    Украина, Берегово
    здравствуйте)
    это отрывок из черновика С++-стандарта..
    может какой-то добрый человек, объяснить, как это работает и почему?
    чем отличается int(a) от (int)a? ведь и то и другое вроде бы явное преобразование типа

    Code (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

    Blog Posts:
    0
    Joined:
    Mar 29, 2008
    Messages:
    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

    Blog Posts:
    0
    Joined:
    Jun 23, 2005
    Messages:
    183
    Location:
    Ukraine
    GoldFinch

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

    GoldFinch New Member

    Blog Posts:
    0
    Joined:
    Mar 29, 2008
    Messages:
    1,775
    действительно
     
  5. RedLord

    RedLord Member

    Blog Posts:
    0
    Joined:
    Jun 23, 2005
    Messages:
    183
    Location:
    Ukraine
    Necromancer13
    ничем. функционально.
    только парсер не всегда считает такую запись преобразованием.
     
  6. Necromancer13

    Necromancer13 Виталий

    Blog Posts:
    0
    Joined:
    Oct 26, 2007
    Messages:
    202
    Location:
    Украина, Берегово
    спасибо большое :)