社区
C++ 语言
帖子详情
C++ static 函数的问题。
ketao_78
2008-03-06 10:59:24
近日读 C++ primer 中static 一章 , 有这么一句话,
“静态成员函数的声明除了在类体中的函数声明前加上关键字static 以及不能声明为
const 或volatile 之外与非静态成员函数相同出现在类体外的函数定义不能指定关键字
static”
为什么不能在类体外指定关键字static , 这样设计的目的是什么,有什么用处?
...全文
3180
22
打赏
收藏
C++ static 函数的问题。
近日读 C++ primer 中static 一章 , 有这么一句话, “静态成员函数的声明除了在类体中的函数声明前加上关键字static 以及不能声明为 const 或volatile 之外与非静态成员函数相同出现在类体外的函数定义不能指定关键字 static” 为什么不能在类体外指定关键字static , 这样设计的目的是什么,有什么用处?
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
22 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
foreverhere
2010-10-19
打赏
举报
回复
受益非浅,谢谢。。。
zhfish
2010-09-16
打赏
举报
回复
2楼的一看就明白了...精辟
qinglingzhuren
2010-08-20
打赏
举报
回复
学习了
zhangjia8899
2010-02-21
打赏
举报
回复
怎么看不到2楼的内容.
hohai_wow
2010-02-05
打赏
举报
回复
14楼的没分清楚C的static和C++的static,2楼是正确的。
yinquan8241
2009-06-18
打赏
举报
回复
我很赞同14楼的说法
我也觉那样子更符合编程的思维和习惯
2楼很牛
但我觉得14楼更牛
ughye
2009-05-25
打赏
举报
回复
认真学习
某某9
2009-03-24
打赏
举报
回复
二楼果然很牛
sydii1225
2008-10-20
打赏
举报
回复
[Quote=引用 2 楼 zwspider 的回复:]
怎么说呢, 这是一个作用域的问题!
成员函数的作用域是类域, 而在类体外加上static不是表示静态函数,表示的是函数拥有文件域(file scope)
而类域是小于文件域,强行把类域扩大到文件域,就会出错。
如下代码:
class CA {
public:
static void display(void);
};
static void CA::display(void) { // ERROR!
cout < < "Hello CA!" < < endl;
}
int main(int argc, char* argv[]) {
CA::display…
[/Quote]
虽然很有道理,但我更愿意认为仅仅只是为了编译器实现上的方便而已
否则你的用法就是
class CA {
public:
static void display(void);
};
void CA::display(void) { // ERROR!
cout < < "Hello CA!" < < endl;
}
注意,static没有了
当然这样对编译器来说没有影响,通过CA::它仍能匹配正确的函数声明
问题是,这样不符合程序员正常的思维
正常我声明是static,那么我定义也要把static写出来才比较合理
C#和java都是这么做的
晓岚45
2008-06-13
打赏
举报
回复
[Quote=引用 2 楼 zwspider 的回复:]
怎么说呢, 这是一个作用域的问题!
成员函数的作用域是类域, 而在类体外加上static不是表示静态函数,表示的是函数拥有文件域(file scope)
而类域是小于文件域,强行把类域扩大到文件域,就会出错。
[/Quote]
严重同意
ketao_78
2008-03-24
打赏
举报
回复
To 8 floor,
Just thinking , no other meaning.
onlinelive
2008-03-20
打赏
举报
回复
六楼的,我试了一下你说的内容,发觉有点问题
static const int ival = 5;
这句提示错误为:
error C2258: illegal pure syntax, must be '= 0'
error C2252: 'ival' : pure specifier can only be specified for functions
这个不知道哪儿的问题,我也觉得应该就是这样写的呀,因为有const嘛。这个提示信息不知道啥意思
另外:
CTest::int num = 10;
应该写成 int CTest::num=10;
zwspider
2008-03-09
打赏
举报
回复
vs 2005
hityct1
2008-03-09
打赏
举报
回复
我看只是规定。
luolai
2008-03-09
打赏
举报
回复
[Quote=引用 3 楼 Supper_Jerry 的回复:]
楼上精辟。
[/Quote]
GCC 4.0
arong1234
2008-03-09
打赏
举报
回复
只是语法规定而已,为什么一定要找一个“为什么”呢?你在类声明中已经声明过static,因此不必要在类外再声明一次,我想这也时个理由吧?只要你愿意,你可以给它找很多“合理”得理由,但是哪个才是真得理由呢?
还是放弃吧,这个有啥意义,这只是规定
舉杯邀明月
2008-03-09
打赏
举报
回复
2楼的解释应该比较合理吧 ^_^
HengStar
2008-03-09
打赏
举报
回复
所谓静态的,意为在程序执行过程中始终会存在的一类变量或函数
在类外定义的函数本来也就是属于全局性的函数,也是会一直在程序运行过程中存在的对象
而在类中定义静态函数或变量和在类外就是两回事了,因为一个类必须实例化为对象后才可以使用其函数或变量,但是在类中的并使用static修饰过的变量和函数及时你不实例化这个类,也可以使用这个变量或函数
例如:
class CTest
{
public:
static void Print();
....
static const int ival = 5;
static int num;
};
此时要使用CTest中的Print()和ival可以直接通过CTest::Print()和CTest::ival调用它们而无需先实例化(比如CTest test;test.Print(); /*这样是不对的,因为静态变量不属于某个类,但它在某个类里面被声明则可以使用该类的成员*/
但记住,带const的静态变量可以在类声明中同时赋值,但非const的不能直接在类声明式中赋值,必须单独给出定义式
例如:上面的static int num;的定义式在类外写出:
CTest::int num = 10;
Supper_Jerry
2008-03-06
打赏
举报
回复
楼上精辟。
zwspider
2008-03-06
打赏
举报
回复
怎么说呢, 这是一个作用域的问题!
成员函数的作用域是类域, 而在类体外加上static不是表示静态函数,表示的是函数拥有文件域(file scope)
而类域是小于文件域,强行把类域扩大到文件域,就会出错。
如下代码:
class CA {
public:
static void display(void);
};
static void CA::display(void) { // ERROR!
cout << "Hello CA!" << endl;
}
int main(int argc, char* argv[]) {
CA::display();
}
// error C2724: 'CA::display' : 'static' should not be used on member functions defined at file scope
加载更多回复(2)
相关推荐
回调
函数
里使用map导致程序崩溃
这里写自定义目录标题
C++
回调
函数
单一实体类定义
问题
来了
问题
规避
C++
回调
函数
C++
类里的回调
函数
只支持
static
的,如果回调
函数
里需要使用变量只能是
static
。或者把类的指针作为回调
函数
的参数带入,使用重新使用类指针。 单一实体类定义
static
dScu_Server& dScu_Server_Get_Instance() {
static
dScu_Server dSc...
C++
中的
static
C++
中
Static
作用和使用方法1、什么是
static
?
static
是
C++
中很常用的修饰符,它被用来控制变量的存储方式和可见性。 2、为什么要引入
static
?
函数
内部定义的变量,在程序执行到它的定义处时,编译器为它在栈上分配空间,大家知道,
函数
在栈上分配的空间在此
函数
执行结束时会释放掉,这样就产生了一 个
问题
: 如果想将
函数
中此变量的值保存...
C++
不能在类体外指定关键字
static
C++
static
函数
的
问题
近日读
C++
primer中
static
一章,有这么一句话,“静态成员
函数
的声明除了在类体中的
函数
声明前加上关键字
static
以及不能声明为const或volatile之外与非静态成员
函数
相同出现在类体外的
函数
定义不能指定关键字
static
”为什么不能在类体外指定关键字
static
,这样设计的目的是什么,有什么用处? ...
奇怪的
C++
static
原来
函数
和变量用
static
修饰没什么
问题
在
C++
里有一些额外的
static
作用 在类中
static
函数
只能访问
static
成员(奇怪的玩法)
static
变量无法在类中初始化 private的
static
变量可以在外部初始化(有且仅有一次) const
static
int可以在类中初始化
C++
模板类中的
static
变量和
函数
初始化
关键词:
C++
模板
static
变量
函数
初始化 这篇文章主要介绍关于模板类中如果有
static
变量如何初始化
问题
。 重要:如果不初始化
static
变量,那么编译可能没有
问题
,但是程序有
问题
,可能编译有
问题
,但是不能确定是初始化
问题
。 #include"iostream" class C { int ccc; }; class A { public: A
发帖
C++ 语言
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
6.3w+
社区成员
25.0w+
社区内容
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
帖子事件
创建了帖子
2008-03-06 10:59
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下