返回指向char *的指针是否合乎逻辑?

时间:2011-01-19 21:37:51

标签: c++ api function char return

那么如何使用这样的东西创建这样的愚蠢的嵌套函数:Z.reset(...C.reset(B.reset(A.get()))...)所以函数会像

一样
    char * reset(char * buffer)
    {
        ... 
                    return buffer;

    }

所以...我的问题是 - 你会向人们展示的C ++简单API中是否可以接受这样的东西?

4 个答案:

答案 0 :(得分:4)

我诚实的回答是你不应该在C ++中这样做,因为你不应该在C ++中使用C风格的字符串。 : - )

但是,是的,这样做是好习惯,因为它可以避免不必要的低效率损失。请参阅关于Shlemiel the Painter的this post by Joel Spolsky,了解其原因。

答案 1 :(得分:3)

完全可以接受,但是,

您不应在C ++中使用char*。请改用std::string

答案 2 :(得分:2)

从技术上讲,这是允许的。严格来说,这是可以接受的。但我仍然不会这样做。

我能想到设计这样一个函数的唯一原因是支持Method Chaining,我认为这是令人厌恶的。 Opinions on this differ。你可能会喜欢他们,认为他们很好并且很好表达,对IntelliSense有益,你有什么。实际上,有时甚至可能是正确的事情。

方法除了链接,我看不出你想要的东西。事实上,我认为它会让你得到一些你不想要的东西:困惑的语义。如果有人正在查看您的头文件,他们将会看到此返回并想知道他们为什么需要它。他们可能认为这不是什么,就像他们必须管理的记忆或其他东西。谁知道。但语义并不完全清楚。所以我会避免它。

答案 3 :(得分:1)

好吧,如果你首先传递一个char *并修改它,我认为不需要返回它。我认为char * reset(char * buffer)应该是签名的唯一一次是,如果你发生了一些不应该发生的错误信息。