c++ 全局静态函数的理解
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++ 全局静态函数的理解相关的知识,希望对你有一定的参考价值。
优势是什么?劣势是什么?在线程中运行会有什么问题?内存存放在堆里的还是在栈里的?
a904003695, tseug0 都把全局静态函数 当 全局静态对象(或变量) 来回答问题了。不对。C/C++允许多个c,c++文件各自生成obj,再连接起来成可执行程序。
问题是各c,c++文件可能是多人写成,可能出现函数重名(非重载)的现象,为了互不影响,
可以把自己本c,c++文件中的某函数定义为static函数,当然该函数一定是全局的,这样
除了本c,c++文件可以调用该函数,出了本c/c++文件就不可调用它了。所以static函数也
一定不会出现在头文件中。即使出现也对其他c/c++文件无任何用处。
其它的c/c++文件也就可以使用一样的名字命名函数了。
优势在上文中已经描述。劣势?没有。
线程中运行与一般函数无异。
数据段才分堆和栈,既然是函数,既不是存放在堆,也不在栈里,应该在代码区。
如果是全局静态对象(或变量)的优势:可以在本c/c++文件中全局可访问,加强了通讯。
劣势:可能导致结构上不清晰;被其他函数修改而造成逻辑混乱。
存放位置:在堆里。 参考技术A 静态函数具我所知是放在堆中,具体放在了data数据区段;和全局数据区段一个位置;
他没有了this指针;这是C++语言的一个特性,他在编译期被参考的是类,作为“类型”的偏移;
对象的访问仅仅只是语法上的一种便利;
在多线程情况下,静态方法需要进行数据保护,存在同时存访的风险
lishimin1972 回答是对的,函数应该是放在text段,变量和数据才放在data段 参考技术B 其实优劣都是看使用情形的;
一般来说,C++是面向对象的(),全局性的一般少用,因为它虽然“方便”——可以在整个工程内,任何地方使用,但同时意味着它可能被滥用,如果碰上多线程,如果保护不好,容易产生冲突意外;其代码空间、甚至包含数据,应该是在堆里的。 参考技术C 和C语言静态函数一样,或者你就可以理解为C语言的静态函数。存放在堆里面。 参考技术D 就是本地私用的意思~
不支持跨文件调用 ——运行时不会涉及到与其它类别函数有所区别吧?
以上是关于c++ 全局静态函数的理解的主要内容,如果未能解决你的问题,请参考以下文章
全局静态函数加上static和不加上有啥区别呢 尽量详细点 可加分哦