operator= 在我的自定义字符串 class 中无法正常工作
operator= doesn't work properly in my custom string class
我正在尝试使用 std::vector 创建自定义字符串 class。
请看下面我的代码。
#include <iostream>
#include <vector>
class mString {
public:
mString();
explicit mString(const char *str);
mString(const mString &str);
mString operator=(const char *str);
private:
typedef std::vector<char> vecChar;
vecChar _vc;
};
inline mString::mString(){}
inline mString::mString(const char *str) {
const vecChar::size_type size = strlen(str);
_vc = vecChar(str, str + size);
}
inline mString::mString(const mString &str) {
_vc = str._vc;
}
inline mString mString::operator=(const char *str) {
const vecChar::size_type size = strlen(str);
_vc = vecChar(str, str + size);
return *this;
}
int main(int argc, const char * argv[]) {
/* This works */
mString a;
a = "Hello World";
/* Error : No viable conversion from 'const char[12]' to mString */
mString b = "Hello World";
return 0;
}
我不明白为什么 'mString b = "Hello World";' 不起作用而 'mString a; a= "Hello World";' 起作用。
我需要做什么才能让它发挥作用?
提前致谢!
这与赋值运算符没有共同之处。
你声明了这个构造函数
explicit mString(const char *str);
使用函数说明符 explicit
。
因此在这个声明中
mString b = "Hello World";
无法调用构造函数将字符串文字 "Hello World"
转换为 mString
.
类型的对象
删除函数说明符 explicit
,声明将编译。
或者您可以使用像
这样的直接初始化来代替上面声明中的复制初始化
mString b( "Hello World" );
所以在这个声明中
mString b = "Hello World";
有使用过的构造函数。但是在这个表达式语句中
a= "Hello World";
确实用到了赋值运算符
我正在尝试使用 std::vector
请看下面我的代码。
#include <iostream>
#include <vector>
class mString {
public:
mString();
explicit mString(const char *str);
mString(const mString &str);
mString operator=(const char *str);
private:
typedef std::vector<char> vecChar;
vecChar _vc;
};
inline mString::mString(){}
inline mString::mString(const char *str) {
const vecChar::size_type size = strlen(str);
_vc = vecChar(str, str + size);
}
inline mString::mString(const mString &str) {
_vc = str._vc;
}
inline mString mString::operator=(const char *str) {
const vecChar::size_type size = strlen(str);
_vc = vecChar(str, str + size);
return *this;
}
int main(int argc, const char * argv[]) {
/* This works */
mString a;
a = "Hello World";
/* Error : No viable conversion from 'const char[12]' to mString */
mString b = "Hello World";
return 0;
}
我不明白为什么 'mString b = "Hello World";' 不起作用而 'mString a; a= "Hello World";' 起作用。 我需要做什么才能让它发挥作用?
提前致谢!
这与赋值运算符没有共同之处。
你声明了这个构造函数
explicit mString(const char *str);
使用函数说明符 explicit
。
因此在这个声明中
mString b = "Hello World";
无法调用构造函数将字符串文字 "Hello World"
转换为 mString
.
删除函数说明符 explicit
,声明将编译。
或者您可以使用像
这样的直接初始化来代替上面声明中的复制初始化mString b( "Hello World" );
所以在这个声明中
mString b = "Hello World";
有使用过的构造函数。但是在这个表达式语句中
a= "Hello World";
确实用到了赋值运算符