在C++中,有没有办法从返回类型为 string& 的函数中不返回任何内容?
In C++, is there a way to return nothing from a function which has a return type of string&?
我正在尝试实现以下子程序。
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是一个字符串。由于第三个参数最终可能为负数,我需要子程序忽略这些情况。
我收到以下错误:-
return-statement with no value, in function returning ‘std::string& {aka std::basic_string<char>&}’ [-fpermissive].
我有两个问题
1) 有没有一种方法可以从一个返回类型为void的函数中不返回任何内容
2) 什么时候可以使用不带任何内容或NULL的return关键字。
1) 有没有一种方法可以从一个返回类型为void的函数中不返回任何内容。
没有。如果你想让你的程序正常工作,就不要。
2) 什么时候可以使用不带任何内容或NULL的return关键字。
只有在返回类型为void
的函数中,才可以不带任何内容地使用return
关键字。在任何以指针(而非引用)类型作为返回类型的函数中,都可以将return
关键字与NULL
一起使用。
根据NULL
的定义,我想您也可以从以int
为返回类型的函数中返回NULL
,但只返回0更有意义。
不能这样做,因为将函数声明为string& sortAndMerge(string &u, int start, int end)
您承诺函数调用方返回字符串引用。因此,所有调用方都期望并等待获得字符串引用。所以编译器不允许违背这样的承诺(规则)。
要么必须返回所承诺的内容,要么重新定义函数以返回其他数据类型。如果需要返回不同的东西,可以考虑Enum
、Union
或其他东西。除此之外,您可以trow异常退出函数而不返回任何信息。但是它不认为执行适当的功能。
您可以始终使用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;
}
编辑:对不起,我没有看到它是什么时候发布的:/
是C++17结构,std::可选,它可能包含一个值,但也可能不包含。有些情况下,它只是没有值,包括许多算法中的第一个循环迭代。您可以将is检查为布尔值,以验证是否存在该值。
但是std::optional不适用于引用。如果您真的需要通过引用返回字符串(比如说它很长),请使用std::stringview代替:
std::optional<std::stringview> sortAndMerge(std::stringview u, int start, int end)
std::stringview内部不包含字符串,只包含对它的引用,因此复制成本很低,而且您不再需要手动处理引用。它有许多类似于std::string提供的方法,所以你可以用它做类似的事情
- C++小函数没有内联
- 可视代码 删除函数括号内的空格
- 构造函数主体内的本地指针C++内存泄漏
- 是否有任何内置的哈希图函数来处理 c++ 中的值输入?
- 'inline'变量可以像内联函数一样内联吗?
- 如何使默认析构函数非内联?
- 标准在哪里指定类中定义的函数是内联的?
- 函数重载:内置类型与用户定义类型
- 是否有任何内置函数可以检查给定的两个数字在给定整数数组中的顺序是否相同?
- 为什么在类外部(但在头文件中)定义的类成员函数必须内联?
- 递归函数的内联
- C++ 中是否有任何内置阶乘函数?
- 从传递给模板函数的内部类实例中提取外部类类型
- 是否有任何内置函数可以告诉编译器分支是否可预测
- C++默认参数构造函数与内联初始化优先级
- 函数停止内联.任何解释
- 在VC++2010中执行任何内置的ARRAY函数
- C++:如何在不使用任何内置函数的情况下将字符串转换为整数
- 是否有任何内置的CUDA函数允许CUDA内核向主机代码报告错误?
- 我如何在常数时间(O(1))内获得字母表(1-26)中字符的数值/位置,而不使用任何内置方法或函数