You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++中如何正确声明带默认参数值的函数?

C++函数默认参数的正确写法

在C++中,函数的默认参数规则是:默认参数只能在函数声明中指定一次,不能同时在声明和定义中重复设置。

你遇到的第一个错误:

Error C2572 'sum': redefinition of default argument: parameter 1

这是因为在函数声明和定义里都给skip_value设置了默认值100,属于重复定义默认参数。

修改后又出现第二个错误:

Error C2660 'sum': function does not take 1 arguments

原因是你去掉了声明里的默认参数,但定义里的默认参数对编译器的调用阶段不可见——编译器在编译main函数时,只会参考函数声明,此时它认为sum需要两个参数,所以你传一个参数就会报错。

正确写法

只在函数声明中指定默认参数,定义中省略默认参数即可:

import <print>;
import <vector>;
import <optional>;

// 声明中指定默认参数
std::optional<int> sum(std::vector<int> nums, int skip_value = 100);

int main()
{
  std::vector<int> nums { 10, 20, 30, 100 };
  std::optional<int> result = sum(nums); // 此时可以只传一个参数,使用默认值100
  if (result.has_value()) {
    std::println("sum = {}", result.value());
  }
  else {
    std::println("no results were found");
  }
}

// 定义中不再写默认参数
std::optional<int> sum(std::vector<int> nums, int skip_value) {
  int result { 0 };
  for (const auto& num : nums) {
    if (num != skip_value)
      result += num;
  }
  if (result == 0) {
    return { };
  } else {
    return result;
  }
}

补充场景

如果你的代码没有单独的函数声明(比如函数定义写在main函数之前),那可以直接在定义中指定默认参数,这种情况是允许的:

import <print>;
import <vector>;
import <optional>;

// 直接在定义中指定默认参数,无需单独声明
std::optional<int> sum(std::vector<int> nums, int skip_value = 100) {
  int result { 0 };
  for (const auto& num : nums) {
    if (num != skip_value)
      result += num;
  }
  if (result == 0) {
    return { };
  } else {
    return result;
  }
}

int main()
{
  std::vector<int> nums { 10, 20, 30, 100 };
  std::optional<int> result = sum(nums);
  if (result.has_value()) {
    std::println("sum = {}", result.value());
  }
  else {
    std::println("no results were found");
  }
}

内容的提问来源于stack exchange,提问作者JohnyL

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 06:07:40