C+;中需要返回和不需要返回时+; 我在做一些自学的C++时做了一点实验,发现在从函数中删除返回语句之后,执行我编译的代码运行相同。下面是一个小示例代码——如果我要删除该行 return numb;
代码就像它在那里一样运行C+;中需要返回和不需要返回时+; 我在做一些自学的C++时做了一点实验,发现在从函数中删除返回语句之后,执行我编译的代码运行相同。下面是一个小示例代码——如果我要删除该行 return numb;,c++,return,C++,Return,代码就像它在那里一样运行 #include <iostream> using namespace std; class TheClass { public: int aNumber(int n) { numb = n; return numb; } void print
#include <iostream>
using namespace std;
class TheClass {
public:
int aNumber(int n) {
numb = n;
return numb;
}
void printOnScreen() {
cout << numb << endl;
}
private:
int numb;
};
int main() {
TheClass exampleObject;
exampleObject.aNumber(5);
exampleObject.printOnScreen();
return 0;
}
#包括
使用名称空间std;
分类{
公众:
整数个数(整数n){
numb=n;
回归麻木;
}
void printOnScreen(){
coutReturn不能返回值,如果函数声明为void
,则不需要该值
在所有其他情况下,返回值;
必须存在。当函数声明为int main(…)
时,一个例外是main
函数(典型的变体包括int main(void)
,int main(int argc,char**argv)
)。在这种情况下,return
可能会被忽略,函数执行流的结束相当于隐式的return 0;
。即使允许对main
执行此操作,大多数编译器仍会发出警告
但是,如果您的
main
函数被定义为void main(…)
(这也是允许的),此警告不会出现,这完全正常-再次因为它被声明为void
类型。如果将函数定义为返回值,则无论是否指定值,都会返回值。但是,如果省略return
语句,返回值将是随机的,因为无论发生什么情况s位于用于返回值的寄存器中。
根据调用函数的方式,如果忽略该值,这可能不会导致任何问题,但这是一种不好的做法,因为您无法知道该值是否被忽略。如果不需要返回值,则将函数声明为void。除非它是
main
,否则将其删除是未定义的行为。您应该会收到一些警告如果你不回来numb@chris你应该回答这个问题(或者从许多重复的答案中找到一个:-)哪种代码是非法的C++,没有<代码>返回<代码>,应该给出编译器错误。你确定你没有忽略错误并运行以前编译的程序吗?@ JuangopANZA,确切地说,很多重复。几乎是正确的。在C++中,Main有一个隐式返回0,没有返回,所以PE的许多实现RMIT省略了返回实际上是应用标准。关键是它是标准行为,所以不允许非标准的实现。您的措辞使它听起来好像是另一种方式。- 1:这个答案是误导的。答案是正确的,在问题从C到C++之前改变。标题。请,请服用安定片!让别人为别人的“不公平”买单是不“公平”的C++和C99都具有隐式<代码>返回0;规则用于<代码>主< /C>函数>,并且它们都不允许<代码>主< /COD>方法返回void main
,大多数编译器都允许这样做,并且只在您将警告级别调到应该开始的位置时才会发出警告。返回值不能是随机的,因为您不能忽略定义为返回值的函数的返回(有一个例外,但即使如此,它也不是随机的,而是0)。它是随机的,因为它是不可预测的。它是在EAX
中发生的任何事情(至少在英特尔平台上)。在其他平台上,它是执行返回时设计的机制包含的任何内容。同样,不可能返回随机数据-如果不存在返回,您的代码将无法编译(对于非void函数)。有一个例外情况是可以合法地省略return,但即使这样,它也相当于return 0;
-这远远不是随机的。您应该真正开始了解编译器的工作方式以及在计算机级别上函数之间如何传递数据。是的,您可以编写一个没有返回值的函数,并且会收到警告。I h我打开了pedantic和wall,在开发原型时,我经常收到警告。当然,如果你强迫编译器关闭并让你忽略return语句,垃圾将被返回——我对此没有异议。但是,通常情况下,你不能/不应该这样做。如果你不这样做,返回垃圾是不可能的。