您的位置:首页 > 编程语言 > C语言/C++

C/C++ 一些知识点总结

2018-03-03 17:15 591 查看
临时整理的,有些可能不对。
1)如果一个类里面有const-qualifier或reference, compiler不会为它生成default copy assignment operator函数。
2) Hidden是指子类和父类有同名函数,但又没有virtual关键字。这里函数只要同名就可以了,参数并不需要match。也就是说,compiler只要在子类看到有这个函数名,即使参数不match,也不会再往父类找了。
3) delete function, default function 都是C++ 11新加的函数属性。 
4) Decision of constructor happens at compile time。
5) Non-member function 不能在它后面加const。
6) macro的缺点: a) macros不会放进symbol table; b) macros 不管scope; c) macro 替换有时可能不是想要的地方。
Enum的缺点应该也包含上面的a)和b)。
7) delete p 和 free p都不会改变p的值。
8) 在line 2后放断点,x在symbol table里面是数组还是指针? 答案是一个数组。sizeof(x)=10*sizeof(int)。p是一个指向int的指针。
int main {
int x[10]; //line 1
int *p; //line 2
}
9) pragma once 不portable。
10) 在copy constructor和copy assignment operator中,如果类中有一个member是数组,当数组成员不包含指针时,用memcpy是安全的,否则要用loop挨个调用copy assignment operator初始化。
11)  C++中,private是对class而言。同一个class的不同object可以互相访问对方的private member。
12) 类的static成员不增加类实例的大小。
13) 通常不需要显式调用destructor。
14) static 成员在类中出现只是声明(declaration),应该还要另外definition。为什么呢? 因为类的definition都是放在头文件内,如果算definition则包含该头文件的每个.cpp文件都有一个copy。
15) 如果两个pointer刚好相等(first==last),delete ptr危险!因为对应的析构函数调用两次!
16) inline是一个request, 编译器可以选择拒绝。
17) int *p;
int const *q; //值const
int *const r; //指针const
p=q; //no, invalid conversion from 'const int*' to 'int *'
p=r; //ok
q=p; //ok
q=r; //ok
r=p; //no
r=q ;//no18) int const * const p = &x; 指针和值都const。典型例子是read-only register。
19) T& const r 不合法,因为引用&本身自带const属性,即一个引用不能再指向别人???  
20) 引用相当于const pointer。
21) lvalue 是addressable,可以找到地址。
22) Compiler 会自行决定是否给const object 分配地址 。
23) int &ri=3; //no
int const &ri=3; //OK24) 
void fun(int n) {
int a
;
...
}
这种写法C99和C++14都是支持的。但像TurboC和VC平台仅支持C89的不支持这种写法。
25) C/C++的堆上变量若未初始化,缺省值为0。栈上变量若未初始化,缺失值为未定义。
26) struct A {
...
};C要用struct A a;  C++可以直接用A a;
27) C++11定义的大括号初始化class Test{
int a;
int b;
public:
C(int i, int j);
};
Test t{0,0}; //C++11 only,相当于 Test t(0,0);
Test* pT=new Test{1,2}; //C++11 only,相当于 Test* pT=new Test{1,2};
int* a = new int[3]{ 1, 2, 0 }; //C++11 only
// C++11 container initializer
vector<string> vs={ "first", "second", "third"};
map<string,string> singers ={ {"Lady Gaga", "+1 (212) 555-7890"},{"Beyonce Knowles", "+1 (212) 555-0987"}};
但这种写法一般只用于POD(plain old data) 变量。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: