【问题标题】:how a cpp function should return "-1" as char*?cpp 函数应如何将“-1”作为 char* 返回?
【发布时间】:2021-01-13 10:34:15
【问题描述】:

对于问题陈述,有一种情况是,返回char* 的cpp 函数需要将return 值作为-1。如何返回负整数值的char*?

函数正在解密mystring 并返回给定index 的字符的示例伪代码,如果未找到应返回-1:

char * decrypt(char *mystring, int index){.........................
//code for decrypt mystring
if (index is valid after decryption)
     return valid value
else 
     return '-1';
}

在上面的代码块中如何返回'-1'与char *兼容

【问题讨论】:

  • 这没有任何意义。如果你想返回一个“无效指针”返回一个nullptr
  • -1 不是字符,如果您打开编译器警告,它会告诉您不允许使用多字符字符文字。如果将返回值更改为const char*,则可以返回“-1”,但这真的很糟糕。
  • @UnholySheep 这是具体情况,如果没有找到,期望返回“-1”
  • 那你可以听从 Quimby 的建议,虽然这仍然是一个可怕的要求并且没有意义
  • 问题描述“返回给定索引处的字符”表示该函数应该只返回一个字符 - decrypted_string[index] - 而不是指针。如果描述正确,结果类型应该是char。

标签: c++ char


【解决方案1】:

如果没有找到应该返回-1:

这是一个糟糕的设计。指针有一种传统的方式来表示一个不指向任何东西的值:空指针。更常规的设计是在未找到结果时返回nullptr。

如果您使用任意值,例如 -1,调用者将很难确定未找到结果。


如何返回负整数值的char*?

示例(但请记住,这是一个糟糕的设计):

std::intptr_t negative = -1;
return reinterpret_cast<char*>(negative);

并返回一个字符

您的功能与您的描述相矛盾。该函数不返回字符;它返回一个指针。

【讨论】:

    【解决方案2】:

    在 C++17 中,您可以使用 std::optional (https://en.cppreference.com/w/cpp/utility/optional) 来适应这种情况(尽管您肯定需要更多经验)。

    【讨论】:

    • Optional 并不是最适合这项工作的工具。这完全取决于您希望谁拥有数据。
    猜你喜欢
    • 2021-12-26
    • 1970-01-01
    • 2019-12-31
    • 2020-02-21
    • 2014-06-27
    • 2011-08-05
    • 2020-03-26
    • 1970-01-01
    • 2018-01-10
    相关资源
    最近更新 更多