C ++ Добавление в строку (вывод) - PullRequest
0 голосов
/ 04 ноября 2019

Ниже приведена инструкция c ++:

cout << "TESTING" + 2 << endl;

Я понимаю, почему это утверждение выведет строчку. Но у меня вопрос, если я сделаю код ниже, это вызовет ошибку. Я не понимаю почему, так как это одно и то же. Извините за основной вопрос Я новичок в C ++.

 string t = "TESTING";
 cout << t + 2 << endl;

Заранее благодарен за любую помощь. :)

Ответы [ 2 ]

3 голосов
/ 04 ноября 2019

Это интересный случай. Я не уверен, напечатали ли вы результат вашего первого заявления или нет, но если вы это видите, вы видите, что на самом деле вы получаете "STING", а не "TESTING2", или что-то в этом роде!

Здесь происходит несколько вещей. В своем первом утверждении вы создаете строку, используя строковый литерал . В этом случае C ++ создает const char[N] и помещает в него вашу строку. Поскольку char[N] технически является массивом (а массив является указателем), оператор + действует как приращение, а результат "TESTING" + 2 фактически является указателем на второй элемент "TESTING", который является "STING". Вы не увидите никаких ошибок, потому что C ++ думает, что вы хотели сделать.

Во втором заявлении вы говорите C ++, что я хочу объект std::string. std::string более безопасен и будет раздражать вас, если вы попытаетесь добавить к нему что-то кроме строки. Итак, когда вы делаете, вы получаете ошибку. Чтобы ваше второе утверждение работало как задумано, вы должны написать t + std::to_string(2).

2 голосов
/ 04 ноября 2019

Важно знать разницу между типами string и char. String - это класс, который управляет строкой символов. И char [] это массив символов. См. этот вопрос для объяснения. В вашем случае код будет работать, если вы выполните:

#include <iostream>

int main ()
{
char t[] = "TESTING";
std::cout << t + 2 << std::endl;
return 0;
}

Если вы хотите объединить строку с int, вам следует явно преобразовать ее:

#include <iostream>

int main ()
{
std::string m = "Testing ";
std::cout << m + std::to_string(2) << std::endl;
return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...