【发布时间】:2011-02-20 03:50:36
【问题描述】:
我正在创建自己的字符串 class,并且我想确保 CString a = "Hello " + "World!"; 有效(即不会给出编译器错误,例如:cannot add 2 pointers)。
我的字符串class 会在需要时自动转换为char*,因此编写printf(a) 不会破坏代码。
有没有办法替换 characters 周围的编译器行为? (即在逗号之间,"abc")。或者,改变+ 操作符的行为来处理字符串?
【问题讨论】:
-
编写一个好的字符串类真的很难。 std::string 真的非常好。例如,隐式转换为 char* 在编写 printf(str); 时看起来是个好主意,但在编写 printf("%s\n", str); 时却是个糟糕的主意除非你非常小心,否则这是行不通的。 MFC 的 CString 设法像这样工作,而且它必须经历的可怕的脏跳转不值得费心(如果你删除 (char*)str 会严重失败)。除非您有充分的理由不(家庭作业?),否则我建议您不要编写自己的字符串类并使用 std::string
-
编写自己的字符串类的一个重要原因是学习......当然,在生产代码中,这是一个错误。
-
有更好的学习方法。弦乐类设计充满了巨大但微妙的陷阱,这些陷阱一次又一次地被绊倒——如果你的导师没有指出这些,你所做的就是记住它们并将它们应用到任何地方。
-
每个人都告诉我我所做的是一个错误,但每次我证明是错误的(迟早)。我只是不喜欢使用 std::string 并且喜欢使用更简单的东西。我整天都在这门课上工作,结果非常好。另一件事是,我真的想要一些不在 std::string 中的其他方法,因此派生它相当复杂(据我所知,它可能是一个不可派生的类),并且在方法时我会避免编写全局函数应该是方法。这只是为了内部开发,所以我认为这不是一个错误。
-
相信我——我以前写过我自己的字符串类,不止一次,而且不值得。该语言提供了一种优秀的语言,已经由对图书馆开发有很多了解的聪明人实施。如果您打算维护代码,编写自己的字符串类是浪费您的时间,您可能会花在功能上。如果有一些你不能用 std::string 做的事情,请考虑在这里提出一个问题——这可能是可能的,但你还没有看到怎么做。此外,非成员函数(全局使其听起来很糟糕)在 C++ 中占有一席之地。
标签: c++ string pointers operator-overloading