C++学习笔记(4)
2005-08-30 20:44
267 查看
17[/b].函数调用方式
[/b]_stdcall表示指定这个函数采用_stdcall方式。这种调用方式有如下特征: (1)调用时,参数从右到左压入堆栈。 (2)被调用的函数负责清除堆栈。 (3)编译时函数名前加“_”,在函数名后加“@paraLength”。其中paraLength为所有参数以字节为单位的长度。 如果不指定函数采用_stdcall方式的时候,则采取C/C++默认的调用方式_cdecl(它的缩写是“C declaration”)。这种调用方式有如下特征:(1)调用时,参数从右到左压入堆栈。(2)调用的函数负责清除堆栈。(3)编译时在函数名前加“_”。18[/b].基本的非托管类型和托管类型的对应表
[/b]
19[/b].不同类型的数据互相转换时要注意的问题。
[/b] (1)无符号类型的数据与有符号类型的数据之间的转换。 无符号数据的比特位可以被编译器解释为有符号数据,如无符号短整数60000,它 会被编译器解释为有符号短整数-5536。(暂时不知它怎么转的) (2)由函数重载和默认参数产生的歧义性。由于重载使得可以向相同的函数名传递数据类型不相同的参数,又由于C++的自动类型转换机制,C++会自动尝试将调用函数的实际参数类型转换为函数的形式参数的类型。如有下面的函数定义:foo(float a); foo(double b);函数调用:foo(10);这就产生歧义了,因为编译器不知将10转成float型还是double型。编译器会将这个歧义性报告出错信息:error C2668: 'foo' : ambiguous call to overloaded function另外,由于有默认参数,可能会产生参数个数的歧义。如有下面的函数定义:foo(int a);foo(int b,int c = 1);函数调用:foo(10)也产生了歧义,因为编译器不知foo(10)是调用foo(int a)还是缺省调用foo(int b,int c = 1);报错:error C2668: 'foo' : ambiguous call to overloaded function
20[/b].字符转义序列
[/b] /b 退格:删除最后一个字符 /f 换页/n 换行/r 回车/t 水平制表符/” 双引号/’ 单绰号// 后斜线/v 垂直制表符/a 喇叭嗡鸣/? 问号(?)/N 八进制常量(其中N是一个八进制数值)/xN 十六进制常量(其中N是一个十六进制数值)21[/b].非标准C++[/b]定义的头文件必需有.h
[/b] 如#include <conio.h>22[/b].goto[/b]语句的一个用法
[/b] 使用goto语句可以从一段嵌套很深的代码中跳出,如: for(…){ for(…){ while(…){ if(…) goto stop; … … … } } { stop: cout<< “ Error happened!/n”; break语句只能从最内层的循环退出。23[/b].指针的数学运算
[/b] 可以对指针进行增量或减量运算,还可以将指针与整数作加减运算。 不能将指针与指针相加,但可以将指针与指针相减。相减的运算结果是在两个指针之间所包含的基本类型元素的数量。如下例: int main(){ int *p,*q,a[20]; p = a; q = &a[9]; cout<<p - q<<endl;//result is -9
return 0;}24[/b].返回引用
[/b] [/b]函数可以返回引用。当函数返回引用时,它返回的是一个指向返回值的隐式指针。如下例:#include <iostream>using namespace std;double &f();//define a function that return a reference
int main(){ f() = 99.3; cout<<f()<<'/n'; return 0;}double &f(){ return val;} 因为f()返回的是val的引用,而该引用则成为赋值语句的目标变量,因此,99。3通过由f()所返回的引用被间接地赋给了val。
[/b]_stdcall表示指定这个函数采用_stdcall方式。这种调用方式有如下特征: (1)调用时,参数从右到左压入堆栈。 (2)被调用的函数负责清除堆栈。 (3)编译时函数名前加“_”,在函数名后加“@paraLength”。其中paraLength为所有参数以字节为单位的长度。 如果不指定函数采用_stdcall方式的时候,则采取C/C++默认的调用方式_cdecl(它的缩写是“C declaration”)。这种调用方式有如下特征:(1)调用时,参数从右到左压入堆栈。(2)调用的函数负责清除堆栈。(3)编译时在函数名前加“_”。18[/b].基本的非托管类型和托管类型的对应表
[/b]
Wtypes.h[/b]中的非托管类型 [/b] | 非托管C[/b]语言类型 [/b] | 托管类型 [/b] | 说明 [/b] |
HANDLE | void* | System.IntPtr | 32位 |
BYTE | unsigned char | System.Byte | 8位 |
SHORT | short | System.Int16 | 16位 |
WORD | unsigned short | System.UInt16 | 16位 |
INT | int | System.Int32 | 32位 |
UINT | unsigned int | System.UInt32 | 32位 |
LONG | long | System.Int32 | 32位 |
BOOL | long | System.Int32 | 32位 |
DWORD | unsigned long | System.UInt32 | 32位 |
ULONG | unsigned long | System.UInt32 | 32位 |
CHAR | char | System.Char | 用ANSI修饰 |
FLOAT | Float | System.Single | 32位 |
DOUBLE | Double | System.Double | 64位 |
[/b] (1)无符号类型的数据与有符号类型的数据之间的转换。 无符号数据的比特位可以被编译器解释为有符号数据,如无符号短整数60000,它 会被编译器解释为有符号短整数-5536。(暂时不知它怎么转的) (2)由函数重载和默认参数产生的歧义性。由于重载使得可以向相同的函数名传递数据类型不相同的参数,又由于C++的自动类型转换机制,C++会自动尝试将调用函数的实际参数类型转换为函数的形式参数的类型。如有下面的函数定义:foo(float a); foo(double b);函数调用:foo(10);这就产生歧义了,因为编译器不知将10转成float型还是double型。编译器会将这个歧义性报告出错信息:error C2668: 'foo' : ambiguous call to overloaded function另外,由于有默认参数,可能会产生参数个数的歧义。如有下面的函数定义:foo(int a);foo(int b,int c = 1);函数调用:foo(10)也产生了歧义,因为编译器不知foo(10)是调用foo(int a)还是缺省调用foo(int b,int c = 1);报错:error C2668: 'foo' : ambiguous call to overloaded function
20[/b].字符转义序列
[/b] /b 退格:删除最后一个字符 /f 换页/n 换行/r 回车/t 水平制表符/” 双引号/’ 单绰号// 后斜线/v 垂直制表符/a 喇叭嗡鸣/? 问号(?)/N 八进制常量(其中N是一个八进制数值)/xN 十六进制常量(其中N是一个十六进制数值)21[/b].非标准C++[/b]定义的头文件必需有.h
[/b] 如#include <conio.h>22[/b].goto[/b]语句的一个用法
[/b] 使用goto语句可以从一段嵌套很深的代码中跳出,如: for(…){ for(…){ while(…){ if(…) goto stop; … … … } } { stop: cout<< “ Error happened!/n”; break语句只能从最内层的循环退出。23[/b].指针的数学运算
[/b] 可以对指针进行增量或减量运算,还可以将指针与整数作加减运算。 不能将指针与指针相加,但可以将指针与指针相减。相减的运算结果是在两个指针之间所包含的基本类型元素的数量。如下例: int main(){ int *p,*q,a[20]; p = a; q = &a[9]; cout<<p - q<<endl;//result is -9
return 0;}24[/b].返回引用
[/b] [/b]函数可以返回引用。当函数返回引用时,它返回的是一个指向返回值的隐式指针。如下例:#include <iostream>using namespace std;double &f();//define a function that return a reference
int main(){ f() = 99.3; cout<<f()<<'/n'; return 0;}double &f(){ return val;} 因为f()返回的是val的引用,而该引用则成为赋值语句的目标变量,因此,99。3通过由f()所返回的引用被间接地赋给了val。
相关文章推荐
- C++学习笔记-00
- c++学习笔记之 数组类与负数类
- 【C++学习笔记】结构简介
- [More Effective C++ 学习笔记]异常
- c++ 设计模式学习 [笔记]
- C++学习笔记(三)补充篇 计算机网络基础 — 参考慕课网
- Inside The C++ Object Model 学习笔记 -- 关于对象
- c++学习笔记
- C++ FAQ学习笔记 23章 继承 — 你所不知道的
- C++学习笔记-----operator=函数处理自赋值
- C++学习笔记20——顺序容器的操作
- C++学习笔记60——模板编译模型
- 深度探索c++对象模型学习笔记
- 设计模式C++学习笔记之一(Strategy策略模式)
- C++学习笔记3:内存模型和名称空间
- C/C++中关于地址、指针和引用变量的学习笔记(七) : sizeof和typedef
- 设计模式C++学习笔记之八(Adapter适配器模式)
- C++学习笔记(原创)
- C++学习笔记一:第一个C++程序“hello worl
- 高质量C++/C编程指南学习笔记(上)