为什么现有的函数参数不能用于计算其他默认参数?
我正在编写一个函数 foo()
,它接受 2 个 const char*
作为参数,pBegin
和 pEnd
。 foo()
被传递一个以 null 结尾的字符串。默认情况下,pEnd
指向字符串的\0
(最后一个字符)。
void foo (const char *pBegin,
const char *pEnd = strchr(pBegin, 0)) // <--- Error
{
...
}
但是,我在上面一行收到错误:
error: local variable ‘pBegin’ may not appear in this context
为什么编译器不允许这样的操作?潜在的问题是什么?
I was writing a function foo()
which takes 2 const char*
s as arguments, pBegin
and pEnd
. foo()
is passed a null terminated string. By default pEnd
points to \0
(last character) of the string.
void foo (const char *pBegin,
const char *pEnd = strchr(pBegin, 0)) // <--- Error
{
...
}
However, I get an error at above line as:
error: local variable ‘pBegin’ may not appear in this context
Why compiler doesn't allow such operation ? What's the potential problem ?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
该标准不仅明确禁止在默认参数表达式中使用其他参数,而且还解释了原因并给出了示例:
The standard not only explicitly disallows the use of other parameters in a default argument expression, but also explains why and gives an example:
该语言仍然提供了一种方法来完成您想要的操作 - 使用重载函数:
The language still offers a way to do what you want - use overloaded functions:
调用函数时,将对默认参数进行求值,但 C++ 标准未定义它们的求值顺序。这意味着您无法在默认参数中引用其他参数,因为它们可能尚不具有已知值。
When the function is called the default arguments are evaluated, but the order they are evaluated is not defined by the C++ standard. That means that you can't reference other parameters in a default argument because they may not have a known value yet.
您不能在默认参数值中使用局部变量。
引用自此处:
You can't use a local variable in a default argument value.
Quote from here: