正文

Thinking in C++:3 The C in C++2006-10-21 21:01:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/wenzhuo316/19589.html

分享到:

1.       The enum keyword (from C) automatically enumerates any list of identifiers you give it by assigning them values of 0, 1, 2, etc. You can declare enum variables (which are always represented as integral values). The declaration of an enum looks similar to a struct declaration.

2.       You’ll notice this in particular if you have an instance of an enumeration color called a. In C you can say a++, but in C++ you can’t. This is because incrementing an enumeration is performing two type conversions, one of them legal in C++ and one of them illegal. First, the value of the enumeration is implicitly cast from a color to an int, then the value is incremented, then the int is cast back into a color. In C++ this isn’t allowed, because color is a distinct type and not equivalent to an int.

3.       Anytime you place a value in a union, the value always starts in the same place at the beginning of the union, but only uses as much space as is necessary. Thus, you create a “super-variable” capable of holding any of the union variables. All the addresses of the union variables are the same (in a class or struct, the addresses are different).

4.       An array identifier is not a value; you cannot assign to it. It’s really just a hook into the square-bracket syntax, and when you give the name of an array, without square brackets, what you get is the starting address of the array.数组标识符不是左值,不能给它赋值。他只是一个进入方括号语法的手段,……

5.        int main(int argc, char* argv[]) {  ...}       The first argument is the number of elements in the array, which is the second argument. The second argument is always an array of char*, because the arguments are passed from the command line as character arrays (and remember, an array can be passed only as a pointer). Each whitespace-delimited cluster of characters on the command line is turned into a separate array argument. argv[0] is the path and name of the program itself. This allows the program to discover information about itself. It also adds one more to the array of program arguments, so a common error when fetching command-line arguments is to grab argv[0] when you want argv[1].

6.        void * (*(*fp1)(int))[10]; NOTE: fp1 is a pointer to a function that takes an integer argument and returns a pointer to an array of 10 void pointers.

7.        float (*(*fp2)(int,int,float))(int); NOTE: fp2 is a pointer to a function that takes three arguments (int, int, and float) and returns a pointer to a function that takes an integer argument and returns a float.

8.        typedef double (*(*(*fp3)())[10])();  fp3 a; NOTE: An fp3 is a pointer to a function that takes no arguments and returns a pointer to an array of 10 pointers to functions that take no rguments and return doubles. Then it says “a is one of these fp3 types.”

9.        int (*(*f4())[10])(); NOTE: f4 is a function (without brackets it’s just a function not a point of function) that returns a pointer to an array of 10 pointers to functions that return integers.

阅读(4309) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册