Здравствуйте, Аноним, Вы писали:
А>Есть ли вообще разница? как я понимаю NULL это константа и во время компиляции она станет непосрдсвенным операндом, так же как и 0?
В двух словах: в C++ #define NULL 0.
В следующем стандарте будет nullptr — то же самое, но строже. Например, тип NULL, как ни крути, int, хотя int-то здесь и ни при чем. nullptr будет приводиться к любым указателям, но не к целочисленным типам, как сейчас. В принципе, nullptr можно сделать и сейчас:
Здравствуйте, Roman Odaisky, Вы писали:
RO>Здравствуйте, Аноним, Вы писали:
RO>В двух словах: в C++ #define NULL 0.
либо 0L, либо 0UL, либо еще чего-нть.
RO>В следующем стандарте будет nullptr — то же самое, но строже.
В текущей версии предлоежния — нет (хотя в первой версии предложения было действительно то же самое):
We do not propose to define the standard library macro NULL to nullptr. We considered that and liked the idea, but the EWG opinion was that it would break too much code, even though in many cases that would be code that deserved to be broken. New code should use the cleaner and safer nullptr.
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2214.pdf
RO>Например, тип NULL, как ни крути, int, хотя int-то здесь и ни при чем.
или long. или любой другой тип, который захотелось данной реализации.
Короче, нулевой целочисленный литерал любого целочисленного типа:
18.1/4:
The macro NULL is an implementation-defined C++ null pointer constant in this International Standard
(4.10).
4.10/1:
A null pointer constant is an integral constant expression (5.19) rvalue of integer type that evaluates to
zero.
RO>В принципе, nullptr можно сделать и сейчас:
(S. Meyers. More Effective C++, Item 25)
You will always get what you always got
If you always do what you always did
чем 0 отличается от NULL?
От:
Аноним
Дата:
25.06.07 08:30
Оценка:
Здраствуйте.
Есть ли вообще разница? как я понимаю NULL это константа и во время компиляции она станет непосрдсвенным операндом, так же как и 0?
Re: чем 0 отличается от NULL?
От:
Аноним
Дата:
25.06.07 08:31
Оценка:
Здравствуйте, Аноним, Вы писали:
А>Здраствуйте. А>Есть ли вообще разница? как я понимаю NULL это константа и во время компиляции она станет непосрдсвенным операндом, так же как и 0?
А посмотреть определение слабо?
Здравствуйте, Аноним, Вы писали:
А>Здраствуйте. А>Есть ли вообще разница? как я понимаю NULL это константа и во время компиляции она станет непосрдсвенным операндом, так же как и 0?
Здравствуйте, Аноним, Вы писали:
А>Здраствуйте. А>Есть ли вообще разница? как я понимаю NULL это константа и во время компиляции она станет непосрдсвенным операндом, так же как и 0?
NULL как макрос остался для совместимости с С. В С++ смысла уже не имеет.
Здравствуйте, Аноним, Вы писали:
А>Здраствуйте. А>Есть ли вообще разница? как я понимаю NULL это константа и во время компиляции она станет непосрдсвенным операндом, так же как и 0?
"0" — это значение, константа. A null указывает на "пустое место" — объявленную, но неинициализированную переменную, объект и т.п.
Здравствуйте, Аноним, Вы писали:
А>Здраствуйте. А>Есть ли вообще разница? как я понимаю NULL это константа и во время компиляции она станет непосрдсвенным операндом, так же как и 0?
Здравствуйте, DuaMaHT, Вы писали:
DMH>"0" — это значение, константа. A null указывает на "пустое место" — объявленную, но неинициализированную переменную, объект и т.п.
0 и NULL — одно и тоже.
Нужно разобрать угил.
Re[2]: чем 0 отличается от NULL?
От:
Аноним
Дата:
25.06.07 13:50
Оценка:
Здравствуйте, Аноним, Вы писали:
а для чего тогда форум? чтоб всех в ман тыкать? если уж тыкаете, то хоть бы указали в каком именно файле это определение можно посмотреть (берёшься за дело, сделай его нормально).
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, Аноним, Вы писали: А>а для чего тогда форум? чтоб всех в ман тыкать? если уж тыкаете, то хоть бы указали в каком именно файле это определение можно посмотреть (берёшься за дело, сделай его нормально).
Если возник вопрос "Что такое Х в С++" — искать ответ надо в Стандарте С++ (актуальная ревизия — 2003 год).
Здравствуйте, Roman Odaisky, Вы писали:
RO>Здравствуйте, jazzer, Вы писали:
J>>(S. Meyers. More Effective C++, Item 25)
RO>Я видел несколько реализаций nullptr в рамках C++03. Ни одна не понравилась, как-то они тяп-ляп сделаны.
Я вот чего не понял. Они говорят, что nullptr будет считаться соответствием как для T*, так и для T::*. Но все объяснения о том, как это работает, относятся к одновременному существованию шаблонов для T* и для T::* и к тому, что в этом случае будет неоднозначность. Поэтому для меня совершенно непонятным остался вопрос — если у нас есть только шаблон для T*, то как выведется T?
В смысле,
Здравствуйте, jazzer, Вы писали:
J>Я вот чего не понял. Они говорят, что nullptr будет считаться соответствием как для T*, так и для T::*. Но все объяснения о том, как это работает, относятся к одновременному существованию шаблонов для T* и для T::* и к тому, что в этом случае будет неоднозначность. Поэтому для меня совершенно непонятным остался вопрос — если у нас есть только шаблон для T*, то как выведется T? J>В смысле, J>
J>template <class T> void f(T*);
J>f(nullptr);
J>
Никак. А что здесь можно было бы ожидать? NULL бы тоже не помог. Надо что-то вроде f<X>(nullptr).
Здравствуйте, Roman Odaisky, Вы писали:
RO>Никак. А что здесь можно было бы ожидать? NULL бы тоже не помог. Надо что-то вроде f<X>(nullptr).
так а тогда непонятно, к чему вообще эти слова о том, что nullptr будет соответствовать этим шаблонам. Если ты явно инстанцируешь шаблон, то эти слова не нужны — достаточно приведения типов.
Блин, надо было Саттера спросить, пока он был здесь...