shared_ptr观察器 20.8.2.2.5 C++14最终草案(n4296)
long use_count() const noexcept;
返回:与*this
共享所有权的shared_ptr
对象数量,包括*this
本身,如果*this
为空,则返回0。
[注意:use_count()
不一定高效。—注释结束]
shared_ptr观察器 20.8.2.2.5 C++14最终草案(n4296)
long use_count() const noexcept;
返回:与*this
共享所有权的shared_ptr
对象数量,包括*this
本身,如果*this
为空,则返回0。
[注意:use_count()
不一定高效。—注释结束]
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2003/n1450.html
“use_count”的返回类型是有符号的,以避免类似“p.use_count() > -1”被判定为假的陷阱。 参考文献:John Lakos,《大规模 C++ 软件设计》,第9.2.2节,第637页,Addison-Wesley出版社,1996年7月,ISBN 0-201-63362-0。 基本上,这看起来像是一个保姆级别的决策,为大一软件开发人员量身定制。long
。” - Evgsigned
整数,即使此计数器永远不会低于0。unsigned
?它不能变成负数并不是目前语言中unsigned
的真正含义,因此这并不是一个有效的借口。unsigned
并不意味着“不能为负数的整数”。要理解为什么这个定义根本没有意义,请考虑以下几点:
unsigned
的差是unsigned
unsigned
与signed
相加的结果是unsigned
unsigned
值永远不会大于-1unsigned
的含义是“非负数”,那么以上任何一点都没有意义。unsigned
来表示size_t
是一个错误(例如参见为什么size_t是无符号的?),这个错误只有在16位时代被认为值得一用,因为当时多出来的一个比特位被认为可以弥补unsigned
类型在C++中这种用法上的错误语义。size_t
的错误不能被修正(因为向后兼容),但是为什么要在另一个无关的领域重复同样的错误呢?unsigned
这个名称(考虑到它的实际意义)。如果那种类型被命名为(更恰当的)模数
,那么也许使用模数int
表示字符串的大小根本就没有任何意义。unsigned
对于计数器或大小来说只是具有错误的语义。
(*) 我个人认为,即使在当时,32767 的大小也不足够好的理由。如果现在 32767 不够用了,那么 65535 很快也不会够用。在我看来,仅仅为了扭曲语义而多一个比特(两倍于原值)是不能接受的代价。
我发布了一个视频,在其中更详细地讨论了为什么我认为在 C++ 中使用无符号类型作为 size_t
是一个设计错误。
幻灯片可以从 http://raksy.dyndns.org/unsigned.pdf 下载。
long
)。将这些情况用于弯曲所有其他用例的规则,从而使未来的程序员因此而遭受愚蠢的错误,我认为这是一个值得质疑的选择。当然,如果有另一种整数类型用于非负整数(具有正确的语义),那就太好了...但是unsigned
并不是那种类型。 - 6502
LONG_MAX
,定义的行为是什么。 - M.M