如何使用对象初始化字符串?

时间:2014-10-30 00:12:57

标签: c++ string

所以我想知道我是否可以在C ++中执行以下操作。

#include <string>

using namespace std;

class foo
{
    public:
        string bar;
        string baz;

    foo(const string &faz)
    :bar(faz)
    {
    };
};

int main()
{
    const foo foo1("somestring");
    bool isTrue = ((std::string(foo1) == "some string");//This should be true
    return 0;
}

如何使std::string(foo1)等于"some string"?我需要使用一些特殊的变量名吗?或者还有其他我需要做的事情吗?如果你知道,请告诉我

1 个答案:

答案 0 :(得分:2)

你基本上有两个选择:

  1. 添加转换运算符,以便foo可以隐式转换为string
  2. operator==定义foo
  3. 第一个选项起初可能看起来很有吸引力,但是使用转换运算符的代码很快就会失控 - 重载分辨率非常棘手,因为它没有添加更多可能的路径。

    operator==版本非常简单(请注意,通过使其成为非成员,您允许char数组显示在==的左侧):

    bool operator==( foo const &f1, foo const &f2 )
    {
         return f1.bar == f2.bar;
    }
    

    您可以使用它:

    bool isTrue = (foo1 == "some string");
    

    这与char数组匹配,因为foo具有转换构造函数,而隐式转换链char[] - &gt; char * - &gt; const std::string &发生了。