Как объединить строки с помощью оператора + - PullRequest
2 голосов
/ 13 октября 2019

Почему один допускается, а другой выдает ошибку. Любой, кто может объяснить.

#include<string>
using namespace std;
int main()
{
    string s3 = "Why";
    string s11 = "hello" + " , " + s3;  // It gives error
    string s11 =  s3 + " , " +"hello" ; // This works fine.
}

Ответы [ 2 ]

3 голосов
/ 13 октября 2019

Из-за приоритета оператора строка

string s11 = "hello" + " , " + s3;

обрабатывается как

string s11 = ("hello" + " , " ) + s3;

Подвыражение "hello" + " , " недопустимо. Первый член имеет тип char const [6] (массив из 6 char const), а второй член имеет тип char const [4] (массив из 4 char const).

Нет +Оператор между двумя. Вот почему это ошибка компилятора.


Вторая строка

string s11 =  s3 + " , " + "hello" 

обрабатывается как

string s11 =  (s3 + " , ") + "hello" 

Подвыражение s3 + " , " допустимо, посколькусуществует перегрузка operator+, которая поддерживает эту операцию. Подвыражение оценивается как std::string. Следовательно, последующая + "hello" также является поддерживаемой операцией.

1 голос
/ 13 октября 2019

"hello" - строковый литерал, а его тип - массив символов (char[6]). operator+ определяется только для std::string. Вы можете использовать UDL s, чтобы сделать его std::string:

int main()
{
    using namespace std::string_literals;

    std::string s3 = "Why"s;
    std::string s11 = "hello"s + " , "s + s3;
    std::string s12 =  s3 + " , "s +"hello";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...