C 中字符串的过载操作员

overloading operator for string in c++

本文关键字:操作员 字符串      更新时间:2023-10-16

我有一个名为 Fstring的类,其中有一个 wchar_t*

我写了以下内容,将字符串文字复制到 Fstring

#include <iostream>
using namespace std;
class Fstring{
    wchar_t *arr;
public:
    Fstring& operator = (const wchar_t temp[])
    {
        delete [] arr;
        arr=new wchar_t[wcslen(temp)];
        for(int i=0;i<=wcslen(temp);i++)
            arr[i]=temp[i];
        return *this;
    }
};
int main()
{
    Fstring test=L"Hello World";
    return 0;
}

,但它行不通。编译器给我以下错误:

错误c2440:'初始化':不能从'const wchar_t [12]'转换 到" fstring'

我真的很困惑,我搜索了"超载运算符",但所有结果都与用来超载运算符的方式相同。那么为什么这不起作用?

当您看到Type name = initializer时,它不会使用分配操作员。它正在声明一个变量,因此正在初始化(技术上 copy-initialization copy-list-initialization (。这意味着它称为构造函数。由于您没有采用const wchar_t*的构造函数,您将获得错误。

您需要的是实现一个构造函数,该构造函数使用const wchar_t*并初始化arr。看起来像

Fstring(const wchar_t temp*) : arr(new wchar_t[wcslen(temp) + 1])
{
    size_t size = wcslen(temp);
    for(int i = 0; i < size; i++)
        arr[i] = temp[i];
    arr[size] = L''
}

您还必须实现复制构造函数。有关为什么三个规则是什么?


请注意,您正在重新发明轮子。如果您想要一个宽字符串,可以使用为您完成所有这些的std::wstring