для навигации по каталогам 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
Я предполагаю, что преобразование из указателя в bool является неявным преобразованием примитивного типа, где преобразование в std :: string
требует вызова конструктора и создания временного объекта.
В вашем случае у вас есть перегруженные функции. Разрешение перегрузки происходит в соответствии с Разделом 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 . Нулевое значение, значение нулевого указателя или значение указателя нулевого члена преобразуется в ложное; любое другое значение преобразуется в истину.
Указатели имеют неявное преобразование в 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);