Приведение char* к bool
От: Ytz https://github.com/mtrempoltsev
Дата: 08.04.11 07:38
Оценка: :))
Поясните почему char* приводиться к bool:

#include <iostream>
#include <string>

void Test(bool)
{
    std::cout << "bool";
}

void Test(const std::string&)
{
    std::cout << "std::string";
}

int main()
{
    Test("test");
}


Output:
bool


здесь
Re: Приведение char* к bool
От: Kswapd Россия  
Дата: 08.04.11 07:45
Оценка: 1 (1) +2 -3 :)
Ytz>Поясните почему char* приводиться к bool:

Сначала объясни, почему ты используешь такую орфографию.
Re: Приведение char* к bool
От: 24  
Дата: 08.04.11 07:51
Оценка: +3 :)
Здравствуйте, Ytz, Вы писали:

Ytz>Поясните почему char* приводиться к bool:


Скорее всего, потому что char* -> bool — "встроенное" преобразование, а char* -> std::string — пользовательское.
Re[2]: Приведение char* к bool
От: Ytz https://github.com/mtrempoltsev
Дата: 08.04.11 07:51
Оценка: :)
Здравствуйте, Kswapd, Вы писали:

Ytz>>Поясните почему char* приводиться к bool:


K>Сначала объясни, почему ты используешь такую орфографию.


Что смущает?
Re[2]: Приведение char* к bool
От: Ytz https://github.com/mtrempoltsev
Дата: 08.04.11 07:53
Оценка: :)
Здравствуйте, 24, Вы писали:

24>Здравствуйте, Ytz, Вы писали:


Ytz>>Поясните почему char* приводиться к bool:


24>Скорее всего, потому что char* -> bool — "встроенное" преобразование, а char* -> std::string — пользовательское.


Но если вместо bool, например, поставить int, то приведения не будет, а будет вызов конструктора std::string
Re[3]: Приведение char* к bool
От: Kswapd Россия  
Дата: 08.04.11 07:54
Оценка: -1
Ytz>Что смущает?

tsya.ru
Re[3]: Приведение char* к bool
От: 24  
Дата: 08.04.11 07:57
Оценка: 6 (1)
Здравствуйте, Ytz, Вы писали:

Ytz>Но если вместо bool, например, поставить int, то приведения не будет, а будет вызов конструктора std::string


Так char* к int неявно не приводится.
Re[4]: Приведение char* к bool
От: Ytz https://github.com/mtrempoltsev
Дата: 08.04.11 08:00
Оценка: 1 (1)
Здравствуйте, Kswapd, Вы писали:

Ytz>>Что смущает?


K>tsya.ru


Спасибо, я обязательно выучу правило и больше не буду делать таких ошибок.
Re[4]: Приведение char* к bool
От: Ytz https://github.com/mtrempoltsev
Дата: 08.04.11 08:13
Оценка: :)
Здравствуйте, 24, Вы писали:

24>Так char* к int неявно не приводится.


А зачем сделали такое неявное приведение?
Re[2]: Приведение char* к bool
От: alexstr Россия  
Дата: 08.04.11 08:20
Оценка:
А, может быть, немного наивный вопрос, если сначала объявлять функцию со ссылкой результат будет тот же?
Re[5]: Приведение char* к bool
От: 24  
Дата: 08.04.11 08:27
Оценка:
Здравствуйте, Ytz, Вы писали:

Ytz>А зачем сделали такое неявное приведение?


char* к bool? К bool многое приводится неявно, например чтоб писать if (p) вместо if (p != NULL)
Re[3]: Приведение char* к bool
От: wander  
Дата: 08.04.11 09:47
Оценка:
Здравствуйте, alexstr, Вы писали:

A>А, может быть, немного наивный вопрос, если сначала объявлять функцию со ссылкой результат будет тот же?

угу.
Re[6]: Приведение char* к bool
От: Ytz https://github.com/mtrempoltsev
Дата: 08.04.11 11:31
Оценка:
Здравствуйте, 24, Вы писали:

24>Здравствуйте, Ytz, Вы писали:


Ytz>>А зачем сделали такое неявное приведение?


24>char* к bool? К bool многое приводится неявно, например чтоб писать if (p) вместо if (p != NULL)


В С нет bool, но написать if (p) можно
Re[7]: Приведение char* к bool
От: night beast СССР  
Дата: 08.04.11 11:42
Оценка:
Здравствуйте, Ytz, Вы писали:

Ytz>>>А зачем сделали такое неявное приведение?


24>>char* к bool? К bool многое приводится неявно, например чтоб писать if (p) вместо if (p != NULL)


Ytz>В С нет bool, но написать if (p) можно


7.16 ISO/IEC 9899:1999?
Re[8]: Приведение char* к bool
От: Ytz https://github.com/mtrempoltsev
Дата: 08.04.11 11:56
Оценка:
Здравствуйте, night beast, Вы писали:

NB>Здравствуйте, Ytz, Вы писали:


Ytz>>>>А зачем сделали такое неявное приведение?


24>>>char* к bool? К bool многое приводится неявно, например чтоб писать if (p) вместо if (p != NULL)


Ytz>>В С нет bool, но написать if (p) можно


NB>7.16 ISO/IEC 9899:1999?


И что?
Re[9]: Приведение char* к bool
От: night beast СССР  
Дата: 08.04.11 12:04
Оценка:
Здравствуйте, Ytz, Вы писали:

24>>>>char* к bool? К bool многое приводится неявно, например чтоб писать if (p) вместо if (p != NULL)


Ytz>>>В С нет bool, но написать if (p) можно


NB>>7.16 ISO/IEC 9899:1999?


Ytz>И что?


что "И что?"?

там написано

The macro
bool
expands to _Bool.


почему "написать if (p) можно" есть в 6.8.4.1.
Re[10]: Приведение char* к bool
От: Ytz https://github.com/mtrempoltsev
Дата: 08.04.11 12:15
Оценка:
Здравствуйте, night beast, Вы писали:

Ytz>>>>В С нет bool, но написать if (p) можно


NB>>>7.16 ISO/IEC 9899:1999?


Ytz>>И что?


NB>что "И что?"?


NB>там написано

NB>

NB>The macro
NB>bool
NB>expands to _Bool.


NB>почему "написать if (p) можно" есть в 6.8.4.1.


Это ты говоришь о стандарте C99 в котором появился bool, но писать if (p) в C можно было всегда — это классика. Некоторые даже так извращались:

#define FALSE 0
#define TRUE 1
#define BOOL int


Или как тебе классический K&R:

while (*dst++ = *src++);
Re[11]: Приведение char* к bool
От: mike_rs Россия  
Дата: 08.04.11 12:17
Оценка:
Здравствуйте, Ytz, Вы писали:

Ytz>Или как тебе классический K&R:


Ytz>
Ytz>while (*dst++ = *src++);
Ytz>


ну и где здесь приведение char * к bool ?
Re[11]: Приведение char* к bool
От: jyuyjiyuijyu  
Дата: 08.04.11 12:28
Оценка: :)
в C любое арифметическое выражение преобразуется в int
в виде 0 или 1 если находится в if while for
указатели целые вещественные без разницы все в int
так было в ANSI C как в C99 незнаю то что в
C++ указатель к int нельзя неявно привести а к bool
можно мне тоже кажется странным
Re[12]: Приведение char* к bool
От: Ytz https://github.com/mtrempoltsev
Дата: 08.04.11 12:28
Оценка:
Здравствуйте, mike_rs, Вы писали:

_>Здравствуйте, Ytz, Вы писали:


Ytz>>Или как тебе классический K&R:


Ytz>>
Ytz>>while (*dst++ = *src++);
Ytz>>


_>ну и где здесь приведение char * к bool ?


Очевидно, что раз в C нет bool, то и приведения к нему быть не может Правило простое:
0 — false
>0 — true
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.