由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - question regarding effective c++ by Meyers
相关主题
请教个Bloomberg 的 C++ 题目用包子呼唤大牛们--问关于C++Destructor的问题
菜鸟请教smart pointer请问以下代码有什么错误?
What is wrong with the constructor calling?问个无厘头问题
有一事我一直就是不明白c++ initialize struct
make 时候遇到 undefined reference 怎么办?我真不明白c++有什么难的
[合集] C++ interview question helpCan we define pure virtual function? (转载)
急问:compile and build dependency请教如何提高C++编程(面试)能力?
请教一下,exception时,destructor一定会被调用么?谁来解释一下这个是compiler问题吗?
相关话题的讨论汇总
话题: c++话题: string话题: char话题: effective话题: meyers
进入Programming版参与讨论
1 (共1页)
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. 一次运行不出错不代表程序本身没问题。现实中就是这种潜在的错误最难调试。
: 所以要争取开始就搞对了。
:
: 了

相关主题
[合集] C++ interview question help用包子呼唤大牛们--问关于C++Destructor的问题
急问:compile and build dependency请问以下代码有什么错误?
请教一下,exception时,destructor一定会被调用么?问个无厘头问题
进入Programming版参与讨论
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

相关主题
c++ initialize struct请教如何提高C++编程(面试)能力?
我真不明白c++有什么难的谁来解释一下这个是compiler问题吗?
Can we define pure virtual function? (转载)抠字眼:assignment and initialize in C++
进入Programming版参与讨论
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?

相关主题
C++里\0在里不再是标记string end的special charactor菜鸟请教smart pointer
一个c++ constructor的问题, thanksWhat is wrong with the constructor calling?
请教个Bloomberg 的 C++ 题目有一事我一直就是不明白
进入Programming版参与讨论
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...
: 我觉得语言是个工具,语言的设计应该是让人很容易使用,就像自然语言,你掌握了大
: 概的语法和基本词汇就可以使用了,如果你非得背下所有这样的稀奇古怪的规则才可以
: 开口说话或者阅读的话,这个语言会死得很快。。。

相关主题
有一事我一直就是不明白急问:compile and build dependency
make 时候遇到 undefined reference 怎么办?请教一下,exception时,destructor一定会被调用么?
[合集] C++ interview question help用包子呼唤大牛们--问关于C++Destructor的问题
进入Programming版参与讨论
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:)
1 (共1页)
进入Programming版参与讨论
相关主题
谁来解释一下这个是compiler问题吗?make 时候遇到 undefined reference 怎么办?
抠字眼:assignment and initialize in C++[合集] C++ interview question help
C++里\0在里不再是标记string end的special charactor急问:compile and build dependency
一个c++ constructor的问题, thanks请教一下,exception时,destructor一定会被调用么?
请教个Bloomberg 的 C++ 题目用包子呼唤大牛们--问关于C++Destructor的问题
菜鸟请教smart pointer请问以下代码有什么错误?
What is wrong with the constructor calling?问个无厘头问题
有一事我一直就是不明白c++ initialize struct
相关话题的讨论汇总
话题: c++话题: string话题: char话题: effective话题: meyers