- 主题:用c++可能会遇到哪些坑
语言上:
主要的坑:指针失效以及没有垃圾回收、还不支持完善的反射
优势:多重继承、操作符重载、强大的泛型
库与周边:
在网络、互联网、数据库、用户界面(这俩与不支持反射有关)上支持的比较少
也不像python等有专项专长的库,例如爬虫、人工智能等
STL、Boost、Poco等很多库要鉴别是不是支持多线程
生态上:
共享的项目比较少,要敢于面对孤独
发展:
WebAssembly 进展不错,反射要等到C++23,界面和序列化估计会有进展
【 在 telangpujing (telangpujing) 的大作中提到: 】
--
FROM 61.51.102.*
你这个算是一种观点,支持的人也不少,有道理。
我的看法是角度不同,结果就不同。
避免多重继承的代价,是引入类和接口两种东西,类结构复杂化;
反过来,支持多继承,就不需要类和接口两种东西,但就要妥善解决虚继承问题。
Java 8、C# 8.0 先后在接口中支持默认方法,这就是往多继承又迈进了一步。
目前与C++的不同仅仅在于接口里不支持默认的成员变量。
有很多网上的文章上来就说多重继承如何难以定义和处理,这本身就有先入为主的
洗脑嫌疑。从建模看,如果多重继承与实际模型更接近,就意味着使用类和接口的
复杂性的代价更高。
当然,Java/C#作为简化版的C++,从对初学者友好的角度,让类的结构简单化本身
没有问题,只是把确实需要的场景的负担转嫁出去了。
另外还有观点认为继承本身就多余,不如使用组合,从他的角度出发也有道理,
反正可以解决问题。
我的观点倒是C++固守老一套,对网络、反射、数据库的支持不足,使得它逐步脱离
时代,语言本身的特点应该不是主要问题。
【 在 iFighter (0_Oo) 的大作中提到: 】
: 多重继承 绝对是祸害源泉...
--
修改:exbluesea FROM 123.118.213.*
FROM 123.118.213.*
的确,程序是否有比较好的可读性,和程序语言本身没啥太大关系。
看看今天流行的 Java/C#,中国公司里面一堆一堆的项目,代码烂到不能再烂。
去达内、青鸟几个月就可以学个程序员出来。
话说回来,当年在学校,不少实验室的博士硕士又怎样,该烂一样烂。
【 在 allegro (静水流深) 的大作中提到: 】
: 看不懂别人的程序不是你的问题,是别人程序可读性的问题。
: 不过这都不是问题,问题在于别人在不在意你看不懂。
: 别人在意,别人提高可读性。
: ...................
--
FROM 123.118.213.*
是是
【 在 hongdiao (hongdiao) 的大作中提到: 】
: 一般的库比如容器默认都不是线程安全的吧, 有需要都是有专门的线程安全版本。 平时自己写代码也都是假定单线程, 遇见多线程场景再在外面封装/保护吧?
--
FROM 123.118.213.*
写C++派生类构造函数时指定怎样调用基类构造函数,这个算是比较干净的做法。
Java搞的比较脏,规定调用super()只能在构造函数第一句;C#又往回改成了类似
C++的方式,只是把基类构造函数的名字换成了base()。
这一点,C++ 好于 C# 好于 Java。
【 在 iwannabe (I wanna be) 的大作中提到: 】
: 继承会缺省执行一遍super(),算不算?
--
FROM 123.118.213.*
另一个坑是中文显示
Java/C#都直接用了utf,
C/C++在Windows里utf和万恶的GBK搅合在一起,特别是用mingw的时候。
【 在 downdownup (downdownup) 的大作中提到: 】
: c++的坑实在太多了,感觉c++就是把很多编译器的功能开放给用户做设置
--
FROM 123.118.213.*