摘要: 通常我们想获得系统的一些路径时,都会使用一些Shell函数。比如SHGetSpecialFolderPath,SHGetFolderPath,SHGetKnownFolderPath等,传入我们想要的路径的CSIDL即可。通常情况下都会得到我们想要的结果。但是也存在例外。 目前从事的工业监控软... 阅读全文
posted @ 2014-11-23 10:43 Navono 阅读(601) 评论(0) 推荐(0) 编辑
摘要: There’s a lot to love about standard smart pointers in general, and unique_ptr in particular. Problem JG Question 1.什么时候你应该使用shared_ptr vs unique_ptr?尽可能列出你所想到的注意事项。 Guru Question 2.为什么你应该总是使用make_sh... 阅读全文
posted @ 2013-11-24 15:57 Navono 阅读(357) 评论(0) 推荐(0) 编辑
摘要: const和mutable对于书写安全代码来说是个很有利的工具,坚持使用它们。ProblemGuru Question在下面代码中,在只要合适的情况下,对const进行增加和删除(包括一些微小的变化和一些相关的关键字)。注意:不要注释或者改变程序的结构。这个程序只作为演示用途。另外:程序的哪些地方是由于错误地使用const而导致的未定义行为或不可编译?class polygon {public: polygon() : area{-1} {} void add_point( const point pt ) { area = -1; ... 阅读全文
posted @ 2013-11-23 12:44 Navono 阅读(257) 评论(0) 推荐(0) 编辑
摘要: 在使用MultiByteToWideChar的时候,大部分都知道上述两个参数,MSDN上的解释也是简单到极致。通常我们会选择使用CP_ACP,但是总有人会在没有真正明白它们之间的区别前使用CP_THREAD_ACP。 上周收到一个日方的Bug报告。Bug的上下文基本是这样的:有一个功能是记录设备信息一览的,并可以将这些信息输出到一个文件(格式有很多)。这个文件可以手动实时获取,也可以设置日期... 阅读全文
posted @ 2013-11-13 20:19 Navono 阅读(2448) 评论(0) 推荐(0) 编辑
摘要: const 和 mutable在C++存在已经很多年了,对于如今的这两个关键字你了解多少?ProblemJG Question1. 什么是“共享变量”?Guru Question2. const 和 mutable对于共享变量来说意味着什么?3. 在C++98和C++11两者间,const 和 mutable有什么区别?Stop and thinking……Solution1. 什么是“共享变量”? 共享变量是在同一时间可以被多个线程同时访问的变量。 这个概念在C++内存模型中很重要。例如:C++内存模型禁止创造一个写入“潜在共享变量区”,这不会被写入到程序执行的顺序一致(sequential 阅读全文
posted @ 2013-11-10 15:31 Navono 阅读(328) 评论(0) 推荐(0) 编辑
摘要: 虚函数是一个很基本的特性,但是它们偶尔会隐藏在很微妙的地方,然后等着你。如果你能回答下面的问题,那么你已经完全了解了它,你不太能浪费太多时间去调试类似下面的问题。ProblemJG Question1. override和final这两个关键字都有什么作用?为什么他们有用?Guru Qusetion2. 在你浏览公司的代码的时候,你看到了一个未知程序员写的下面的代码片段。这个程序员好像看起来是在练习一些C++特性,想看下它们是怎么工作的。 (a)怎么做能改进下面代码的正确性或风格? (b)这个程序员可能期待程序打印什么,但实际上是怎么一个情况?class base {public: ... 阅读全文
posted @ 2013-11-02 19:39 Navono 阅读(269) 评论(0) 推荐(0) 编辑
摘要: 顺时针/螺旋规则可以概括成下面简单的三步: 1. 从一个未知元素开始,以螺旋/顺时针的方向移动,当遇上下面的元素时,用相应的词替换它: [X] 或 [] =>类型为…的大小为X的数组(Array X size of…)或类型为…的未知大小的数组(Array undefined size of…) (type1, type2) =>参数为type1和type2、返回值为…的函数(function passing type1 and type2 returning…) * =>指向…的指针(pointer(s) to…) 2. 以螺旋/瞬时间方向继续移动,直到覆盖所有的符号。 3 阅读全文
posted @ 2013-10-26 10:33 Navono 阅读(1213) 评论(0) 推荐(0) 编辑
摘要: 你对写一个类的细节有多在行?这条款不仅注重公然的错误,更多的是一种专业的风格。了解这些原则将会帮助你设计易于使用和易于管理的类。JG Question1. 什么使得接口“容易正确使用,错误使用却很难”?解释一下。Guru Question2. 你正在代码审查,一个程序员写了下面这个类,里面有一些不良的风格和一写具体的错误。你能发现多少?如何修正?class complex {public: complex( double r, double i = 0 ) : real(r), imag(i) { } void operator+ ( complex othe... 阅读全文
posted @ 2013-10-20 17:25 Navono 阅读(231) 评论(0) 推荐(0) 编辑
摘要: 通过文件进行通信的,可能遇上的问题就是文件中的字符出现乱码的问题。在网上也找了很久资料,一般都是字符串转换成十六进制,很少有转换回来的。首先根据使字符集格式分为char和wchar_t两个版本1. char版本std::string string_to_hex(const std::string& input){ static const char* const lut = "0123456789ABCDEF"; size_t len = input.length(); std::string output; output.reserve(2 * len); f.. 阅读全文
posted @ 2013-10-20 10:16 Navono 阅读(1864) 评论(0) 推荐(0) 编辑
摘要: 高效的代码重用是良好的软件工程中重要的一部分。为了演示如何更好地通过使用标准库算法而不是手工编写,我们再次考虑先前的问题。演示通过简单利用标准库中已有的算法来避免的一些问题。 Problem JG Question 1. 最广泛使用的C++库是什么? Guru Question 2. 首先,在GotW #2中有多少陷进是可以避免的,如果程序员只是用以下方法替代显示的基于迭代器的for循环: (... 阅读全文
posted @ 2013-09-28 16:19 Navono 阅读(324) 评论(0) 推荐(0) 编辑