这里的=并不是调用构造函数,而是拷贝赋值函数,子类要实现赋值,必须要自己写操作符函数,可以参考https://blog.csdn.net/weixin_50617754/article/details/112689530
的第五点
#include <iostream>
#include <string>
class u32stringex : public std::u32string
{
public:
u32stringex(void);
u32stringex& operator=(const char32_t* str) {
std::u32string::operator=(str);
return *this;
}
};
u32stringex::u32stringex(void)
: std::u32string() //这里写不写都可以,不写也会自动调用父类的默认构造函数
{
}
int main(void)
{
u32stringex text1;
text1 = U"xx"; // 不再报错
std::u32string t;
t = U"xx";
return 0;
}
要写成构造函数也需要写自己实现构造
#include <iostream>
#include <string>
class u32stringex : public std::u32string
{
public:
u32stringex(const char32_t* str) :std::u32string(str) {}
u32stringex(void);
};
u32stringex::u32stringex(void)
: std::u32string()
{
}
int main(void)
{
u32stringex text1(U"xx"); //这才是调用构造函数,参数类型可以转换为const char32_t*
u32stringex text2 = U"xx";//这才是调用构造函数
std::u32string t;
t = U"xx";
return 0;
}
如有帮助,请采纳,谢谢。