【问题标题】:Does std::wstring_convert instances change when they are used?std::wstring_convert 实例在使用时会发生变化吗?
【发布时间】:2014-12-12 20:05:44
【问题描述】:

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

   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(""));
}

现在一切都编译好了,所以不用怀疑谁在改变。

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

【问题讨论】:

    标签: function c++11 constants


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-07
      • 1970-01-01
      • 2012-12-12
      • 2015-09-06
      • 1970-01-01
      • 2016-05-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多