c++ inline variable 内联变量 c++17

来源:互联网 发布:linux编写c语言 编辑:程序博客网 时间:2024/06/05 06:39

好象是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只保证其限制语义)


原创粉丝点击