Здравствуйте, Sni4ok, Вы писали:
S>в случае (**) и (***) выбирается функция 1 S>в случае (*) выдаёт ошибку, что не может выбрать перегруженную функцию
Насколько я понимаю, bool может неявно преобразовать в указатель, т.е. получается следующие:
* Передается ноль, компилятор не знает что выбрать, поскольку нулевой указатель тоже может быть.
** Единица, однозначно выбирается 1 функция
*** Выбирается 1 функция, поскольку переменная не имеет тип char*.
Здравствуйте, Sni4ok, Вы писали:
S>Здравствуйте, Aleksey Pashko, Вы писали:
S>поведение в ** и *** случае соотвествует стандарту, S>но вот с какой нафиг радости false неявно приводится к поинтеру? S>false это не NULL же.
насколько я знаю NULL задефайнин как 0, false в итоге тоже станет 0... Почему бы и нет?
Здравствуйте, Aleksey Pashko, Вы писали:
AP>насколько я знаю NULL задефайнин как 0, false в итоге тоже станет 0... Почему бы и нет?
бага в компиляторе то остаётся, это null pointer может конверится к bool(false), но я нигде в стандарте не нашёл упоминание о том, что bool(false) да и вообще интегральный_тип() может неявно конвертироваться в null pointer.
Здравствуйте, Sni4ok, Вы писали:
S>Здравствуйте, Aleksey Pashko, Вы писали:
AP>>насколько я знаю NULL задефайнин как 0, false в итоге тоже станет 0... Почему бы и нет?
S>бага в компиляторе то остаётся, это null pointer может конверится к bool(false), но я нигде в стандарте не нашёл упоминание о том, что bool(false) да и вообще интегральный_тип() может неявно конвертироваться в null pointer.
Плохо искал. Смотри для начала 4.10, потом 5.19 ну и какие типы считаются интегральными.
Никаких багов в компиляторе в данном случае нет.
Of course, the code must be complete enough to compile and link.
S>в случае (*) выдаёт ошибку, что не может выбрать перегруженную функцию
1. 0 — есть int, а более точно — 0 это есть литеральная константа
2. А вообще лучше всего избегать перегрузки по численным типам и указателям, если имеется такая возможность.
т.е. в случае с
foo (false);
нужно вероятно что-то похожее на
foo(static_cast<string*>(false));
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[4]: бага в 8м визуальнике?
От:
Аноним
Дата:
25.10.06 15:55
Оценка:
L_L>По той простой причине, по какой 0 будучи целым приводится к указателю — false тоже является null-pointer-expression.
Не пугайте меня, что, все целые могут неявно приводиться к указателю?
Это только литерал "0" может неявно приводиться к указателю.
И именно литерал,
const int i = 0;
i неявно к указателю не приводится.
Здравствуйте, Аноним, Вы писали:
А>Не пугайте меня, что, все целые могут неявно приводиться к указателю?
А>Это только литерал "0" может неявно приводиться к указателю. А>И именно литерал, А>const int i = 0; А>i неявно к указателю не приводится.
А ты попробуй прежде чем постить.
int main()
{
const int i = 0;
void* pv = i; // ok
}
Re[6]: бага в 8м визуальнике?
От:
Аноним
Дата:
26.10.06 14:20
Оценка:
А>>Не пугайте меня, что, все целые могут неявно приводиться к указателю?
А>>Это только литерал "0" может неявно приводиться к указателю. А>>И именно литерал, А>>const int i = 0; А>>i неявно к указателю не приводится. S>А ты попробуй прежде чем постить. S>
S>int main()
S>{
S> const int i = 0;
S> void* pv = i; // ok
S>}
S>
Гм, даже comeau проглотил ...
Но, вроде, так быть всё равно не должно ...