C++中的静态函数和静态变量有什么用?貌似和C中的并不一样

「已注销」 2017-08-21 09:49:56
我新建了一个头文件,内容如下

#pragma once

static int intstatic;
int intNOsatatic;

static void funstatic()
{

}

void funNOstatic()
{

}


然后在另外的一个cpp文件中include这个文件之后,发现静态变量和静态函数都可以调用
参照我在百度来的资料,貌似是不允许这么做的
想问下大神们这是为什么?
...全文
373 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
蜂芒 2017-08-27
  • 打赏
  • 举报
回复
引用 1 楼 sdghchj的回复:
不要在头文件中定义全局,当多个cpp文件include它的时候可能会产生重复定义的链接错误。 也不要在头文件中定义静态变量,当多个cpp文件include它的时候,实际上各有一份变量拷贝。
请问一下,cpp文件之间不是独立的吗?而且为什么会重复定义呢?在cpp文件里不是只是调用吗?
srxumin 2017-08-27
  • 打赏
  • 举报
回复
C++中,如果你用这个类定义了许多对象,可以通过静态变量来”共享“一个静态成员变量,比如此类的对象计数器。 还有一些作用域的问题,看这里:http://blog.csdn.net/qq_26626709/article/details/51985239
xskxzr 2017-08-27
  • 打赏
  • 举报
回复
引用 4 楼 x572722344 的回复:
[quote=引用 1 楼 sdghchj的回复:]不要在头文件中定义全局,当多个cpp文件include它的时候可能会产生重复定义的链接错误。 也不要在头文件中定义静态变量,当多个cpp文件include它的时候,实际上各有一份变量拷贝。
请问一下,cpp文件之间不是独立的吗?而且为什么会重复定义呢?在cpp文件里不是只是调用吗?[/quote] 但多个cpp文件(编译单元)会组成一个程序。
trytry1992 2017-08-22
  • 打赏
  • 举报
回复
为啥没有重定义,是什么编译器
C艾斯蒂嗯蟹 2017-08-21
  • 打赏
  • 举报
回复
类中的静态成员不属于具体对象,而是属于类本身 如果一个成员你不希望在不同对象中产生不同的功能,那么可以把它写成静态成员 这个时候你可以直接用 对象.成员 或者 类名::成员 这个成员始终只有一个
sdghchj 2017-08-21
  • 打赏
  • 举报
回复
不要在头文件中定义全局,当多个cpp文件include它的时候可能会产生重复定义的链接错误。 也不要在头文件中定义静态变量,当多个cpp文件include它的时候,实际上各有一份变量拷贝。

64,687

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧