在C++中使用Lamada表达式
Lamada 表达式是 C++11 最重要也是最常用的特性之一。Lamada 来源于函数式编程的概念,也是现代编程语言的一个特点。
Lamada 表达式是 C++11 最重要也是最常用的特性之一。Lamada 来源于函数式编程的概念,也是现代编程语言的一个特点。
在早期的 Windows 操作系统中,在同一用户下运行的所有进程有着相同的安全等级,拥有相同的权限。此时进程可以自由地发送Windows 消息到其他进程的窗口。
从 Windows Vista 开始,对于某些 Windows 消息,这一方式再也行不通了,进程(或者其他的对象)开始拥有一个新的属性–特权等级(Privilege Level)。此时一个特权等级较低的进程不再可以向特权等级较高的进程发送消息,即便他们在相同的用户权限下运行也不行,这就是所谓的用户界面特权隔离(User Interface Privilege Isolation, 简称 UIPI)。
当电脑安装完 Steam 后,我们在浏览器中访问steam://run/123,浏览器会自动提示打开 Steam 程序。类似的功能在迅雷、QQ 等产品上也都有使用,本文讲述如何实现该功能。

《C++ API 设计》是一本非常不错的书,该书内容远远超过了它标题所指的 C++ API 设计,它不仅仅讲述了与编程语言无关的 API 设计需要遵循的一些规范,同时也介绍了很多 C++开发中需要遵守一些准则,如果在开发中能遵循这些准则,将有利于我们写出高质量的代码。
C++自 C++11 起支持 static_assert 编译时断言,如:
1 | static_assert ( bool_constexpr , message ) (C++11 起) |
如果编译器不支持 C++11(经测试 VS2010 已经支持static_assert),我们可以使用下面方式来实现编译断言:
1 | #define COMPILE_ASSERT(expression) switch (0) {case 0: case expression:;} |
使用方法:
1 | COMPILE_ASSERT(1 != 1); |
上述方式虽然能实现编译断言,但缺点也很明显:
强烈建议拥抱新标准,使用 static_assert,做一个开心的人!
运行时库(Runtime library)通俗的说就是我们的程序运行的时候所依赖的库文件。在 Windows 平台,这些库由微软提供,称之为 Visual C++ 运行时库,虽然叫 C++ 运行时库,但也包含了 C 运行时库。
这些库以两种形式被提供:静态库(lib)、动态库(lib + dll),每个库还分别提供了 Debug 和 Release 两个版本。