Есть ли способ избежать этого предупреждения от clang-tidy (fuchsia-default-arguments) при инициализации строки?

Рассмотрим этот кусок кода:

#include <iostream>

int main () {
std::string str = "not default";
std::cout << str << std::endl;
return 0;
}

Бег clang-tidy -checks=* string.cpp дает следующее:

7800 warnings generated.
/tmp/clang_tidy_bug/string.cpp:4:21: warning: calling a function that uses a default argument is disallowed [fuchsia-default-arguments]
std::string str = "not default";
^
/../lib64/gcc/x86_64-pc-linux-gnu/8.1.1/../../../../include/c++/8.1.1/bits/basic_string.h:509:39: note: default parameter was declared here
basic_string(const _CharT* __s, const _Alloc& __a = _Alloc())
^
Suppressed 7799 warnings (7799 in non-user code).

Есть ли какой-то другой аргумент, который можно передать, чтобы убрать это предупреждение? Я не использую никаких аргументов по умолчанию здесь. Но реализация std :: string делает.

Изменить: Изменен код, чтобы упростить тестовый пример.

3

Решение

Я не использую никаких аргументов по умолчанию здесь. Но реализация std :: string делает.

Класс string определил аргумент по умолчанию. Но вы использовал аргумент по умолчанию, вызывая конструктор без явной передачи второго аргумента.

Есть ли какой-то другой аргумент, который можно передать, чтобы убрать это предупреждение?

Да. Если вы передадите все аргументы явно (включая значения по умолчанию), то ничто не предупредит об использовании аргументов по умолчанию. Аргумент, который вам нужно передать в этом случае, является вторым аргументом строкового конструктора, на что указывает предупреждающее сообщение. Это распределитель для строки. Имеет тип std::allocator<char>,

Обратите внимание, что для того, чтобы передать более одного аргумента в выражении инициализации копирования, вам нужно использовать список фигурных скобок:

std::string str = {
"actually not default",
std::allocator<char>(),
};

Тем не менее, использование аргументов по умолчанию обычно не считается плохой практикой, и, возможно, вам будет лучше, если вы сохраните использование и отключите предупреждение. Но так ли это, в основном основано на мнении. Как ни странно, и название предупреждения, и документация подразумевают, что предупреждение предназначено для базы кодов фуксии, но не для документации по фуксии явно разрешить использование аргументов по умолчанию (но предлагает использовать «суждение»).

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]