Это не так, как первый случай не работает вообще, он просто работает таким образом, что является не предназначен.
В соответствии с кодом,
if(s.name=="kolkata")
попытка сравнить указатели сами. Этими указателями он не сравнивает содержимое указателя местоположения памяти.
Подойдя к точке, где вы ожидали ошибки синтаксиса, цитирование C11
, глава 6.5.9, ограничения оператора равенства, (==
)
- оба операнда являются указателями на квалификацию или неквалифицированные версии совместимых типов;
Так,
if(s.name=="kolkata")
является вполне действительным и законным код C, с синтаксической точки зрения. Логически, когда вы ожидаете сравнить содержимое указателя области памяти указателями, этот код бесполезен и не имеет смысла.
Вы не использовали strcmp в первом случае, поэтому. Не требуется синтаксическая ошибка, но недостаточно. – jboockmann
Потому что оператор first, сравнивающий объект с объектом, и это разные объекты. второй, если сравнивать содержимое объекта. –
Потому что второе утверждение не является синтаксически правильным. И где у вас есть «информация», что вторая неэффективна? Вы никогда не запускали этот код, так что вы никогда не измеряли его производительность, не так ли? –