如何解决在C ++函数中支持默认的第一个参数的历史
| 正如该问题重申的那样,可以为C ++函数中的第一个参数提供默认参数。所以下面void foo(int a,int b=5); // good
void foo(int a=5,int b=5); // used to be an error
void foo(int a=5); // used to be an error
但是,我记得在编程教育的早期就知道这是不允许的。从什么时候开始改变?哪些C ++标准消除了此限制?由于我是在Visual Studio中进行大部分早期编程的,所以这可能甚至不是标准问题,而是特定的编译器限制,如果您这样做,您还记得哪个(大约)编译器版本有此限制吗?
解决方法
1998年唯一的官方c ++标准具有它们,因此从技术上来讲,该标准始终具有它们。在此之前,甚至是通常被认为是C ++的第一个准标准,Bjarne Stroustrup的《 C ++编程语言》一书也提到了它们。这是Strousrup在开发C ++时首先添加到ANSI C中的内容之一。但是由于该标准不是官方的,因此可能存在不支持该标准的编译器。
, 你说:
void foo(int a=5); // used to be an error
从来没有这样。你记得错了。
, 我认为您误解了您所提到的问题及其答案。仅要求如果第n个参数具有默认值,则所有后续参数也必须也具有默认值。一直都是这样。从来没有任何特定的规则规定第一个参数不能具有默认值。请注意,将默认参数全部放在同一声明中并不重要。以下也可以。
void f(int x = 9,int y);
//using f here is an error
void f(int x,int y = 10);
//using f here is OK now
, 截至今天(2011年6月),只有一个C ++标准。因此它必须在1998年的C ++标准中。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。