【灌水】闲谈一下Cpp相关问题(随便大家发挥)

cber 2006-08-20 11:33:38
最近貌似板块里面比较活跃,不但有人提出“Cpp误了OO”,更而甚者,还有人开始谈论起“软件危机”,呵呵……
反正我的可用分太多也无处花,顺便开个帖子给大家灌水,浪费一些可用分吧^_^

不希望出现诸如“接分”,“up”之类的回复,其他任何有意义的回复我都欢迎
...全文
1300 110 打赏 收藏 转发到动态 举报
写回复
用AI写文章
110 条回复
切换为时间正序
请发表友善的回复…
发表回复
sjjf 2006-09-13
  • 打赏
  • 举报
回复
>>好像 java/c# 没有构造函数似的

不会吧,怎么会有这种感觉呢?

谁都知道构造函数是什么,但是估计只有1/2的人知道构造函数是怎么实现的。
adintr 2006-09-13
  • 打赏
  • 举报
回复
说得好像 java/c# 没有构造函数似的
sjjf 2006-09-13
  • 打赏
  • 举报
回复
例如,对象的创生相关:对象的空间是如何分配的(堆对象/栈对象)? 什么时候需要构造函数,哪些人不想支付这个构造函数的成本?
==========================
class X{
int m_x = 0;
int m_y = 20;
}
==========================
你能想到什么更好的方式来实现这种方式,而调众口。
记住,使用c的人是不喜欢别人给他多加东西的。

而且不管在逻辑层面还是在实现层面,把空间的申请和初始化搅在一起,把事情弄复杂了。

cpp并不是不提供解决方案:构造函数。
如果允许在构造函数中初始化该值,也允许上面的方式的初始化,那么容易造成逻辑错误。

如果了解cpp对象的创生过程。这一切就觉得很自然了。
Wolf0403 2006-09-13
  • 打赏
  • 举报
回复
这跟堆对象/栈对象又有多少关系?
Wolf0403 2006-09-12
  • 打赏
  • 举报
回复
盖个 100 楼。

community driven 的东西从来都是质量参差不齐的。Boost 这样已经算是相当极品了。
adintr 2006-09-12
  • 打赏
  • 举报
回复
boost 库的质量参差不齐,有的好,有的差。
wingfiring 2006-09-12
  • 打赏
  • 举报
回复

为什么一定要OO才美呢?有了OO世界更精彩,可是,只有OO,世界就死翘翘了。

对我来说,这个世界还真得不能没有boost。它是我的垫脚石,我无法想象,到这里找一个smart_ptr,到那里找一个function,bind,更别提type_traits这样的东西了。而且,我信任boost的品质.boost不是垃圾桶,而是藏宝窟.
sjjf 2006-09-12
  • 打赏
  • 举报
回复
==========================================================
1. 声明类的时候为什么不能直接指明初值,非得通过初时化表呢? 即向下面这样:
class X{
int m_x = 0;
int m_y = 20;
}
==========================================================
如果知道一个类实例在堆栈或堆上的创生就知道怎么回事了,就不会苛求这点了。

为了效率,编译器并不会给你所谓的简单类生成构造函数的。
晨星 2006-09-12
  • 打赏
  • 举报
回复
sorry,“效率不见得高”那句说错了,没想清楚,各种实现方案应该都差不多的,总归要初始化一下。
晨星 2006-09-12
  • 打赏
  • 举报
回复
对adintr(www.adintr.com)(其实,我不是一个演员)提出问题的一点个人理解:

1. 声明类的时候为什么不能直接指明初值,非得通过初时化表呢? 即向下面这样:
class X{
int m_x = 0;
int m_y = 20;
}
虽然这只不过是语法上的一个,不影响结构,但对代码的阅读和书写方便很多,尤其是简单类。

——JAVA和C#允许这样做的,JAVA的实现原理不是很清楚,C#是通过在编译器构造函数中插入语句来实现的,效率不见得高。
更重要的,C++不像JAVA和C#那样把类的定义和实现放在一起,而且头文件还常做为产品的一部分跟二进制文件一起发布(比如library),换句话说头文件可能是组件接口的一部分。于是当你在头文件中指定初始值并提供这样的头文件给客户使用的时候,第一,等于暴露了实现细节;第二,构造函数的实现体用户是看不到的,如果在构造函数中又修改了变量,会给用户带来一些“惊讶”。——JAVA和C#一般只发布二进制文件,要么就连出所有源文件一起发布,于是用户要么全看到,要么全看不到,也就不会有惊讶。

2. 为什么就不能加个属性呢? 虽然可以用 set/get 函数,但概念不明确。
——属性是个好东西,把一个编程中常用的而且也很明确的概念制定到了语言语法中。但这个东西一直到C#才有,当年的JAVA设计者都没想到,更不用说C++了,毕竟人类也是一步一步变聪明的嘛。:P

3. 模板定义必须放在头文件里面。
——这个可能要归罪于C++没有元数据和二进制标准了。:(不过也不能全怪,你看那些拥有元数据和二进制标准(至少标准到OO的程度)的大都是跑在虚拟机上的语言。:(
adintr 2006-09-12
  • 打赏
  • 举报
回复
c++ 有几个让我不爽的地方:
1. 声明类的时候为什么不能直接指明初值,非得通过初时化表呢? 即向下面这样:
class X{
int m_x = 0;
int m_y = 20;
}
虽然这只不过是语法上的一个,不影响结构,但对代码的阅读和书写方便很多,尤其是简单类。

2. 为什么就不能加个属性呢? 虽然可以用 set/get 函数,但概念不明确。

3. 模板定义必须放在头文件里面。
cber 2006-09-12
  • 打赏
  • 举报
回复
community driven 的东西从来都是质量参差不齐的。Boost 这样已经算是相当极品了
=======
关键是,cpp community绝对是属于最critical的一个tech community,因此不让我bs boost是不符合整个community的宗旨的,哈哈哈……
cber 2006-09-12
  • 打赏
  • 举报
回复
我信任boost的品质.boost不是垃圾桶,而是藏宝窟.
=======
看来秃子喜欢翻垃圾堆了^_^
4、5年前,我觉得boost还不错,但现在……不是必要的情况下,我基本上都不会去翻它了,觉得boost已经丧失了它以前带给过给我的美感
xlsue 2006-09-08
  • 打赏
  • 举报
回复
都是我的语文太差,表达不清楚。前面是说cpp,后面说的oo是一些框架,如:ace
cber 2006-09-08
  • 打赏
  • 举报
回复
你真的觉得STL BOOST是oo的?还散发着oo迷人的香味!你认为oo是什么呀?啥都可以装进去的一个大垃圾桶?
=============
其实boost现在就是一个你所说的“啥都可以装进去的一个大垃圾桶”
fixopen 2006-09-08
  • 打赏
  • 举报
回复
觉得还是要多读读象STL、BOOST等源码,还有一些框架如ACE,里面有很多精美的东西。说cpp误了oo,为什么老外用cpp来炒出来的菜,总是散发着oo迷人的香味呢?在说cpp的时候,自己的掌勺功夫真的过硬了吗?

你真的觉得STL BOOST是oo的?还散发着oo迷人的香味!你认为oo是什么呀?啥都可以装进去的一个大垃圾桶?
xlsue 2006-09-01
  • 打赏
  • 举报
回复
觉得还是要多读读象STL、BOOST等源码,还有一些框架如ACE,里面有很多精美的东西。说cpp误了oo,为什么老外用cpp来炒出来的菜,总是散发着oo迷人的香味呢?在说cpp的时候,自己的掌勺功夫真的过硬了吗?
hjon 2006-09-01
  • 打赏
  • 举报
回复
GP....../OO......./C++

坚持到底.......!
OOPhaisky 2006-08-31
  • 打赏
  • 举报
回复
CPP误了OO,无稽之谈!!!
Radar2006 2006-08-31
  • 打赏
  • 举报
回复
up
加载更多回复(90)

15,440

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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