gpt4 book ai didi

c++ - 当出现不明确的默认参数时,C++ 编译器会做什么?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:17:27 25 4
gpt4 key购买 nike

当出现不明确的默认参数时,C++ 编译器会做什么?例如,假设有一个函数,例如:

void function(int a = 0, float b = 3.1);
void function(int a, float b =1.1, int c = 0);

以上是否被认为是模棱两可的?如果不是,编译器在调用 function1(10) 之类的东西时会做什么(函数如何精确匹配)?

谢谢!

最佳答案

下面是可以的

void function(int a = 0, float b = 3.1);
void function(int a, float b =1.1, int c = 0);

下面的也行

function(); // calls first function

但是下面是模棱两可的

function(1); // second and first match equally well

对于重载决议(告诉调用什么函数的过程),没有传递显式参数和使用默认参数的参数将被忽略。所以编译器确实看到两个函数都具有一个用于上述调用的 int 参数并且无法决定。

下面的格式不正确

void function(int a = 0, float b = 3.1);
void function(int a, float b =1.1);

虽然对于您问题中的代码,您声明了两个 函数(因为两个声明具有不同数量的参数),但在此示例中您只声明了一个 函数。但是它的第二个声明重复了参数的默认参数(甚至使用不同的值,但这不再重要了)。这是不允许的。注意下面的就可以了

void function(int a, float b = 3.1);
void function(int a = 0, float b);

出现在同一函数的同一范围内的声明的默认参数集被合并,并且仅适用于出现在同一范围内的那些。所以下面是有效的

void function(int a = 0, float b = 3.1);
void function1() {
void function(int a, float b = 1.1);
function(0);
}

这会调用为 b 传递的 1.1 函数。

关于c++ - 当出现不明确的默认参数时,C++ 编译器会做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3858344/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com