2015.09.06 C++笔记
bitset
与 vector 不一样的是,bitset 类型对象的区别仅在其长度而不在其类型。在定义 bitset 时,要明确 bitset 含有多少位,须在尖括号内给出它的长
度值:
bitset<n> b; b 有 n 位,每位都是 0
bitset<n> b(u); b 是 unsigned long 型 u 的一个副本
bitset<n> b(s); b 是 string 对象 s 中含有的位串的副本
bitset<n> b(s, pos, n); b 是 s 中从位置 pos 开始的 n 个位的副本。
#include <bitset> #include <string> #include <iostream> using namespace::std; int main() { string str("1111111000000011001101"); bitset<32> bit5(str, 5, 4); // 4 bits starting at str[5], 1100 bitset<32> bit6(str, str.size()-4); // use last 4characters bitset<100> a; cout<<a<<" "<<bit5<<" "<<bit6; //<<" "<<b<<" "<<c<<endl; cin>>a; return 0; int ival = 1024; int *pi = 0; // pi initialized to address no object int *pi2 = &ival; // pi2 initialized to address of ival int *pi3; // ok, but dangerous, pi3 is uninitialized pi = pi2; // pi and pi2 address the same object, e.g.ival pi2 = 0; // pi2 now addresses no object //把 int 型变量赋给指针是非法的,尽管此 int 型变量的值可能为 0。但允许把数值 0 或在编译时可获得 0 值的 const 量赋给指针: int ival; int zero = 0; const int c_ival = 0; // int *pi = ival; // error: pi initialized from int value of ival // pi = zero; // error: pi assigned int value of zero pi = c_ival; // ok: c_ival is a const with compile-time valueof 0 pi = 0; // ok: directly initialize to literal constant0 }
指针
指针只能初始化或赋值为同类型的变量地址或另一指针。
把 int 型变量赋给指针是非法的,尽管此 int 型变量的值可能为 0。
但允许把数值 0 或在编译时可获得 0 值的 const 量赋给指针:
int ival; int zero = 0; const int c_ival = 0; int *pi = ival; // error: pi initialized from int value of ival pi = zero; // error: pi assigned int value of zero pi = c_ival; // ok: c_ival is a const with compile-time valueof 0 pi = 0; // ok: directly initialize to literal constant 0
C++ 语言无法检测指针是否未被初始化,也无法区分有效地址和由指针分配到的存储空间中存放的二进制位形成的地址。建议程序员在使用之前初始化所有的变量,尤其是指针。
C++ 提供了一种特殊的指针类型 void*,它可以保存任何类型对象的地址:
double obj = 3.14; double *pd = &obj; // ok: void* can hold the address value of any data pointer type void *pv = &obj; // obj can be an object of any type pv = pd; // pd can be a pointer to any type
void* 表明该指针与一地址值相关,但不清楚存储在此地址上的对象的类型。
void* 指针只支持几种有限的操作:与另一个指针进行比较;向函数传递void* 指针或从函数返回 void* 指针;给另一个 void* 指针赋值。
不允许使用void* 指针操纵它所指向的对象。