由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - [effective c++] question on item 18: on static method
相关主题
请教各路C++大神 为什么f(3) 输出是 'dd'请问static variable init的问题?
Test your C++ knowledge...请教问题
Re: 110道C++面试题目,你会做多少? (转载)请教一下,exception时,destructor一定会被调用么?
怎么搞的?c++ 一问
C++ cast 小结C++默认的copy constructor的疑惑
抠字眼:assignment and initialize in C++问个题。
这段code有啥问题?copy constructor 问题
请教一个C++概念。问一个 copy constructor 的问题 (C++)
相关话题的讨论汇总
话题: month话题: static话题: jan话题: item话题: effective
进入Programming版参与讨论
1 (共1页)
r****t
发帖数: 10904
1
item 18 (p80):
class Month {
public:
static Month Jan() { return Month(1); }
...
private:
explicit Month(int m);
};
这里的 static method 为什么不是
static Month Jan() { static Month m = Month(1); return m; }

按照 item 4 解释需要一个 local static,但是这里返回的不是 local static, 所以
每次 Month::Jan() 调用的时候都需要 create Month(1) 对象,而按 item 4 方法的
话,应该是 local static 这样只在第一次调用 Month::Jan() 的时候才创建对象。
这个的理解对不?
BTW,侯捷的 effective c++ 译的很烂,应该是机器翻译的再手修改了一下就拿出来卖
了。以前看到有人还推荐他译的哪一本来着。。
S*******s
发帖数: 13043
2
His: one constructor per call
Yours: one copy constructor per call + one constructor.
In this particular case, his is a little better
y**b
发帖数: 10166
3
最后一个static想干什么呢?
第一次多调用拷贝构造函数,以后每次多调用copy assignment.

【在 r****t 的大作中提到】
: item 18 (p80):
: class Month {
: public:
: static Month Jan() { return Month(1); }
: ...
: private:
: explicit Month(int m);
: };
: 这里的 static method 为什么不是
: static Month Jan() { static Month m = Month(1); return m; }

r****t
发帖数: 10904
4
你说的没错,这里是问如果照作者解释的一样按 item 4 应该怎么办,和实际上作
者怎么办,以及实际上作者的办法 (return local obj) 是不是和使用 item 4
(local static obj) 是一回事?

【在 y**b 的大作中提到】
: 最后一个static想干什么呢?
: 第一次多调用拷贝构造函数,以后每次多调用copy assignment.

y**b
发帖数: 10166
5
看了第三版(跟第二版还是有些改动)的item 18,
这个Month类是想设计成一个静态类(类似于一个全局变量)来用:
class Month {
public:
static Month Jan() { return Month(1); }
...
private:
explicit Month(int m):val(m) {}
static int val;
};
你说的两种做法效果相同(效率不同),因为整个Month类就是一个
静态类,返回值是否声明static Month应该没有影响,作者的办法
看似return local obj, 实际return static obj。

【在 r****t 的大作中提到】
: 你说的没错,这里是问如果照作者解释的一样按 item 4 应该怎么办,和实际上作
: 者怎么办,以及实际上作者的办法 (return local obj) 是不是和使用 item 4
: (local static obj) 是一回事?

r****t
发帖数: 10904
6
静态类是啥?static class? 还是 static object?

【在 y**b 的大作中提到】
: 看了第三版(跟第二版还是有些改动)的item 18,
: 这个Month类是想设计成一个静态类(类似于一个全局变量)来用:
: class Month {
: public:
: static Month Jan() { return Month(1); }
: ...
: private:
: explicit Month(int m):val(m) {}
: static int val;
: };

y**b
发帖数: 10166
7
应该没有静态类这个说法,只是一种用法。
比如你可以直接用Month::Jan(),无需声明对象。

【在 r****t 的大作中提到】
: 静态类是啥?static class? 还是 static object?
1 (共1页)
进入Programming版参与讨论
相关主题
问一个 copy constructor 的问题 (C++)C++ cast 小结
请问c++里empty class的问题抠字眼:assignment and initialize in C++
一个django问题:debug=true就很好;debug=false,css就找不到这段code有啥问题?
微软的架构设计师真是大学生水平啊请教一个C++概念。
请教各路C++大神 为什么f(3) 输出是 'dd'请问static variable init的问题?
Test your C++ knowledge...请教问题
Re: 110道C++面试题目,你会做多少? (转载)请教一下,exception时,destructor一定会被调用么?
怎么搞的?c++ 一问
相关话题的讨论汇总
话题: month话题: static话题: jan话题: item话题: effective