Ну, давай сначала определимся, как ты его туда будешь передавать ;-) То есть понятно что C++ в наследие от C остались всякие unsafe type casts и можно написать что-то типа *(MyClass *)NULL, но это уже по-моему для тех кто целенаправленно себе хочет ногу отстрелить ;-)
Написать так можно (разве что NULL большими буквами), но это -- указатель а не ссылка (и во втором случае там будет мусор, а не NULL). А ссылку можно только сразу инициализировать: MyClass a; MyClass &my=a; Попытка написать просто MyClass &my; выдаст ошибку компиляции.
>> Написать так можно (разве что NULL большими буквами)
> о! а передать его потом в функцию, принимающую MyClass& - можно?
Можно. Через разименование. Но такие вещи уже в принципе не ловятся at compile time -- в одном месте запихать в переменную условно некорректное значение, а в другом его использовать ;-)
> всегда? а если это не локальная переменная, а член класса? а если static член?
Ну, если static -- будет NULL. Но это редкий случай ;-)
ну вот видишь. то есть в процессе нормального использования.
Но такие вещи уже в принципе не ловятся at compile time
ну как же. типизованный же пойнтер. вводится специальный модификатор типа, который будет запрещать нулевые и неинициализированные пойнтеры, и все дела. ты сходи по сслыке-то.
запихать в переменную условно некорректное значение
именно. если у тебя по семантике для этого пойнтерного типа null - это некорректное значение, то это надо явно объявить. пусть компилятор ошибки ловит.
(no subject)
Date: 2004-06-03 11:30 pm (UTC)(no subject)
Date: 2004-06-04 12:04 am (UTC)с нетерпением ожидаю появления non-nullable reference types.
(no subject)
Date: 2004-06-04 05:44 am (UTC)Huh?! Как сам-то?
(no subject)
Date: 2004-06-04 01:08 pm (UTC)(no subject)
Date: 2004-06-05 08:08 pm (UTC)речь-то идёт о compile-time safety.
(no subject)
Date: 2004-06-07 06:05 am (UTC)(no subject)
Date: 2004-06-07 12:29 pm (UTC)я не издеваюсь, а на самом деле не помню уже... и если нельзя, то просто MyClass* my; разве не null содержит?
(no subject)
Date: 2004-06-07 12:35 pm (UTC)MyClass a;
MyClass &my=a;
Попытка написать просто MyClass &my; выдаст ошибку компиляции.
(no subject)
Date: 2004-06-07 12:58 pm (UTC)о! а передать его потом в функцию, принимающую MyClass& - можно?
во втором случае там будет мусор, а не NULL
всегда? а если это не локальная переменная, а член класса? а если static член?
(no subject)
Date: 2004-06-07 01:03 pm (UTC)>> Написать так можно (разве что NULL большими буквами)
> о! а передать его потом в функцию, принимающую MyClass& - можно?
Можно. Через разименование. Но такие вещи уже в принципе не ловятся at compile time -- в одном месте запихать в переменную условно некорректное значение, а в другом его использовать ;-)
> всегда? а если это не локальная переменная, а член класса? а если static член?
Ну, если static -- будет NULL. Но это редкий случай ;-)
(no subject)
Date: 2004-06-07 02:11 pm (UTC)ну вот видишь. то есть в процессе нормального использования.
Но такие вещи уже в принципе не ловятся at compile time
ну как же. типизованный же пойнтер. вводится специальный модификатор типа, который будет запрещать нулевые и неинициализированные пойнтеры, и все дела. ты сходи по сслыке-то.
запихать в переменную условно некорректное значение
именно. если у тебя по семантике для этого пойнтерного типа null - это некорректное значение, то это надо явно объявить. пусть компилятор ошибки ловит.
(no subject)
Date: 2004-06-05 11:17 am (UTC)trackback
Date: 2004-06-07 09:49 pm (UTC)