C++中调用函数时传入参数不足但代码仍能运行是什么原因?
问题原因
这是C的*默认参数(Default Parameter)*特性导致的,属于C的基础语法规则。
你给出的代码补全可运行版本如下:
#include <iostream> #include <string> using namespace std; void print(string str,int a=0) { cout<<str; } int main() { string str="hello world"; print(str); return 0; }
核心逻辑说明
- 你在定义
print函数的时候,给第二个参数a指定了默认值0,也就是int a=0的写法,这个参数就属于默认参数。 - 调用带默认参数的函数时,如果你没有手动给默认参数传值,编译器会自动把预设的默认值填充到对应参数位,你调用
print(str)的时候,实际运行时等价于调用print(str, 0),参数数量、类型完全匹配,所以不会报错,可以正常运行。
补充默认参数的常见规则
- 默认参数必须按照从右往左的顺序定义:如果某个参数被设为默认参数,那么它右侧的所有参数都必须是默认参数,例如
void test(int a, int b=1, int c)这种写法是非法的,编译会直接报错。 - 同一作用域内默认参数只能声明一次:通常默认参数写在函数声明中,函数实现的时候不需要重复写默认值,重复声明默认值也会触发编译错误。
- 默认参数的值必须是常量表达式,不能是运行时才能确定的变量。
内容的提问来源于stack exchange,提问作者Chiranjit Debnath
相关产品推荐
相关产品推荐

