Почему делает заключенное в кавычки строковое соответствие bool сигнатура метода перед станд.:: строка?

для навигации по каталогам quicky существует $CDPATH, cdargs, и способы генерировать псевдонимы автоматически

http://jackndempsey.blogspot.com/2008/07/cdargs.html

http://muness.blogspot.com/2008/06/lazy-bash-cd-aliaes.html

https://web.archive.org/web/1/http://articles.techrepublic%2ecom%2ecom/5100-10878_11-5827311.html

14
задан Beau Simensen 19 July 2009 в 02:36
поделиться

3 ответа

Я предполагаю, что преобразование из указателя в bool является неявным преобразованием примитивного типа, где преобразование в std :: string требует вызова конструктора и создания временного объекта.

14
ответ дан 1 December 2019 в 09:13
поделиться

В вашем случае у вас есть перегруженные функции. Разрешение перегрузки происходит в соответствии с Разделом 13.3.

C ++ 03 13.3.3.2/2:

При сравнении основных форм неявных последовательностей преобразования (как определено в 13.3.3.1)
- стандартная последовательность преобразования (13.3.3.1.1) является лучшей последовательностью преобразования, чем определяемая пользователем последовательность преобразования или последовательность преобразования с многоточием, и
- определяемая пользователем последовательность преобразования (13.3.3.1.2) является лучшей последовательностью преобразования, чем последовательность преобразования с многоточием (13.3.3.1.3).

Указатель преобразования в bool является стандартным преобразованием. Указатель преобразования в std :: string - это определяемое пользователем преобразование.

4.12 Логические преобразования R-значение арифметики, перечисления, указателя или указателя на тип элемента можно преобразовать в r-значение типа bool . Нулевое значение, значение нулевого указателя или значение указателя нулевого члена преобразуется в ложное; любое другое значение преобразуется в истину.

9
ответ дан 1 December 2019 в 09:13
поделиться

Указатели имеют неявное преобразование в bool . Возможно, вы видели следующее:

void myFunc(int* a)
{
    if (a)
        ++(*a);
}

Теперь в C ++ неявные преобразования между встроенными типами имеют приоритет над преобразованиями между типами классов. Так, например, если у вас есть класс:

class Int
{
public:
    Int(int i) {}
}

И вы перегрузили функцию для long и Int :

void test(long n) {cout << "long";}
void test(Int n) {cout << "Int";}

Вы увидите, что следующий код вызывает длинную перегрузку :

int i;
test(i);
6
ответ дан 1 December 2019 в 09:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: