t********s 发帖数: 54 | 1 最近看了Effective C++ 2nd的一部分,感觉里面提到的有些东西要在实际coding中完
全做到似乎非常复杂,比如item 11,Declare a copy constructor and an
assignment operator for classes with dynamically allocated memory,我尝试了
下面这段代码:
#include
using namespace std;
class String {
public:
String(const char *value);
~String() {};
char * getString();
private:
char *data;
};
String::String(const char *value)
{
if (value) {
data = new char[strlen(value) + 1];
strcpy(data, value);
|
N***m 发帖数: 4460 | 2 undefined behaviors.
问个题外话,你是cs major的吗?修炼c++多久了?
【在 t********s 的大作中提到】 : 最近看了Effective C++ 2nd的一部分,感觉里面提到的有些东西要在实际coding中完 : 全做到似乎非常复杂,比如item 11,Declare a copy constructor and an : assignment operator for classes with dynamically allocated memory,我尝试了 : 下面这段代码: : #include : using namespace std; : class String { : public: : String(const char *value); : ~String() {};
|
N***m 发帖数: 4460 | 3 杀鸡用牛刀,总比以后杀牛没有牛刀只能用鸡刀好
【在 t********s 的大作中提到】 : 最近看了Effective C++ 2nd的一部分,感觉里面提到的有些东西要在实际coding中完 : 全做到似乎非常复杂,比如item 11,Declare a copy constructor and an : assignment operator for classes with dynamically allocated memory,我尝试了 : 下面这段代码: : #include : using namespace std; : class String { : public: : String(const char *value); : ~String() {};
|
X****r 发帖数: 3557 | 4 1. C++就是一个特别复杂的语言。你说的这个才是最初级的。
2. 这本书讲的这一点没有过时。
3. VC和标准C++是不完全一样,但是这种基本的东西是不可能有区别的。
4. 一次运行不出错不代表程序本身没问题。现实中就是这种潜在的错误最难调试。
所以要争取开始就搞对了。
了
【在 t********s 的大作中提到】 : 最近看了Effective C++ 2nd的一部分,感觉里面提到的有些东西要在实际coding中完 : 全做到似乎非常复杂,比如item 11,Declare a copy constructor and an : assignment operator for classes with dynamically allocated memory,我尝试了 : 下面这段代码: : #include : using namespace std; : class String { : public: : String(const char *value); : ~String() {};
|
t********s 发帖数: 54 | 5
undefined behaviors? 我连续运行很多次,结果都是原来指针指向的内容被完好地输
出,难道都是巧合?我觉得default constructor删除指针,所以可能导致内存泄露倒
是可以理解,但default constructor删除指针指向的内容,总觉得不太符合常理。
Effective C++里面讲的那些小问题,感觉如果不事先看,恐怕在实际中遇到了还真是
很难调试出来,但是如果C++里面有这么多这样的小的并且非常致命的trick,那想用这
个语言快速实现些东西,岂不是很难?
哪位看过这本书的兄弟分享一下看法?
是,不过也就课堂水平而已,而且多年不用已经忘得差不多了:(
【在 N***m 的大作中提到】 : undefined behaviors. : 问个题外话,你是cs major的吗?修炼c++多久了?
|
E*U 发帖数: 2028 | 6 "b的default destructor就会删除这个指针以及他所指向的
内容"
????
since your destructor is empty
how come "delete data" will be executed?
I am lost
【在 t********s 的大作中提到】 : 最近看了Effective C++ 2nd的一部分,感觉里面提到的有些东西要在实际coding中完 : 全做到似乎非常复杂,比如item 11,Declare a copy constructor and an : assignment operator for classes with dynamically allocated memory,我尝试了 : 下面这段代码: : #include : using namespace std; : class String { : public: : String(const char *value); : ~String() {};
|
t********s 发帖数: 54 | 7 大哥你这么一说,说得我对C++的葱白一下子没有了:)在现实工作中,如果大家的精
力都用在关注这样的小trick上,那哪里还有时间用来思考和解决实际business方面的
问题?
我不否认在某些特殊的时候,有些问题只有C++才能最有效的解决问题,比如非常要求
运行速度之类,但是如果程序员要花很多精力关注language本身,seems something is
wrong...
我觉得语言是个工具,语言的设计应该是让人很容易使用,就像自然语言,你掌握了大
概的语法和基本词汇就可以使用了,如果你非得背下所有这样的稀奇古怪的规则才可以
开口说话或者阅读的话,这个语言会死得很快。。。
【在 X****r 的大作中提到】 : 1. C++就是一个特别复杂的语言。你说的这个才是最初级的。 : 2. 这本书讲的这一点没有过时。 : 3. VC和标准C++是不完全一样,但是这种基本的东西是不可能有区别的。 : 4. 一次运行不出错不代表程序本身没问题。现实中就是这种潜在的错误最难调试。 : 所以要争取开始就搞对了。 : : 了
|
S*********g 发帖数: 5298 | 8 undefined behavior =/= random behavior
undefined means any behavior is possible. Different enviroments and/or
different compiler could lead to different behavior.
【在 t********s 的大作中提到】 : 大哥你这么一说,说得我对C++的葱白一下子没有了:)在现实工作中,如果大家的精 : 力都用在关注这样的小trick上,那哪里还有时间用来思考和解决实际business方面的 : 问题? : 我不否认在某些特殊的时候,有些问题只有C++才能最有效的解决问题,比如非常要求 : 运行速度之类,但是如果程序员要花很多精力关注language本身,seems something is : wrong... : 我觉得语言是个工具,语言的设计应该是让人很容易使用,就像自然语言,你掌握了大 : 概的语法和基本词汇就可以使用了,如果你非得背下所有这样的稀奇古怪的规则才可以 : 开口说话或者阅读的话,这个语言会死得很快。。。
|
t********s 发帖数: 54 | 9
谢谢指出问题。我试了试把destructor 定义去掉,还是一样的结果。运行了很多次,
输出都是正常的
【在 E*U 的大作中提到】 : "b的default destructor就会删除这个指针以及他所指向的 : 内容" : ???? : since your destructor is empty : how come "delete data" will be executed? : I am lost
|
S*********g 发帖数: 5298 | 10 你需要把这个undefined behavior做个置底了。
这样每次看到有人问undefined behavior的,
直接给指引到置底就行了
【在 X****r 的大作中提到】 : 1. C++就是一个特别复杂的语言。你说的这个才是最初级的。 : 2. 这本书讲的这一点没有过时。 : 3. VC和标准C++是不完全一样,但是这种基本的东西是不可能有区别的。 : 4. 一次运行不出错不代表程序本身没问题。现实中就是这种潜在的错误最难调试。 : 所以要争取开始就搞对了。 : : 了
|
|
|
E*U 发帖数: 2028 | 11 I mean if you want something wrong
you need explicitely write
~String () { delete data;}
【在 t********s 的大作中提到】 : : 谢谢指出问题。我试了试把destructor 定义去掉,还是一样的结果。运行了很多次, : 输出都是正常的
|
X****r 发帖数: 3557 | 12 C++的开发效率总体来说的确是不如其他高级语言,它的复杂性是原因之一。
对于许多应用来说,它并不是最合适的语言。所以如果你有选择的话,不学也罢。
is
【在 t********s 的大作中提到】 : 大哥你这么一说,说得我对C++的葱白一下子没有了:)在现实工作中,如果大家的精 : 力都用在关注这样的小trick上,那哪里还有时间用来思考和解决实际business方面的 : 问题? : 我不否认在某些特殊的时候,有些问题只有C++才能最有效的解决问题,比如非常要求 : 运行速度之类,但是如果程序员要花很多精力关注language本身,seems something is : wrong... : 我觉得语言是个工具,语言的设计应该是让人很容易使用,就像自然语言,你掌握了大 : 概的语法和基本词汇就可以使用了,如果你非得背下所有这样的稀奇古怪的规则才可以 : 开口说话或者阅读的话,这个语言会死得很快。。。
|
S*********g 发帖数: 5298 | 13 nod
语言好不好用,要看用的人,和面对的问题
【在 X****r 的大作中提到】 : C++的开发效率总体来说的确是不如其他高级语言,它的复杂性是原因之一。 : 对于许多应用来说,它并不是最合适的语言。所以如果你有选择的话,不学也罢。 : : is
|
E*U 发帖数: 2028 | 14 btw, void main is not legal (according to someboday)
【在 t********s 的大作中提到】 : 最近看了Effective C++ 2nd的一部分,感觉里面提到的有些东西要在实际coding中完 : 全做到似乎非常复杂,比如item 11,Declare a copy constructor and an : assignment operator for classes with dynamically allocated memory,我尝试了 : 下面这段代码: : #include : using namespace std; : class String { : public: : String(const char *value); : ~String() {};
|
E*U 发帖数: 2028 | 15 sorry
~String () { delete [] data;};
if you write your d...ctor that way,
I think you will have a problem.
【在 E*U 的大作中提到】 : btw, void main is not legal (according to someboday)
|
X****r 发帖数: 3557 | 16 嗯,有道理,谁来写一篇?
【在 S*********g 的大作中提到】 : 你需要把这个undefined behavior做个置底了。 : 这样每次看到有人问undefined behavior的, : 直接给指引到置底就行了
|
p***o 发帖数: 1252 | 17 你这根本就没入现实工作的门,太低估系统的复杂度了。要是事情动动
嘴皮子用自然语言就能搞定,IT民工还能呆在这里 ?
is
【在 t********s 的大作中提到】 : 大哥你这么一说,说得我对C++的葱白一下子没有了:)在现实工作中,如果大家的精 : 力都用在关注这样的小trick上,那哪里还有时间用来思考和解决实际business方面的 : 问题? : 我不否认在某些特殊的时候,有些问题只有C++才能最有效的解决问题,比如非常要求 : 运行速度之类,但是如果程序员要花很多精力关注language本身,seems something is : wrong... : 我觉得语言是个工具,语言的设计应该是让人很容易使用,就像自然语言,你掌握了大 : 概的语法和基本词汇就可以使用了,如果你非得背下所有这样的稀奇古怪的规则才可以 : 开口说话或者阅读的话,这个语言会死得很快。。。
|
t****t 发帖数: 6806 | 18 a good c++ programmer will not focus on these little tricks, because these
are already deep in his blood. like walking is a complex action, little kids
may need to take quite a while to master. but you don't focus on it when
you walk everyday.
however it is indeed complex for beginners. BTW c++ is not super fast if you
don't write it properly. even you write it properly, it is probably still
no faster than C or fortran.
all these said, you don't have learn c++ from the beginning.
is
【在 t********s 的大作中提到】 : 大哥你这么一说,说得我对C++的葱白一下子没有了:)在现实工作中,如果大家的精 : 力都用在关注这样的小trick上,那哪里还有时间用来思考和解决实际business方面的 : 问题? : 我不否认在某些特殊的时候,有些问题只有C++才能最有效的解决问题,比如非常要求 : 运行速度之类,但是如果程序员要花很多精力关注language本身,seems something is : wrong... : 我觉得语言是个工具,语言的设计应该是让人很容易使用,就像自然语言,你掌握了大 : 概的语法和基本词汇就可以使用了,如果你非得背下所有这样的稀奇古怪的规则才可以 : 开口说话或者阅读的话,这个语言会死得很快。。。
|
N***m 发帖数: 4460 | 19 这年头你不会c++,出门都不好意思和人家打招呼。
kids
you
【在 t****t 的大作中提到】 : a good c++ programmer will not focus on these little tricks, because these : are already deep in his blood. like walking is a complex action, little kids : may need to take quite a while to master. but you don't focus on it when : you walk everyday. : however it is indeed complex for beginners. BTW c++ is not super fast if you : don't write it properly. even you write it properly, it is probably still : no faster than C or fortran. : all these said, you don't have learn c++ from the beginning. : : is
|
E*U 发帖数: 2028 | 20 s/c++/java/
【在 N***m 的大作中提到】 : 这年头你不会c++,出门都不好意思和人家打招呼。 : : kids : you
|
|
|
N***m 发帖数: 4460 | 21 我正在看此书,感觉有的地方写的有点乱,比如那个reference couting,
我直接跳过。但是大多数地方写的还是挺好理解的,也不难。
【在 t********s 的大作中提到】 : : 谢谢指出问题。我试了试把destructor 定义去掉,还是一样的结果。运行了很多次, : 输出都是正常的
|
N***m 发帖数: 4460 | 22 we learn c++ because some jobs use c++, not because it is easy to use.
is
【在 t********s 的大作中提到】 : 大哥你这么一说,说得我对C++的葱白一下子没有了:)在现实工作中,如果大家的精 : 力都用在关注这样的小trick上,那哪里还有时间用来思考和解决实际business方面的 : 问题? : 我不否认在某些特殊的时候,有些问题只有C++才能最有效的解决问题,比如非常要求 : 运行速度之类,但是如果程序员要花很多精力关注language本身,seems something is : wrong... : 我觉得语言是个工具,语言的设计应该是让人很容易使用,就像自然语言,你掌握了大 : 概的语法和基本词汇就可以使用了,如果你非得背下所有这样的稀奇古怪的规则才可以 : 开口说话或者阅读的话,这个语言会死得很快。。。
|
N***m 发帖数: 4460 | 23 适合于教学。
【在 X****r 的大作中提到】 : C++的开发效率总体来说的确是不如其他高级语言,它的复杂性是原因之一。 : 对于许多应用来说,它并不是最合适的语言。所以如果你有选择的话,不学也罢。 : : is
|
N***m 发帖数: 4460 | 24 s是啥?
【在 E*U 的大作中提到】 : s/c++/java/
|
E*U 发帖数: 2028 | 25 sed 's/c++/java/'
....
you are not a linux guy....
【在 N***m 的大作中提到】 : s是啥?
|
g****y 发帖数: 436 | 26 s/c++/java/g
【在 E*U 的大作中提到】 : s/c++/java/
|
N***m 发帖数: 4460 | 27 right, still don't get it,hehe
【在 E*U 的大作中提到】 : sed 's/c++/java/' : .... : you are not a linux guy....
|
E*U 发帖数: 2028 | 28 en, better
【在 g****y 的大作中提到】 : s/c++/java/g
|
X****r 发帖数: 3557 | 29 substitution
没用过vi?没学过perl?
【在 N***m 的大作中提到】 : s是啥?
|
N***m 发帖数: 4460 | 30 前几天听说过,讨论 perl python的时候。
【在 X****r 的大作中提到】 : substitution : 没用过vi?没学过perl?
|
|
|
g****y 发帖数: 436 | 31 how many 6-month-long projects are needed to be "deep in his blood"?
I cant agree with you more. But C++ is still not as productive as java, for
beginners like me. I admit handling both the business logic and language spe
cs at the same time is quite difficult for me.
Our company hires a 50-year-old man to transform all of our "research codes"
(c++) into production codes.
kids
you
【在 t****t 的大作中提到】 : a good c++ programmer will not focus on these little tricks, because these : are already deep in his blood. like walking is a complex action, little kids : may need to take quite a while to master. but you don't focus on it when : you walk everyday. : however it is indeed complex for beginners. BTW c++ is not super fast if you : don't write it properly. even you write it properly, it is probably still : no faster than C or fortran. : all these said, you don't have learn c++ from the beginning. : : is
|
X****r 发帖数: 3557 | 32 太不适合了。
Lisp或者Smalltalk还差不多,概念清晰又有深度。
不过好像现在大学里也都讲Java和C#了。
【在 N***m 的大作中提到】 : 适合于教学。
|
N***m 发帖数: 4460 | 33 都是台南的东西
【在 X****r 的大作中提到】 : substitution : 没用过vi?没学过perl?
|
t********s 发帖数: 54 | 34 你说的对,这样确实导致问题。meyers的书强调的也是缺省的copy和assignment
constructor会进行memberwise的赋值,这样在destruct超过一次后会出问题。
看来还是理解不够。。。
【在 E*U 的大作中提到】 : sorry : ~String () { delete [] data;}; : if you write your d...ctor that way, : I think you will have a problem.
|
t********s 发帖数: 54 | 35 so undefined behavior can be consistent in a given environment. understood
now.
thanks
【在 S*********g 的大作中提到】 : undefined behavior =/= random behavior : undefined means any behavior is possible. Different enviroments and/or : different compiler could lead to different behavior.
|
N***m 发帖数: 4460 | 36 你说的这两个俺都没接触过。
我个人觉得c++还是不错的,当然我市比较python,java的
【在 X****r 的大作中提到】 : 太不适合了。 : Lisp或者Smalltalk还差不多,概念清晰又有深度。 : 不过好像现在大学里也都讲Java和C#了。
|
t********s 发帖数: 54 | 37 我是用自然语言打个比喻,当然没有指望编程能这么容易
【在 p***o 的大作中提到】 : 你这根本就没入现实工作的门,太低估系统的复杂度了。要是事情动动 : 嘴皮子用自然语言就能搞定,IT民工还能呆在这里 ? : : is
|
E*U 发帖数: 2028 | 38 calling them assignment operator
copy constructor
I think, helps to make things easier to understand
【在 t********s 的大作中提到】 : 你说的对,这样确实导致问题。meyers的书强调的也是缺省的copy和assignment : constructor会进行memberwise的赋值,这样在destruct超过一次后会出问题。 : 看来还是理解不够。。。
|
N***m 发帖数: 4460 | 39 搞了几天java,觉得java就是抽去脂肪的c++阿
【在 X****r 的大作中提到】 : 太不适合了。 : Lisp或者Smalltalk还差不多,概念清晰又有深度。 : 不过好像现在大学里也都讲Java和C#了。
|
h****2 发帖数: 176 | 40 这儿有个采访:
http://artlung.com/smorgasborg/Invention_of_Cplusplus.shtml
可以解释设计C++的最终目的
is
【在 t********s 的大作中提到】 : 大哥你这么一说,说得我对C++的葱白一下子没有了:)在现实工作中,如果大家的精 : 力都用在关注这样的小trick上,那哪里还有时间用来思考和解决实际business方面的 : 问题? : 我不否认在某些特殊的时候,有些问题只有C++才能最有效的解决问题,比如非常要求 : 运行速度之类,但是如果程序员要花很多精力关注language本身,seems something is : wrong... : 我觉得语言是个工具,语言的设计应该是让人很容易使用,就像自然语言,你掌握了大 : 概的语法和基本词汇就可以使用了,如果你非得背下所有这样的稀奇古怪的规则才可以 : 开口说话或者阅读的话,这个语言会死得很快。。。
|
|
|
t********s 发帖数: 54 | 41 I cannot believe that is real... But I sort of feel that way to some degree:)
【在 h****2 的大作中提到】 : 这儿有个采访: : http://artlung.com/smorgasborg/Invention_of_Cplusplus.shtml : 可以解释设计C++的最终目的 : : is
|
n******t 发帖数: 4406 | 42 C++肯定不好学。。。。因为C++本省就不是C,但是因为不装个C的壳子必然会悲剧所以
不得不这么干。结果就是一塌糊涂。
还有如果真正按那些个design pattern干,大部分情况只能写一些比较通用的程序,效
率也不会很高。
【在 t********s 的大作中提到】 : I cannot believe that is real... But I sort of feel that way to some degree:)
|