社区
C++ 语言
帖子详情
静态成员函数为什么不能声明成 const 的?
申祷无
2016-06-10 02:36:45
《C++ Primer》第五版,中文版。269 页。
类似的,静态成员函数也不与任何对象绑定在一起,它们不包含 this 指针。作为结果,静态成员不能声明成 const 的,而且我们也不能在 static 函数体内使用this 指针。
...全文
446
5
打赏
收藏
静态成员函数为什么不能声明成 const 的?
《C++ Primer》第五版,中文版。269 页。 类似的,静态成员函数也不与任何对象绑定在一起,它们不包含 this 指针。作为结果,静态成员不能声明成 const 的,而且我们也不能在 static 函数体内使用this 指针。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
lm_whales
2016-06-10
打赏
举报
回复
静态函数没有 传递 this 指针, 因此 没有 const 和非const的区别 const 是针对 *this的, 限定 *this 为函数不可改变的
lm_whales
2016-06-10
打赏
举报
回复
但是这个参数确确实实传递过来了,所以成员函数可以使用它 C++ 规定这个参数是个指针,参数名为 this
lm_whales
2016-06-10
打赏
举报
回复
C++ 与类作用域 是语言划分的,只在源程序中起作用 而C++是编译型语言 这意味着 类作用域 只在编译期间有用, 编译后,类中的函数,要不就成为inline 函数,直接嵌入到调用处 要不就生成C 函数差不多的函数 这样静态成员函数,和非静态成员函数的差异, 就是this 指针这个隐藏参数有没有,如何传递的问题 静态函数无须 类的对象,就可以调用,因此不需要this 指针参数, 来表示调用者身份 成员函数,需要通过
类对象(或者指向它的指针,引用)
来调用 因此需要一个参数,来表示调用这个函数时候,对应的对象 C++采用隐藏的指针参数 this,表示调用成员函数时候,对应的那个对象 因为,这个参数 实际调用的时候 这个 对象(或者指针,引用)在函数前面,不在实参表内部, 所以C++隐式传递这个参数,形参表中也隐藏了这个参数。 但是这个参数确确实实传递过来了,所以成员变量可以使用它 C++ 规定这个参数是个指针,参数名为
this
小灸舞
2016-06-10
打赏
举报
回复
因为static成员不是任何对象的组成部分,所以static成员不能被声明为const,毕竟将成员声明为const就是承诺不会修改该函数所属对象.
const用于后置修饰函数时只用于限定成员函数,意味着将被修饰的成员函数的隐式参数——this指针由原来的Class* const变为const Class* const类型,使得在该成员函数内不能修改成员属性,除非该属性被mutable修饰。
而static类函数并没有隐式的this指针,因为其本质上还是属于C函数——满足__cdecl调用协定。
而成员函数被称为__thiscall,带有隐式的this指针参数。
Saleayas
2016-06-10
打赏
举报
回复
1
因为 成员函数的 const 修饰的是 this 指针。 而静态成员函数没有 this 指针。
精讲ES6语法及新增
课程目标:本课程带领大家详细学习ES6语法及新增,学vue、react等必会的知识点,为以后学习框架打下坚实的基础课程简介:1,babel转码器的安装与配置2,ES6的介绍3,let
声明
变量详解4,
const
声明
变量详解5,解构赋值详解6,字符串模板和字符串新增详解7,箭头
函数
详解8,数组和循环详解9,对象扩展详解10,对象新增语法详解11,promise详解12,模块化详解13,类的基本语法详解14,类的继承详解15,symbol详解16,Generator
函数
的语法17,async
函数
和awite详解18,set和WeakSet讲解19,Map和WeakMap讲解20,Math方法讲解21,正则表达式讲解22,Reflet反射讲解
为什么
静态
成
员
函数
不能
是
const
static在c++中的第五种含义:用static修饰不访问非静态数据
成
员的类
成
员
函数
。这意味着一个
静态
成
员
函数
只能访问它的参数、类的静态数据
成
员和全局变量。
不能
用
const
的原因: 这是C++的规则,
const
修饰符用于表示
函数
不能
修改
成
员变量的值,该
函数
必须是含有this指针的类
成
员
函数
,
函数
调用方式为thiscall,而类中的static
函数
本质上是全局
函数
,调用规约是
面试题(35)|c/c++基础(12):为什么
静态
成
员
函数
不能
申请为
const
?
静态
成
员
函数
是属于类的bai,而不是某个具体对象, 在没du有具体对象的时候zhi
静态
成
员
就已经存在,
静态
成
员
函数
不会访问到非
静态
成
员
,也不存在this指针。 而
成
员
函数
的
const
就是修饰this指针的,既然
静态
成
员
函数
不会被传递this指针,那
const
自然就没有必要了 ...
static
成
员
函数
不能
被
声明
为
const
virtual volatile 原因
static
成
员
函数
不能
被
声明
为
const
virtual volatile 原因 根本原因是static
成
员
函数
是类所有对象的共享
成
员,而不是某个对象的
成
员,
不能
使用this指针访问 1.virtual与静态
函数
C++中,
静态
成
员
函数
不能
被
声明
为virtual
函数
。 例如,下面的程序会编译失败。 #include<iostream> class Test { public: // 编译错误:static
成
员
函数
不能
声明
为virtual virtual st
C++里的
静态
成
员
函数
不能
用
const
的原因
static在c++中的第五种含义:用static修饰不访问非静态数据
成
员的类
成
员
函数
。这意味着一个
静态
成
员
函数
只能访问它的参数、类的静态数据
成
员和全局变量。
不能
用
const
的原因: 这是C++的规则,
const
修饰符用于表示
函数
不能
修改
成
员变量的值,该
函数
必须是含有this指针的类
成
员
函数
,
函数
调用方式为thiscall,而类中的static
函数
本质上是全局
函数
,调用规
C++ 语言
64,680
社区成员
250,490
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章