在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 ++标准中。     

要回复问题请先登录注册