4、 表达式
※ 求余
%操作符只能被应用在整值类型 char short int和 long 的操作数上
如果有一个 或两个 操作数为负 余数的符号则取决于机器
3.14 % 3; // 编译时刻错误: 浮点操作数
21 % -5; // 机器相关: 结果为 -1 或 1
※逻辑与操作符
if(a>0 && arr[a] != 3) //将有危险的(越界)放在后面
对于操作符的运算,并不保证从左到右的计算顺序
ival++ && ival ptr != 0 && *ptr++ // 结果是不确定的
※sizeof
返回值的类型是 size_t 这是一种与机器相关的typedef 定义
#include <cstddef> 在cstddef 头文件中找到它的定义 例:size_t array_size = sizeof ia;
sizeof (type name );
sizeof ( object ); 三种格式
sizeof object;
string st1( "foobar" );
string st2( "a mighty oak" );
string *ps = &st1;
cout << "st1: " << sizeof( st1 ) // 一个 string 的大小与它所指的字符串的长度无关
<< " st2: " << sizeof( st2 )
<< " ps: " << sizeof( ps )
<< " *ps: " << sizeof( *ps )
<< endl;
cout << "short :\t" << sizeof(short) << endl;
cout << "short* :\t" << sizeof(short*) << endl;
cout << "short& :\t" << sizeof(short&) << endl;
cout << "short[3] :\t" << sizeof(short[3]) << endl;
结果 st1: 12 st2: 12 ps: 4 *ps: 12
short : 2
short* : 4 在引用类型上的 sizeof 操作符返回的是包含被引用对象所需的内存长度
short& : 2
short[3] : 6
※ 类型转换
△隐式类型转换
用一种类型的表达式赋值给另一种类型的对象
把一个表达式传递给一个函数调用 表达式的类型与形式参数的类型不相同
从一个函数返回一个表达式 表达式的类型与返回类型不相同
在混合类型的算术表达式中
△ 算术转换 保证了二元操作符的两个操作数被提升为共同的类型
1 为防止精度损失,如果必要的话类型总是被提升为较宽的类型
2 所有含有小于整型的有序类型的算术表达式,在计算之前其类型都会被转换成整 型
如果机器上的 m 型足够表示所有 unsinged short型的值,则unsigned short int也被转换成 int,
否则它会被提升为unsigned int
△ 强制类型转换
static_cast dynamic_cast const_cast和 reinterpret_cast
※ 求余
%操作符只能被应用在整值类型 char short int和 long 的操作数上
如果有一个 或两个 操作数为负 余数的符号则取决于机器
3.14 % 3; // 编译时刻错误: 浮点操作数
21 % -5; // 机器相关: 结果为 -1 或 1
※逻辑与操作符
if(a>0 && arr[a] != 3) //将有危险的(越界)放在后面
对于操作符的运算,并不保证从左到右的计算顺序
ival++ && ival ptr != 0 && *ptr++ // 结果是不确定的
※sizeof
返回值的类型是 size_t 这是一种与机器相关的typedef 定义
#include <cstddef> 在cstddef 头文件中找到它的定义 例:size_t array_size = sizeof ia;
sizeof (type name );
sizeof ( object ); 三种格式
sizeof object;
string st1( "foobar" );
string st2( "a mighty oak" );
string *ps = &st1;
cout << "st1: " << sizeof( st1 ) // 一个 string 的大小与它所指的字符串的长度无关
<< " st2: " << sizeof( st2 )
<< " ps: " << sizeof( ps )
<< " *ps: " << sizeof( *ps )
<< endl;
cout << "short :\t" << sizeof(short) << endl;
cout << "short* :\t" << sizeof(short*) << endl;
cout << "short& :\t" << sizeof(short&) << endl;
cout << "short[3] :\t" << sizeof(short[3]) << endl;
结果 st1: 12 st2: 12 ps: 4 *ps: 12
short : 2
short* : 4 在引用类型上的 sizeof 操作符返回的是包含被引用对象所需的内存长度
short& : 2
short[3] : 6
※ 类型转换
△隐式类型转换
用一种类型的表达式赋值给另一种类型的对象
把一个表达式传递给一个函数调用 表达式的类型与形式参数的类型不相同
从一个函数返回一个表达式 表达式的类型与返回类型不相同
在混合类型的算术表达式中
△ 算术转换 保证了二元操作符的两个操作数被提升为共同的类型
1 为防止精度损失,如果必要的话类型总是被提升为较宽的类型
2 所有含有小于整型的有序类型的算术表达式,在计算之前其类型都会被转换成整 型
如果机器上的 m 型足够表示所有 unsinged short型的值,则unsigned short int也被转换成 int,
否则它会被提升为unsigned int
△ 强制类型转换
static_cast dynamic_cast const_cast和 reinterpret_cast