Нет, разница есть. Во первых, глобальные переменные в целом не очень хорошие вещи) Лучше в конфиг вынести такое, судя по названию. Во вторых, можно было бы неймспейс сделать, а не класс. Ну и в целом, макросы не "тайп сейф", в отличии от переменных. В случае макроса он может неявно быть преобразован в char*, или в FName, или в std::string, или во что-нибудь ещё. А вот переменная не может. Поэтому тебе нужно решить, хочешь ли ты, что бы было так. Это с одной стороны гораздо удобнее, а с другой стороны не предсказуемее, так как ты не знаешь, что за тип ты можешь получить, и как его компилятор расценит.
На мой взгляд, не совсем здесь корректно писать про "тайп сейф", Александр, макрос - это директива компилятора и, соответственно, каждое вхождение идентификатора макроса в коде будет заменено на строку токена В примере выше "Storage" - это const char*, в C++ неявно преобразовать его в char* нельзя (с C++ 11) Ну т.е. в конкретном примере ты сравниваешь неявное преобразование типов const char* и FString Т.е. с таким же успехом автор вопроса мог написать #define test FString(TEXT("something")); и тогда в разговоре о преобразованиях не было бы совсем никакого смысла. Очевидно, что разница есть, но она совсем не в этом. Открывайте форточку.
Ну вообще я говорил про тот конкретный пример. Но да, вы правы. Почему-то мне казалось, что при оверлоаде функций, например PrintPath(FString Path) и PrintPath(FName Path) он будет неявно производить конвертацию и будет двусмысленный вызов. Но я совсем забыл, что есть ошибка компилятора ambiguous call.. Впрочем, конст предпочтительнее все же, как по мне.
https://habr.com/ru/company/pvs-studio/blog/444612/
Ну тбх статья высосанная из пальца хуйня(хотя обычно я хорошо отношусь к статьям PVS)
Спасибо) Просто я использую макросы вместо функций тупо из соображений что на вызов функции расходуется 40 или 50 тактов процессора, а я перфекционист)
Компилятор достаточно умный, чтобы заинлайнить
Вообще использование макросов считается плохой практикой и они используются только тогда, когда другого выхода нет, или когда другие выборы ещё хуже.
Спасибо, буду отдавать приоритет функциям! Полезные советы по архитектуре)
Чёт нифига не понял, что здесь написано, опытные, объясните плез)
Обсуждают сегодня