Заметил, что если сделать анонимный параметр, компилятор не будет ругаться на это.
Например
void func(int) { return; }
не вызовет никаких проблем.
Только не нашёл ничего насчёт этого в инете. Может, ищу не так. Зачем это и как такое кушать? Или где можно об этом почитать? Заранее спасибо
Если аргумент не нужен и если компилятор расценивает неиспользуемые переменные как ошибку, то программа не скомпилируется. В этом случае его можно сделать анонимным.
Просто бывает, что такой аргумент не нужен.
Ну, например, какая-нибудь библиотечная функция, которая принимает в качестве параметра функцию от двух переменных. А вам она не нужна - у вас один параметр, второй не нужен. Не используется.
И что делать? можно, конечно, написать функцию от двух аргументов - и не использовать второй. Но тогда компилятор удивится :)
Есть, конечно, и другие пути обхода этого предупреждения, например,
int f(int a, int b)
{
(void)b;
return 2*a;
}
или
#pragma warning( push )
#pragma warning( disable : 4100 )
int f(int a, int b)
{
return 2*a;
}
#pragma warning( pop )
в Visual C++.
Но самое простое - просто указать тип параметра без его имени...
Это один из многих атавизмов из С (или даже из B). В нем реализован крайне вальготный подход к объявлению / определению функций, в т.ч.:
Даже в самом C нет никаких причин прибегать к подобным трюкачествам, и зачастую все несоответствия подобного рода, в т.ч. опущенные имена аргументов классифицируются как дефект. Также типичной ошибкой является пропуск имени аргумента для подавления предупреждения о неиспользуемом аргументе. Наличие неиспользуемых аргументов также может классифицироваться как дефект, но для явного указания, что аргумент не будет использован предусмотрен стандартный (с С++17) аттрибут [[maybe_unused]]
:
void func([[maybe_unused]] int const value) { return; }
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
У меня есть программа она занимает порт 4001 если ее не отключать и запустить еще одну программу она будет выдавать ошибку пока порт не закроетсяВопрос,...
ReSharper выдаёт предупреждение "function-like macro used; consider a constexpr template function", что значит: используйте constexpr функцию, вместо defineно при этом ReSharper не говорит...
Я работаю с либой FFmpeg и здесь есть возможность передать путь к mp4 файлу и прочитать егоНо я ищу возможность передать не путь к файлу, а передать...