在C ++中,是否有一种方法可以从函数返回任何内容,该函数的返回类型为string&?

时间:2015-10-27 06:23:57

标签: c++ function

我正在尝试实现以下子例程。

string& sortAndMerge(string &u, int start, int end){
    if(end>=0){

        int mid=(start+end)/2;

        if(start<end){
            sortAndMerge(u,start,mid);
            sortAndMerge(u,mid+1,end);
            return merge(u,start,mid,end);
        }
    }
    return;
}

该函数被称为sortAndMerge(s,0,s.length() - 1),这里s是一个字符串。由于第3个参数最终可能是负数,我需要子程序来忽略这些情况。

我收到以下错误: -

return-statement with no value, in function returning ‘std::string& {aka std::basic_string<char>&}’ [-fpermissive].

我有两个问题 1)有没有办法可以从具有除void之外的返回类型的函数中返回任何内容 2)什么时候可以使用return关键字,没有任何内容或NULL。

3 个答案:

答案 0 :(得分:7)

  

1)有没有办法可以从具有除void之外的返回类型的函数中返回任何内容。

没有。如果您希望自己的计划有效,请不要这样做。

  

2)什么时候可以使用return关键字什么都不是NULL。

您只能在返回类型为return的函数中使用void关键字。您可以在任何具有指针(非引用)类型的函数中将return关键字与NULL一起用作其返回类型。

根据NULL的定义方式,我想您也可以从NULL作为返回类型的函数返回int,但返回0会更有意义。

答案 1 :(得分:4)

你不能这样做,因为你的功能声明为
string& sortAndMerge(string &u, int start, int end)

您希望函数调用者返回字符串引用。所以所有调用者都期望并等待获取字符串引用。所以编译器不允许打破这样的承诺(规则)。

您必须返回您的承诺或重新定义函数以返回其他数据类型。如果您需要返回不同的内容,可以考虑EnumUnion或其他一些事情。除此之外,您可以抛出异常退出函数而不返回任何内容。但它不认为是正确的函数执行。

答案 2 :(得分:0)

您始终可以将bool用作返回类型

bool do(int& tryInt, int s, int e)
{
  if(s>5 || e<0)
    return false;
  tryInt= s + e;
    return true;
}

int main()
{
  int tryInt = 0;
  int myInt = do(tryInt,6,4)? tryInt : 0;
}

编辑:对不起,我什么时候没有看到它:/