На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Qraizer, Hsilgos
  
> {} и неопределенность перегрузки функций
    Всем привет. Кто-то может объяснить это с т. з. Стандарта?
    https://ideone.com/KiYNWi
    ExpandedWrap disabled
      #include <iostream>
      #include <string>
      #include <vector>
       
      void f(const std::string& x)
      {
          std::cout << "void f(const std::string& x)";
      }
       
      void f(std::vector<int>* x)
      {
          std::cout << "void f(std::vector<int>* x)";
      }
       
      int main()
      {
          f({});
      }
    Цитата TheMachine @
    т.е. в общем случае вы правы конечно, а мне надо спать больше а пить меньше
      Ну... Имеем две сигнатуры f(), одна принимает l-value const reference, вторая указатель. К первой, согласно Reference binding, может быть применено identical conversion, был бы какой-нибудь r-value типа std::string. Чтобы иметь std::string, нужен подходящий конструктор, принимающий {}. Их два: принимающий const std::string::value_type* и принимающий std::initializer_list<std::string::value_type>. Оба могут быть использованы, но для первого требуется user defined conversion, а второй identity conversion, поэтому отбирается он. Однако он имеет (List-initialization sequence) ранг worst при наличии других одинаково подходящих сигнатур.
      Для второй сигнатуры {} рассматривается как value initialization, которое для указателей является zero initialization как для скалярных. Это identity conversion, которое совпадает с identity conversion для предыдущей сигнатуры, однако, т.к. для той декларируется worst, выбирается т.о. вторая сигнатура.
      Одни с годами умнеют, другие становятся старше.
        Qraizer, спасибо.
        Цитата TheMachine @
        т.е. в общем случае вы правы конечно, а мне надо спать больше а пить меньше
        1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
        0 пользователей:


        Рейтинг@Mail.ru
        [ Script Execution time: 0,0657 ]   [ 15 queries used ]   [ Generated: 11.12.19, 21:53 GMT ]