The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Спецификация C++0X принята в качестве международного стандар..., opennews (ok), 14-Авг-11, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


3. "Спецификация C++0X принята в качестве международного стандар..."  +5 +/
Сообщение от Alatar (ok), 14-Авг-11, 22:08 
>>Вместо макроса NULL для обозначения нулевого указателя введено ключевое слово nullptr;

Забавно... А чем плох NULL?

Ответить | Правка | Наверх | Cообщить модератору

7. "Спецификация C++0X принята в качестве международного стандар..."  +3 +/
Сообщение от с11 (?), 14-Авг-11, 22:16 
> Забавно... А чем плох NULL?

ключевое слово и макрос - разницу чувствуете?

Ответить | Правка | Наверх | Cообщить модератору

8. "Спецификация C++0X принята в качестве международного стандар..."  +3 +/
Сообщение от ДФ (ok), 14-Авг-11, 22:22 
Для повышения читабельности кода, лучшего обнаружения ошибок и определения перегрузок процедур и функций. Более подробно http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2003/n148...
Ответить | Правка | К родителю #3 | Наверх | Cообщить модератору

34. "Спецификация C++0X принята в качестве международного стандар..."  +6 +/
Сообщение от F1l (?), 15-Авг-11, 00:37 
>14/88

Я всегда знал что тут что-то не чисто.

Ответить | Правка | Наверх | Cообщить модератору

56. "Спецификация C++0X принята в качестве международного стандар..."  +/
Сообщение от Alatar (ok), 15-Авг-11, 10:06 
> Для повышения читабельности кода, лучшего обнаружения ошибок и определения перегрузок
> процедур и функций. Более подробно http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2003/n148...

Ага, примерно понятно, спасибо.

Ответить | Правка | К родителю #8 | Наверх | Cообщить модератору

93. "Спецификация C++0X принята в качестве международного стандар..."  +/
Сообщение от Alatar (ok), 15-Авг-11, 14:07 
> Для повышения читабельности кода, лучшего обнаружения ошибок и определения перегрузок
> процедур и функций. Более подробно http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2003/n148...

Кстати, вот ссылка на более свежую ревизию, пара интересных пояснений добавилось - http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n243...

Ответить | Правка | К родителю #8 | Наверх | Cообщить модератору

30. "Спецификация C++0X принята в качестве международного стандар..."  +2 +/
Сообщение от Толстый (ok), 14-Авг-11, 23:56 
NULL не имеет типа.
Ответить | Правка | К родителю #3 | Наверх | Cообщить модератору

38. "Спецификация C++0X принята в качестве международного стандар..."  +/
Сообщение от Аноним (-), 15-Авг-11, 01:23 
А какой тип у nullptr?
Ответить | Правка | Наверх | Cообщить модератору

54. "Спецификация C++0X принята в качестве международного стандар..."  +/
Сообщение от Mike Lee (?), 15-Авг-11, 09:36 
у него тип указатель. например есть перегруженная функция:

int foo(int a);
int foo(Type* a);

сейчас при вызове foo(0) будет неоднозначность и нужно будет 0 явно кастить. в 0х можно будет написать foo(nullptr) и компилятор разберется.

Ответить | Правка | Наверх | Cообщить модератору

55. "Спецификация C++0X принята в качестве международного стандар..."  +/
Сообщение от Alatar (ok), 15-Авг-11, 10:00 
Дык, а чем foo(nullptr) лучше, чем foo(NULL) ? Там ведь, вроде, каст к указателю уже встроен в макрос. Или нет?
Ответить | Правка | Наверх | Cообщить модератору

70. "Спецификация C++0X принята в качестве международного стандар..."  +/
Сообщение от dq0s4y71 (??), 15-Авг-11, 11:51 
#ifndef __cplusplus
#define NULL ((void *)0)
#else   /* C++ */
#define NULL 0
#endif  /* C++ */

Я так думаю, nullptr - не просто указатель, а указатель на объект _любого типа_ - то, вместо чего сейчас используется костыль #define NULL 0.

Ответить | Правка | Наверх | Cообщить модератору

72. "Спецификация C++0X принята в качестве международного стандар..."  +/
Сообщение от Alatar (ok), 15-Авг-11, 12:09 
> #ifndef __cplusplus
> #define NULL ((void *)0)
> #else   /* C++ */
> #define NULL 0
> #endif  /* C++ */
> Я так думаю, nullptr - не просто указатель, а указатель на объект
> _любого типа_ - то, вместо чего сейчас используется костыль #define NULL
> 0.

Это откуда код? Как я понял из приведённого выше документа, реализация сильно разнится от компилятора к компилятору, в частности в GCC вообще
#define NULL __null

А ценность именно nullptr, как я понял, именно в том, что оно ключевое слово, а не макрос, объект и иже с ними, то есть до компилятора гарантированно доходит в первоначальном виде.
А ещё там есть забавный момент - nullptr не может быть приведён к целому (и дробному, разумеется =)) типу, и в том числе к bool. В связи с этим возникает вопрос: а можно ли будет писать if(my_ptr), или придётся писать if(my_ptr != nullptr)? По идее должно быть можно, потому что запрет на приведение типа должен работать только для этого ключевого слова, а нулевой указатель по-прежнему имеет значение 0 и может быть приведён к целому типу, но мало ли...

Ответить | Правка | Наверх | Cообщить модератору

89. "Спецификация C++0X принята в качестве международного стандар..."  +/
Сообщение от dq0s4y71 (??), 15-Авг-11, 13:28 
> Это откуда код? Как я понял из приведённого выше документа, реализация сильно
> разнится от компилятора к компилятору, в частности в GCC вообще
>  #define NULL __null

Это код из GCC. Полностью так:

/* A null pointer constant.  */

#if defined (_STDDEF_H) || defined (__need_NULL)
#undef NULL        /* in case <stdio.h> has defined it. */
#ifdef __GNUG__
#define NULL __null
#else   /* G++ */
#ifndef __cplusplus
#define NULL ((void *)0)
#else   /* C++ */
#define NULL 0
#endif  /* C++ */
#endif  /* G++ */
#endif    /* NULL not defined and <stddef.h> or need NULL.  */
#undef    __need_NULL


__null в GCC, я так думаю, - это и есть nullptr.

> А ценность именно nullptr, как я понял, именно в том, что оно
> ключевое слово, а не макрос, объект и иже с ними, то
> есть до компилятора гарантированно доходит в первоначальном виде.

Не понял, что значит "в первоначальном виде". Вообще по стандарту NULL - это указатель, который гарантированно не равен любому указателю на объект или функцию, и, по идее, ((void*)0) должно быть достаточно для большинства приложений. Не знаю, почему это нельзя использовать в С++.

Ответить | Правка | Наверх | Cообщить модератору

90. "Спецификация C++0X принята в качестве международного стандар..."  +/
Сообщение от dq0s4y71 (??), 15-Авг-11, 13:35 
> Не знаю, почему это нельзя использовать в С++.

На самом деле, да, нельзя - из-за перекрываемых функций.

Ответить | Правка | Наверх | Cообщить модератору

91. "Спецификация C++0X принята в качестве международного стандар..."  +/
Сообщение от Alatar (ok), 15-Авг-11, 13:55 
>>Не понял, что значит "в первоначальном виде".

Ну в том смысле, что макрос разворачивается препроцессором и компилятор в процессе работы не знает, что именно там было написано программистом - 0 или NULL, а с объектом вообще по дороге фиг знает что произойти может (мало ли что программисту придёт в голову), а с ключевым словом ничего сделать нельзя и компилятор в процессе компилирования чётко знает, что тут должен быть именно нулевой указатель и ни что другое и на основе этого может матюгаться на программиста или выводить типы.
А что касается почему не ((void*)0) см. пункт 1.2 приведённого выше документа. Хотя там, конечно, несколько не очевидно написано.

Ответить | Правка | К родителю #89 | Наверх | Cообщить модератору

42. "Спецификация C++0X принята в качестве международного стандар..."  +/
Сообщение от pavlinux (ok), 15-Авг-11, 02:59 
> NULL не имеет типа.

Правильно, есть только низкий и высокий потенциал на проводнике,
а остальное флуд, так как у напряжения не бывает типов.
Точнее  бывает, переменное и постоянное, но это по времени.
А человек существо тупое - оно ещё со статическим программирование
не разобралось, чего уж говорить про написание программ с модифицирующимися
во времени алгоритмами.


  

Ответить | Правка | К родителю #30 | Наверх | Cообщить модератору

114. "Спецификация C++0X принята в качестве международного стандар..."  +/
Сообщение от Аноним (-), 15-Авг-11, 19:30 
> а остальное флуд, так как у напряжения не бывает типов.

Ну просто некоторым хочется извратиться :). Господи, эти извращенцы даже для нуля с типом определиться не могут.

Ответить | Правка | Наверх | Cообщить модератору

107. "Спецификация C++0X принята в качестве международного стандар..."  +1 +/
Сообщение от Аноним (-), 15-Авг-11, 16:35 
Ошибка на миллиард.
Ответить | Правка | К родителю #3 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру