甘肃省城乡建设厅网站,网站建设云南才力,wordpress会员可见主题,创立一个网站得多少钱1. 调用构造函数时的运算符不支持int#xff0c;char类型的操作数
string str1 a; //error
这是一个构造函数。C中string是一个类#xff0c;内部封装了char *来管理这个字符串。
string的构造函数#xff1a;
string() // 创建一个空的字符串string(const char * s)…1. 调用构造函数时的运算符不支持intchar类型的操作数
string str1 a; //error
这是一个构造函数。C中string是一个类内部封装了char *来管理这个字符串。
string的构造函数
string() // 创建一个空的字符串string(const char * s) // 使用字符串s初始化string(const string s) // 使用一个string对象初始化另一个string对象string(int n ,char c) // 使用n个字符c初始化(该字符串由n个字符c组成
所以在初始化的时候没有char类型所以error
2. 调用赋值运算函数时的运算符支持intchar类型的操作数 string str aaa;str a; //ok
这是一个赋值操作把字符a赋值给当前的字符串正确
3. 使用和运算符
string s1abc de; // error原因
两个string能相加是因为string类把运算符和都重载过和是string的重载函数。也可以把string和字符串常量相加但必须保证每个加法运算符的两侧的运算对象至少有一个是string。上面例子中的abc、de都是字符串常量char是数据的基本类型不是类更没有重载过和运算符是没办法用加号直接相加的所以会报错。
string s1;
s1s1abcde; // ok
s1abcde; // error
原因
s1s1abcde是对的。前面提到把string和字符串常量相加但必须保证每个加法运算符的两侧的运算对象至少有一个是string。s1abcde按照加号从左向右结合的顺序会先让s1“abc”再让这个结果加上de然后把这个结果赋给s1。是正确的s1abcde错了。因为要先得到右边的内容也就是进行abcde字符串常量没有办法直接相加原因如上。
string str aaa;
str a; //ok 字符串拼接 支持char类型
string s1abcde;
string s2;
s2s1[0]s1[1]s1[2]; // error
s2s2s1[0]s1[1]s1[2]; // ok 原因
s1[n]返回的是s1的第n个字符的引用是char类型要先得到等号右边的内容即进行s1[0]s1[1]s1[2]但char是不能直接相加的几个char直接相加编译器会将它们对应的ASCII码相加得到一个int型的数得不到你想要的字符串拼接的效果所以错误改成s2s2s1[0]s1[1]s1[2];是ok的。