在C ++中转换为字符串运算符重载

时间:2015-01-28 15:19:00

标签: c++ c++11 casting operator-overloading overloading

我正在开发一个具有以下签名的方法的类:

operator const std::string & () const

它被记录为“强制转换为字符串运算符”。 我想知道如何有效地调用它。不幸的是以下表达式:

std::string(foo)

产生此错误:

some_test.cpp:13:41: error: no matching function for call to'
std::basic_string<char>::basic_string(Foo (&)(std::string))'

考虑foo的类型为Foo,声明并实例化为Foo foo(std::string(filename))

作为C ++的前身,这让我有点困惑。这有什么暗示?

2 个答案:

答案 0 :(得分:1)

  

foo的类型为Foo,声明并实例化为Foo foo(std::string(filename))

这是一个函数声明,将filename解释为函数参数的名称,相当于

Foo foo(std::string filename);

变量声明看起来像

Foo foo(filename);

或者,如果您需要显式转换(您可能不在此处)

Foo foo{std::string(filename)};        // C++11 or later
Foo foo = Foo(std::string(filename));  // historic dialects

答案 1 :(得分:0)

如果您对operator const std::string & () const的用法提出疑问,则非常简单:当您需要转换为std::string时,会使用此运算符。示例:

Foo foo(filename);

std::string s = foo; // uses the declared operator const std::string & () const