1.逗号运算符问题
int main()
{
int x, a, b;
x = (a = 1, b = 2, a + 3, b + 4, a + b);
cout << x << endl;
}
逗号运算符,取最后一个表达式的值进行赋值,但是要把前面每个表达式都计算一遍,所以a=1,b=2,x=3
参考自:C语言的一道题int x, a, b; 语句x=(a=1, b=2, a+3, b+4, a+b)执行后, x、a、b的值依次为 求解为什么_百度知道
2.关于const的iterator与const_iterator
const的iterator修饰的是迭代器本身,迭代器本身无法自增。
而const_iterator修饰的是迭代器指向的空间,迭代器本身可以自增。
而const vector<int>vec(1)修饰的是数组元素,需要使用const_iterator去访问而非const的iterator
const_iterator的使用_XDU_Skyline的博客-CSDN博客_const_iterator
p.s:stack与queue本身是没有迭代器的,是个坑,需要注意
3.前向声明与include的区别及注意事项
1)前向声明是在链接的时刻去寻找到所需要的类型的定义的位置,而include方式则是在编译的时候会将include里的文件复制一份到.cpp文件下直接进行编译。
扫描二维码关注公众号,回复:
16965360 查看本文章
2)采用前向声明容易产生内存泄漏问题
前向声明仅仅告诉程序有这样一个类,你可以在这里声明类的一个指针,但是此处并不能获得类的具体信息。
举例说明:
//A.h
class A
{
public:
int i=1;
};
//B.h
#include<stdio.h>
class A;
class B
{
public:
A* d(A* a) {
//delete a;会报错,无法预知a指向空间所占大小
//std::cout << sizeof(*a) << endl;会报错,无法预知a指向空间所占大小
//printf("%d", a->i);会报错,无法读取
return a;//可以返回
}
};
//main函数
#include <iostream>
using namespace std;
#include "B.h"
#include "A.h"
int main()
{
B b;
A a;
std::cout << a.i << endl;
A* c=b.d(&a);
}
3)循环引用问题
这个问题个人目前现在还没有比较好的解决办法,可先参考:C++关于循环依赖的问题_momo0303kaka的博客-CSDN博客_c++ 循环依赖