c++ inline variable 内联变量 c++17
2017-09-30 15:47
2461 查看
好象是C++17的新特性。
看http://en.cppreference.com/w/cpp/utility/in_place 这个的时候发现里面的 变量模板(C++17新特性) 前面加了inline修饰,
查中文结果没多少。英文的倒是已经有人讨论了。
说inline variable起到和inline function 类似的作用,“多个翻译单元的定义最终只保留一个,保证是相同的”
所以用inline修饰以后,许多以前不能在头文件定义的东西,可以写在头文件里了。
比如说类的static成员可以直接初始化了,因为用了inline,所以不会多重定义
还有什么inline static constexpr的事项。。
注意这里和inline提示函数优化的意思没什么关系,搞不清的见下面红字
https://stackoverflow.com/questions/38043442/how-do-inline-variables-work
草案N4640 7.16 提到了inline可以用作修饰variable,其他地方懒得翻了,看了看上面那个网页,大概知道效果和inline对函数的效果差不多。
完蛋。。仔细一深究,发现以前的理解太不到位了。。
看了 知乎大神暮无井见铃 的一个回答https://www.zhihu.com/question/65633138/answer/233497388
还有其在https://www.zhihu.com/question/66032208/answer/237524884 回答下的评论
还有这个https://www.zhihu.com/question/65522911/answer/232217942
才恍然大悟,应该是这么个意思
inline 修饰符保证了一个限制语义,即 “在每个翻译单元内的定义,最终只保留一个,保证定义总是相同的”,这个约束对不管是inline variable 还是inline function都起作用。
而对于inline function,inline 还起到了一个提示编译器,可对此函数进行代码展开的优化的作用(这就是常说的inline 的作用)
但是优化不优化不影响其限制语义,这两个是两码事!!!!
(实际上优化了,也是都展开成一样的,所以inline只保证其限制语义)
看http://en.cppreference.com/w/cpp/utility/in_place 这个的时候发现里面的 变量模板(C++17新特性) 前面加了inline修饰,
查中文结果没多少。英文的倒是已经有人讨论了。
说inline variable起到和inline function 类似的作用,“多个翻译单元的定义最终只保留一个,保证是相同的”
所以用inline修饰以后,许多以前不能在头文件定义的东西,可以写在头文件里了。
比如说类的static成员可以直接初始化了,因为用了inline,所以不会多重定义
还有什么inline static constexpr的事项。。
注意这里和inline提示函数优化的意思没什么关系,搞不清的见下面红字
https://stackoverflow.com/questions/38043442/how-do-inline-variables-work
草案N4640 7.16 提到了inline可以用作修饰variable,其他地方懒得翻了,看了看上面那个网页,大概知道效果和inline对函数的效果差不多。
完蛋。。仔细一深究,发现以前的理解太不到位了。。
看了 知乎大神暮无井见铃 的一个回答https://www.zhihu.com/question/65633138/answer/233497388
还有其在https://www.zhihu.com/question/66032208/answer/237524884 回答下的评论
还有这个https://www.zhihu.com/question/65522911/answer/232217942
才恍然大悟,应该是这么个意思
inline 修饰符保证了一个限制语义,即 “在每个翻译单元内的定义,最终只保留一个,保证定义总是相同的”,这个约束对不管是inline variable 还是inline function都起作用。
而对于inline function,inline 还起到了一个提示编译器,可对此函数进行代码展开的优化的作用(这就是常说的inline 的作用)
但是优化不优化不影响其限制语义,这两个是两码事!!!!
(实际上优化了,也是都展开成一样的,所以inline只保证其限制语义)
相关文章推荐
- C++ inline 函数
- Auto variable in C++
- 如何Eclipse改变模板中${user}变量,How to change the variable ${user} used in the eclipse templates.
- jspx页面初始化时将View Object中SQL的变量赋bindings中的值 bind variable of the sql in vo
- Effective C++ Item 2:Prefer constS, enumS, and inlineS to #defineS
- Notice: Undefined variable: errno in drupal_http_request() (line 829 of ***.com/httpdocs/inclu
- C++ inline函数 内联函数
- 【ThinkingInC++】10、全局变量的使用
- 【ThinkingInC++】16、吧变量和表达式转换成字符串
- C++ inline内连函数
- C++ inline
- C++ inline对性能的影响
- read file by bash shell just as getline() in c++
- Kotlin内联:noinline与crossinline
- 《C++ Concurrency in Action》笔记15 a thread-safe queue with condition variable
- C++ 使用#define带来的问题及解决方法(const enum inline)
- Inline Functions (C++)
- bootstrap-内联列表-display: inline-block;
- Inline Hook(ring3)的简单C++实现方法
- 多变量线性回归中的批量梯度下降法(Batch Gradient Descent in Linear Regression with Multiple Variable)