C++中字符串的重载运算符

overloading operator for string in c++

我有一个名为 Fstring 的 class,里面有一个 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;
}

但是没有用。编译器给我以下错误:

error C2440: 'initializing' : cannot convert from 'const wchar_t [12]' to 'Fstring'

我真的很困惑,我用谷歌搜索 "Overloading operators" 但所有结果都与我过去重载运算符的方式相同。那么为什么这不起作用?

当您看到 Type name = initializer 时,它没有使用赋值运算符。它正在声明一个变量,因此正在初始化(技术上 copy-initializationcopy-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'[=10=]'
}

您还必须实现复制构造函数。有关原因的更多信息,请参阅 What is The Rule of Three?


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