Function default argument value depending on argument name in C++(函数的默认参数值取决于C++中的参数名称)
本文介绍了函数的默认参数值取决于C++中的参数名称的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
如果在C++中定义了一个新变量,则可以在初始化表达式中使用该变量的名称,例如:
int x = sizeof(x);
函数参数的缺省值怎么办?是否允许在那里按名称引用参数?例如:
void f(int y = sizeof(y)) {}
此函数在Clang中被接受,但在GCC中被拒绝,错误为:
'y' was not declared in this scope
演示:https://gcc.godbolt.org/z/YsvYnhjTb
哪个编译器在这里?
推荐答案
根据C++17标准(11.3.6默认参数)
9每次调用函数时都会计算默认参数 没有相应参数的实参。参数应为 不会在默认情况下显示为可能求值的表达式 参数。在默认之前声明的函数的参数。 参数在作用域中,可以隐藏命名空间和类成员名称
提供以下示例:
int h(int a, int b = sizeof(a)); // OK, unevaluated operand
因此,此函数声明
void f(int y = sizeof(y)) {}
是正确的,因为在此表达式中sizeof(y)
,y
不是求值操作数,根据C++17 8.3.3 Sizeof:
1sizeof运算符得出对象中的字节数 其操作数的表示形式。操作数可以是一个表达式, 它是未计算的操作数(第8条)或带括号的 Type-id。
和C++17 6.3.2声明点:
1名称的声明点紧跟在其 完成声明(第11条),并在其初始值设定项(如有)之前, 但以下说明除外。
这篇关于函数的默认参数值取决于C++中的参数名称的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:函数的默认参数值取决于C++中的参数名称


基础教程推荐
猜你喜欢
- 如何在 C++ 中处理或避免堆栈溢出 2022-01-01
- 如何定义双括号/双迭代器运算符,类似于向量的向量? 2022-01-01
- 设计字符串本地化的最佳方法 2022-01-01
- C++ 程序在执行 std::string 分配时总是崩溃 2022-01-01
- C++,'if' 表达式中的变量声明 2021-01-01
- 调用std::Package_TASK::Get_Future()时可能出现争用情况 2022-12-17
- 您如何将 CreateThread 用于属于类成员的函数? 2021-01-01
- C++ 标准:取消引用 NULL 指针以获取引用? 2021-01-01
- 什么是T&&(双与号)在 C++11 中是什么意思? 2022-11-04
- 运算符重载的基本规则和习语是什么? 2022-10-31