Предположим, у меня есть этот код. Ваш основной «если вызывающий не предоставляет значение, вычисляет значение».Что было бы неправильным значением для указателя?
void fun(const char* ptr = NULL)
{
if (ptr==NULL) {
// calculate what ptr value should be
}
// now handle ptr normally
}
и называют это либо
fun(); // don't know the value yet, let fun work it out
или
fun(something); // use this value
Однако, как выясняется, ПТР может иметь все виды ценностей, в том числе NULL, так что я не могу используйте NULL в качестве сигнала о том, что вызывающий абонент не предоставляет ptr.
Так что я не уверен, что значение по умолчанию дает ptr вместо NULL. Какую магическую ценность я могу использовать? У кого-нибудь есть идеи?
Указатель должен либо точку на правильный объект или быть пустым - все остальное на рожон. Может быть, вы хотите [Boost.Optional] (http://www.boost.org/libs/optional/)? – ildjarn
Какая разница между предоставлением 'NULL' и не предоставлением ptr? Как обычно функция «обрабатывает» NULL и как будет обрабатываться, когда ptr «не предоставляется»? –
В моей первоначальной концепции не было бы разницы между fun(); 'и' fun (NULL); '. Потому что я не планировал использовать NULL. Но теперь у меня есть возможность сделать «fun (NULL)» и обработать его нормально. Это проблема. Отредактировал мой вопрос. –