众所周知,c++定义函数的格式是这样的:
返回值类型 函数名 (参数列表){
函数体语句;
return 表达式;
}
如果不需要返回值,那么返回类型就写void
。
viod 函数名 (参数列表){
函数体语句;
}
但是,今天我写代码时,不小心忘记了void
怎么写,于是就先暂时写成了这样:
space (){
for (int j=0; j<(n-i)/2; ++j){
cout<<" ";
}
}
/*
应该是这样的:
void space (){
for (int j=0; j<(n-i)/2; ++j){
cout<<" ";
}
}
*/
结果写完代码后我就粗心大意的直接运行了。
于是就发现了新大陆,编译器居然没有报错,也正常运行了!
# include <bits/stdc++.h>
using namespace std;
int n, i;
space (){ //原本应该写成 void space(){
for (int j=0; j<(n-i)/2; ++j){
cout<<" ";
}
}
out (){ //原本应该写成 viod out(){
for (int j=0; j<i; ++j){
cout<<"*";
}
}
int main (){
cin>>n;
for (i=1; i<n; i+=2){
space();
out();
cout<<endl;
}
for (i=n; i>=1; i-=2){
space();
out();
cout<<endl;
}
return 0;
}
一大奇迹。
后来,我又好奇的试了有返回值的函数会当做int
处理:
# include <bits/stdc++.h>
using namespace std;
double p=3.14159, r;
d (){ //此处应该是 double d (){ C++当做 int d (){
return 2*r;
}
C (){ //此处应该是 double C (){ C++当做 int C (){
return p*d();
}
S (){ //此处应该是 double S (){ C++当做 int S (){
return 2*p*r;
}
int main (){
cin>>r;
cout<<"d:"<<d()<<'\n'<<"C:"<<C()<<'\n'<<"S:"<<S();
return 0;
}
综上,C++定义函数默认类型为int
;类型非为viod
的函数不写返回值也是可以通过的。
返回值类型(选写) 函数名(必写) (参数列表(选写)){
函数体语句; //(选写)
return 表达式; //(选写)
}