函数调用的实参按位置解析 缺省实参只能用来替换函数调用缺少的尾部实参。
// 等价于 screenInit('<<', 80, ' ')
// 错误: 在指定 height 之前, width 必须有一个缺省实参
// ff.h
int ff( int = 0 );
// ff.C
#include "ff.h"
int ff( int i = 0 ) { ... } // error
缺省实参在公共头文件包含的函数声明中指定 而不是在函数定义中 如果缺省实参在函数定义的参数表中提供 则缺省实参只能用在包含该函数定义的文本文件的函数调用中
已知下列在头文件 ff.h 中声明的函数声明:
int ff( int a, int b, int c = 0 ); // ff.h
怎样重新声明 ff() 来把缺省实参提供给 b?下列语句是错误的,因为它重新指定了 c 的缺省实参,
#include "ff.h"
#include "ff.h"
int ff( int a, int b = 0, int c ); // ok
在 ff()的重新声明中 b 是没有缺省实参的最右边参数。因此,缺省实参必须从最右边位置开始赋值的规则没有被打破 实际上,我们可以再次声明 ff()为
#include "ff.h"
int ff( int a, int b = 0, int c ); // ok
1 #include <iostream>
2 #include <vector>
3 using namespace std;
4 typedef unsigned int opbit;
5 void test(int a[5][]) //IF IT'S a[][5],IT WORKS WELL.
6 {
7 ;
8 }
9 int main()
10 {
11 int a[5][5];
12 test(a);
13 return 1;
14 }
lichao@lichao:~/Projects/temp$ g++ test.cpp
test.cpp:5: 错误: declaration of ‘a’ as multidimensional array must have bounds for all dimensions except the first
test.cpp: In function ‘int main()’:
test.cpp:5: 错误: 给予 function ‘void test()’ 的实参太多
// 等价于 screenInit('<<', 80, ' ')
cursor = screenInit('<<");
cursor = screenInit( , , '<<');
// 错误: 在指定 height 之前, width 必须有一个缺省实参
char *screenInit( int height = 24, int width,char background = ' ' );
// ff.h
int ff( int = 0 );
// ff.C
#include "ff.h"
int ff( int i = 0 ) { ... } // error
缺省实参在公共头文件包含的函数声明中指定 而不是在函数定义中 如果缺省实参在函数定义的参数表中提供 则缺省实参只能用在包含该函数定义的文本文件的函数调用中
已知下列在头文件 ff.h 中声明的函数声明:
int ff( int a, int b, int c = 0 ); // ff.h
怎样重新声明 ff() 来把缺省实参提供给 b?下列语句是错误的,因为它重新指定了 c 的缺省实参,
#include "ff.h"
int ff( int a, int b = 0, int c = 0 ); // 错误
(因为之前已经提供了int c 的默认值)
下列看起来错误的重新声明实际上是正确的#include "ff.h"
int ff( int a, int b = 0, int c ); // ok
在 ff()的重新声明中 b 是没有缺省实参的最右边参数。因此,缺省实参必须从最右边位置开始赋值的规则没有被打破 实际上,我们可以再次声明 ff()为
#include "ff.h"
int ff( int a, int b = 0, int c ); // ok
int ff( int a = 0, int b, int c ); // ok
缺省实参从最右边开始,不论数量是多少,都必须位于形参的最右边。
(待整理)
//LOOK AT THIS CODE1 #include <iostream>
2 #include <vector>
3 using namespace std;
4 typedef unsigned int opbit;
5 void test(int a[5][]) //IF IT'S a[][5],IT WORKS WELL.
6 {
7 ;
8 }
9 int main()
10 {
11 int a[5][5];
12 test(a);
13 return 1;
14 }
lichao@lichao:~/Projects/temp$ g++ test.cpp
test.cpp:5: 错误: declaration of ‘a’ as multidimensional array must have bounds for all dimensions except the first
test.cpp: In function ‘int main()’:
test.cpp:5: 错误: 给予 function ‘void test()’ 的实参太多
test.cpp:12: 错误: 在文件的这个地方
PS:还存在使用默认时如 test(int i = 0); 构造函数为test();
当使用test()时不知道该调用哪个的问题。
(待整理)