c++学习笔记(二)—— 变量和基本类型

变量和基本类型

字面值

数字

字面值就是常量。十进制字面值没有负数,比如-42,他的含义是对42取负值

十进制字面值类型:int, long, long long(最小的那个)
八进制和十六进制:int, unsigned int, long, unsigned long, long long, unsigned long long

指定字面值

前缀 含义 类型
u unicode 16字符 char16_t
U unicode 8字符 char8_t
L 宽字符 wchar_t
u8 UTF-8(仅用于字符串常量) char
后缀 自小匹配类型
整型 -
u or U unsigned
l or L long
ll or LL long long
浮点型 -
f or F float
l or L long double

string != 字面值

string s5 = "world"
string s6 = "hello" + "," + s5;  // 错误,不能把字面值直接相加

string可以和字面值相加返回string,而字面值不可以。在c++里,字面值不等于string

字符

单引号表示单独的字符,双引号表示字符串型字面值

区别:字符串型的字面值,后面会加个'\0'的空字符

tips:赋值的含义是吧对象的当前值擦除,而以一个新值来替代

访问全局定义域

int res = 42
int main()
{
    cout << res << endl;  // 输出42
    int res = 10;
    cout << res << endl;  // 输出10
    cout << ::res << endl;  // 输出42
}

引用

引用没有创建一个新的变量,而是给被引用的对象换个名字

数组引用形参

void print(int (&arr)[3]) {};
int i = 0, j[2] = {0, 1};
int k[3] = {0, 1, 2};

print(j); //错误,长度不同
print(k); //正确

指针

指针存放的是某个对象的地址,&代表取地址符

int *p = &val

顶层const:表示指针本身是个常量
底层const:表示指针所指的对象是一个常量

void*

一种特殊的指针,可用于存放任意对象的地址,但是相对的,不能直接操作指向的对象。
简单来说,只能对内存空间的值修改,而不能改变指向的值

可以用作函数的输入和输出、用来和其他指针比较。

智能指针

  • shared_ptr: 允许多个指针指向同个对象
  • unique_ptr: 独占所指的对象
  • weak_ptr: 弱引用

注意点:unique_ptr的release操作不会释放所指的对象,而是放弃对指针的控制权,返回指针。

unique支持管理动态数组,但是shared不支持:

unique_ptr<T[]> u;
u[i]; // 返回u拥有的数组中位置i处的对象

函数指针

int (*fp)(int i, int j) = add;
function<int(int, int)> pp = fp;

迭代器

插入迭代器

  • back_inserter: 创建使用push_back的迭代器
  • front_inserter: 创建使用front_back的迭代器
  • inserter: 创建使用insert的迭代器
auto it = back_inserter(c, iter);
*it = val;
/*
等价于
it = c.insert(it, val);
++it;
*/

流迭代器

  • istream_iterator
  • ostream_iterator
ostream_iterator<int> out_iter(cout, " ");
for(auto e : vec)
    *out_iter++ = e;
cout << endl;

反向迭代器

向后移动而不是向前,除了forward_list都有

移动迭代器

不是拷贝,而是移动

auto first = alloc.allocate(100000);
uninitialized_copy(
    make_move_iterator(begin()),
    make_move_iterator(end()),
    first
)

其他标准库类型

size_t

cstddef中的类型,用来表示数组大小

ptrdiff_t

cstddef中的类型,用来表示指针的距离

posted @ 2022-01-17 00:39  二律背反GG  阅读(75)  评论(0编辑  收藏  举报