请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

类中的静态成员变量必须“类内声明、类外初始化”?

必须将声明和初始化拆开?没道理!其他语言不必拆分也都可以的,为什么C++非得这么干?原本寥寥几行代码的单例模式,用C++写起来这么费劲。一点也不优雅,求推荐一门语法类似 JavaScript 的编译型语言,不想学 C++ 了

正在回答

1回答

关于声明和定义的问题,请参考: https://coding.imooc.com/learn/questiondetail/280318.html

关于静态成员初始化问题:
由于静态成员并不属于类对象的一部分,而属于这个类的所有对象共有部分,所以在类内初始化当然是不合理的。C++语言希望用户能够尽可能掌控内存空间,会在编译时独自给这种静态变量开辟一块空间,这与在内存中产生的对象不属于同一空间,所以不允许在类定义时对其进行初始化操作。

C++这门语言确实需要程序员掌控更多内存细节,但同时会获得更强的掌控能力,做其他语言所无法完成的事情。

0 回复 有任何疑惑可以回复我~
  • 提问者 zhaiduting #1
    感谢老师的回复,目前打算暂停一下C++的学习了。其实我是挺喜欢php的,既没有拆分头文件的麻烦,也不用把静态变量放到类外去初始化,还有统一的包管理工具。另外,在php里面像 new static() 这样的延迟实例化写法以及 self 关键字等等,在 C++ 里好像没有。本来是打算再学一门编译型的、并且像PHP这样方便好用的语言,但是感觉 C++ 并不是我想要的。接下来准备去看看 Rust 语言,据说这东西号称是 C 语言和 C++ 的继任者。也许是语言作者在吹嘘,我先看看再说。什么 Rust 啊,GoLang啊,等等,都去看看
    回复 有任何疑惑可以回复我~ 2022-12-15 06:49:54
  • quickzhao 回复 提问者 zhaiduting #2
    据我说知,你所说的所有特性C++都有,只是因为历史发展的原因,C++在很多方面实现起来的选择方式很多,需要了解更多的历史背景和语法细节。不管使用和学习任何一门编程语言,如果要从C++语言取经,建议最应该关注的是C++对于内存的优化和掌握这些细节,这些是C++的精髓部分。
    回复 有任何疑惑可以回复我~ 2022-12-19 18:55:49
  • 提问者 zhaiduting 回复 quickzhao #3
    谢谢老师
    回复 有任何疑惑可以回复我~ 2022-12-20 10:54:59
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信