【问题标题】:Is the order of arguments in a function call important?函数调用中的参数顺序重要吗?
【发布时间】:2020-06-10 23:18:42
【问题描述】:

如果在函数中,参数按一定顺序列出

int foo( size_t bar, int baz )
{
  /* 
    Some very important  code here
  */
 return zap;
}

如果我这样称呼它有关系吗:

size_t size = 16;
int op = 19;
foo( size, op );

或者

foo( op, size); 

【问题讨论】:

  • 这取决于,对于可交换函数constexpr int add(int a, int b) {return a+b;} static_assert(add(42, 58) == add(58, 42)); 它是相同的,但对于非可交换函数constexpr int sum(int a, int b) {return a-b;} static_assert(sum(42, 58) == sum(58, 42));。不一样

标签: c++ c function arguments


【解决方案1】:

是的,这很重要。参数必须按照函数期望的顺序给出。

C 按值传递参数。除了按位置,它无法将值与参数相关联。

您在传递给函数的参数中使用的名称无关紧要。 C 不会检查参数名称来确定它们应该与哪些参数相关联。通常,参数可能是表达式,而不仅仅是名称,并且像 574+8 这样的参数并不表示它应该是哪个参数。

【讨论】:

  • 除了用户之外,还有什么特别的原因吗?
  • @Jordan 你希望编译器如何决定它应该以什么顺序将参数映射到参数?请注意,opsize 都可以转换为 size_tint。所以两个订单都是可能的。
  • 如果两个参数的类型相同,并且被对称处理,比如int add(int x, int y) { return x + y; },那么顺序无关紧要。但这种情况很少见。
  • @Jordan 你也可以有多个相同类型的参数。如果您打折他们的订单,就不可能区分他们。
  • 我记得 Pre-ANSI C 的美好时光。您可以真正享受参数排序的乐趣。想想那些时候,他们真的不是那么好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-17
  • 1970-01-01
相关资源
最近更新 更多