если вы посмотрите внутри класса строки вы увидите, что это не перегрузить конструктор копирования, чтобы принять один параметр символа. вы можете думать, что вы реализуете свой собственный класс, содержащий строку объекта:
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
class MyStr
{
public:
MyStr(char c){ itsString = c;}
string GetStr()const {return itsString;}
private:
string itsString;
};
int main(int argc, char* argv[])
{
char test[]={'A'};
char testt[]={'a'};
MyStr testtt = test[0] + testt[0];
cout << testtt.GetStr() << endl;
cout << endl << endl << endl;
return 0;
}
пробегов эту программу и компилятор никогда не жалуется, но результат не будет, как вы думаете: это не будет «Аа» но просто: 'ت', потому что на самом деле приведенный выше оператор: string testtt = test [0] + testt [0]; эквивалентно записи: cout < < (char) ('A' + 'a'); , что означает суммирование двух символов, и результатом является целочисленное значение ASCII, после чего это значение будет снова возвращено в charater, потому что вы действительно вызываете строку (char); что приведет к (charator of 162)
'string testtt = string (test [0]) + testt [0];' – Slava
По крайней мере, один из операндов для оператора '+' (http: // en.cppreference.com/w/cpp/string/basic_string/operator%2B) должна быть строка. –
error.cpp: 10: 31: error: invalid conversion from 'char' to 'const char *' [-fpermissive] string testtt = string (test [0]) + testt [0]; – Sigstop