如何用对象初始化字符串? 所以我想知道我是否可以在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::stringfoo1等于某个字符串?是否需要使用一些特殊的变量名?或者我还需要做些什么?如果您知道,请告诉我您基本上有两种选择: 添加一个转换运算符,以便foo可以隐式转换为字符串 为foo定义运算符==。 第一个选项一开始看起来很吸引人,但是使用转换操作符的代码很快就会失控——重载解析已经足够棘手了,因为它不需要添加更多可能的路径 运算符==版本非常简单,注意,通过将其设置为非成员,您可以允许字符数组显示在==的左侧: 你会像这样使用它:如何用对象初始化字符串? 所以我想知道我是否可以在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; },c++,string,C++,String,如何使std::stringfoo1等于某个字符串?是否需要使用一些特殊的变量名?或者我还需要做些什么?如果您知道,请告诉我您基本上有两种选择: 添加一个转换运算符,以便foo可以隐式转换为字符串 为foo定义运算符==。 第一个选项一开始看起来很吸引人,但是使用转换操作符的代码很快就会失控——重载解析已经足够棘手了,因为它不需要添加更多可能的路径 运算符==版本非常简单,注意,通过将其设置为非成员,您可以允许字符数组显示在==的左侧: 你会像这样使用它: bool isTrue = (foo1
bool isTrue = (foo1 == "some string");
这与char数组匹配,因为foo有一个转换构造函数,并且隐式转换链char[]->char*->const std::string&发生了。您可以添加一个转换运算符,但这些运算符通常会被降级到实际有用的特定情况下。@CaptainObvlious我想这是用于结构的?你能具体说明你在回答中的意思吗?请容忍我,我是新手。运算符字符串常量{return BLAH;}hmmm。结构和类之间的唯一区别是默认访问,即私有与公共。转换运算符是运算符T const,其中T是要转换为的类型。@NeilKirk Kirk我将把它放在我的代码中的什么位置?假设他想按bar成员进行比较。实际上并没有说明应该如何进行比较。我不认为使用转换运算符会失去控制。我只使用它返回对象的单个成员字符串。另外,在我的实际代码中,我需要使用BOOST\u REQUIRE\u EQUALsome字符串std::stringfoo1;所以我不能使用运算符==version。
bool isTrue = (foo1 == "some string");