какие аргументы определены в кавычках

В некоторых вызовах функций я вижу подобные вещи.

function(variable1, "someValue");

У меня есть несколько вопросов, основанных на этом

1) Как с ++ относится ко второму аргументу?

2) если какая-то функция принимает cstring, то почему мы получаем ошибку, когда делаем следующее

functionTakingCString(stringVariable.c_str() + "someValue");

Есть ли какой-нибудь способ вместо объявления переменной const char? Пожалуйста, поправьте меня, если я ошибаюсь где-то.

2

Решение

Они называются строковые литералы и если вы хотите принять аргумент, который является строковым литералом, как это вы обычно передаете const std::string& или const char*в зависимости от того, что требует ваш API.

3

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

2) если какая-то функция принимает cstring, то почему мы получаем ошибку, когда делаем следующее

Это потому, что оператор «+» не перегружен для char * тип. Вы можете объединить это с stringVariable типа string для которого + оператор был перегружен, чтобы объединить две строки, а затем получить c_str() перейти к функции, принимающей char * или же const char *,

2

  1. const char *

  2. Бинарный оператор + не может быть применен к const char* типы операндов. Если он является std :: string, то он работает из-за перегрузки операторов.

1

Второй аргумент — const char *. В некоторых случаях вы можете конвертировать из одного типа в другой, если у вас есть специальный конвертирующий конструктор желаемого типа, который принимает данный тип. Компилятор может сделать это за вас в некоторых случаях.

В этом примере строка имеет конструктор, который принимает const char *, поэтому компилятор может превратить const char * в строку для вас под прикрытием. Если вы хотите прекратить такое поведение, загляните в явное ключевое слово.

Тип char * на самом деле не является классом, поэтому у него нет оператора +, который работает со строками. Тем не мение,

(stringVariable + "someValue").c_str()

будет работать, потому что stringVariable является строкой и оператор плюс может заключить в строку символ char *.

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