Skip to content

Commit

Permalink
extern and global static member
Browse files Browse the repository at this point in the history
  • Loading branch information
liruixl committed Aug 7, 2019
1 parent 8fd3e6e commit 7228ec2
Show file tree
Hide file tree
Showing 3 changed files with 58 additions and 1 deletion.
34 changes: 34 additions & 0 deletions cpp/C++11.md
Original file line number Diff line number Diff line change
Expand Up @@ -140,3 +140,37 @@ void func(const Types&... args)



# move

```c++
std::move(a) //请将我当成右值
```
# perfect forwarding
# 新容器
+ Array
底层是数组,没有构造函数、析构函数
+ Forward-List
+ Unorder Container(set multiset map multimap)
底层hashtable。
每个篮子(每个hash值可以形容为一个篮子)底下是一个链表。篮子长度为素数。需要hash函数,比如:放入篮子 = 值%长度。
hash functions
```c++
hash<int>()(123);
```



16 changes: 15 additions & 1 deletion cpp/why.md
Original file line number Diff line number Diff line change
Expand Up @@ -986,4 +986,18 @@ const int sz = get_size();

我将内联函数定义在了cpp文件,然后报链接错误。

所谓内联函数,就是编译器将函数定义({...}之间的内容)在函数调用处展开,藉此来免去函数调用的开销。如果这个函数定义在头文件中,所有include该头文件的编译单元都可以正确找到函数定义。然而,如果内联函数fun()定义在某个编译单元A中,那么其他编译单元中调用fun()的地方将无法解析该符号,因为在编译单元A生成目标文件A.obj后,内联函数fun()已经被替换掉,A.obj中不再有fun这个符号,链接器自然无法解析。
所谓内联函数,就是编译器将函数定义({...}之间的内容)在函数调用处展开,藉此来免去函数调用的开销。如果这个函数定义在头文件中,所有include该头文件的编译单元都可以正确找到函数定义。然而,如果内联函数fun()定义在某个编译单元A中,那么其他编译单元中调用fun()的地方将无法解析该符号,因为在编译单元A生成目标文件A.obj后,内联函数fun()已经被替换掉,A.obj中不再有fun这个符号,链接器自然无法解析。

## 共用全局变量

[C++全局变量在多个源代码文件中的使用](https://blog.csdn.net/jiadebin890724/article/details/40509333 )

[C++ :static和extern的用法总结](https://blog.csdn.net/wfei101/article/details/82764705)

<https://blog.csdn.net/wangqing_12345/article/details/51970451>

+ 头文件中应使用extern关键字声明全局变量(不定义),如果这个变量有多个文件用到,可以新建一个cpp,在其中定义,把这个cpp加入工程即可。头文件请不要定义任何变量,那是非常业余的行为……
+ 一般在头文件中申明,用extern。在cpp中定义。 如果在头文件中定义,如果这个头文件被多个cpp引用,会造成重复定义的链接错误。
+ 头文件只能申明全局变量(extern),不可定义(不推荐使用)    .cpp里,在最外层定义即可(int gi),直接引用
+ 如果在.cpp里使用static定义,则该变量只在当前cpp文件中有效,在别的文件中无效
+ 在.h里使用static定义,不会进行编译(.h文件不编译),只会在其每个include的cpp文件中包含编译,相当于在.cpp里使用static定义。
9 changes: 9 additions & 0 deletions model_manager/problem.md
Original file line number Diff line number Diff line change
Expand Up @@ -749,3 +749,12 @@ string qstr2str(const QString qstr)
}
```
# 20190807
## 线程池残留线程
主页面关闭,线程池中还有正在执行得任务。此时进程不会关闭。
若是线程中还涉及到页面组件的操作:则会报错。页面已经析构。

0 comments on commit 7228ec2

Please sign in to comment.