Автор вопроса: Fausto Carvalho Marques SilvaОтветов: 5
У меня есть функция, которая возвращает const char * в фиксированное значение, и когда я использую эту функцию, я использую оператор "==", чтобы найти равенство между возвращаемым значением и тем, которое я ожидаю. Это хорошая практика? Должен ли это быть анти-шаблон? Бывший:
Это правильно делать тогда и только тогда, когда вы хотите проверить, указывает ли указатель, возвращаемый getl(), на тот же строковый литерал, что и глобальный указатель LOL. Если это не то, что вы хотите сделать, то нет, это не очень хорошая практика.
Ответ 2 · рейтинг 3 · Matthias Wandel
Это зависит от. Если вы пытаетесь обнаружить, что экземпляры строк одинаковы, это правильно. Если вы пытаетесь определить, совпадает ли содержимое строк, то это не так.
Ответ 3 · рейтинг 2 · usul
Как говорили другие, это зависит от того, что вы хотите сделать.
Когда вы говорите "ценность, которую я ожидаю", что вы имеете в виду? Чего ожидаете вы?
Не зная вашего ответа на это: в общем, плохая практика. Насколько мне известно, компиляторы могут повторно использовать расположение строк. Итак, это поведение:
Ну... вы пытаетесь вернуть значение с глобальным именем, чтобы код был более читабельным, верно? (если я неправильно истолковал, игнорируйте: P). Рассуждение прекрасное, но это не тот путь.
Обычный способ сделать это #define:
#define MY_MEANINGFUL_RETURN 1
int doSomething() {
return MY_MEANINGFUL_RETURN;
}
(...)
if (doSomething() == MY_MEANINGFUL_RETURN)
(...)
Если бы вы использовали описанную выше технику const char*, вам пришлось бы сохранять эти строки в памяти во время выполнения, чтобы затем сравнивать только их позицию в памяти. При втором подходе компилятор управляет числами, и вы получаете красивые имена, не требуя дополнительного времени или места.
Ответ 5 · рейтинг 1 · Viren
Идентичность объекта против равенства:
Если вы собираетесь использовать его как способ/конструкцию для "идентификации" объектов (в данном случае глобальный указатель LOL, который фактически является просто ТАКИМ ЖЕ объектом в вашей строке кода), то это безопасно.
Но при более глубоком рассмотрении вашего примера кажется, что вы действительно хотите проверить "равенство": т.е. проверить, равны ли два объекта, т.е. содержат ли они одинаковое значение?