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?
|