我已经看到了几个与此有关联的问题。但没有一个答案让我信服。我有以下课程:
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版本,但想知道为什么会发生这种情况。
答案 0 :(得分:2)
std::string_convert::from_bytes
不是const成员函数,而且标记的内容是什么。如果转换器的状态不能反映Foo
的状态,那么您可以声明转换器成员mutable
。