std :: wstring_convert实例在使用时是否会发生变化?

时间:2014-12-12 20:05:45

标签: function c++11 const

我已经看到了几个与此有关联的问题。但没有一个答案让我信服。我有以下课程:

   class Foo
    {
    public:

        void bar() const
        {
            wstring unicode_string = m_convertor.from_bytes(string("")); // 1
        }

    private:
        std::wstring_convert<std::codecvt<wchar_t, char, std::mbstate_t>> m_convertor;
    };

此时它会编译。但是如果我将Foo::bar()更改为常量...

void bar() const
{
    // ...
}

失败并出现错误:

  

... 4次重载没有'this'指针的合法转换......

你可以在代码中看到点 1 ,我正在将一个临时对象传递给from_bytes函数,所以唯一认为可以改变的就是它自己的m_convertor实例

我做了以下事情:

void bar() const
{
    std::wstring_convert<std::codecvt<wchar_t, char, std::mbstate_t>> convertor;
    wstring unicode_string = convertor.from_bytes(string(""));
}

现在所有编辑都没问题,所以毫无疑问谁在改变。

现在我正在使用该函数的非const版本,但想知道为什么会发生这种情况。

1 个答案:

答案 0 :(得分:2)

std::string_convert::from_bytes不是const成员函数,而且标记的内容是什么。如果转换器的状态不能反映Foo的状态,那么您可以声明转换器成员mutable