应用简介
Microsoft Visual C++是一款专业的动态链接库。该软件不但具有程序框架自动生成、灵活方便的类管理、代码编写和界面设计集成交互操作、可开发多种程序等优点,支持大多数C++11特性以及C++ 2015子集的编译器,让你轻松运行各种游戏和软件。
【功能特点】
在该版本中,更新了 C++ 编译器和标准库,使其对 C++11 的支持得到增强并开始支持某些 C++14 功能。 还包括初步支持 C++17 标准版中预期的某些功能。
此外,该版本修复了 500 多个编译器 Bug,包括客户通过 Microsoft Connect 提交的许多 Bug,非常感谢!
语言功能
我们增加了以下新功能,以使编译器更靠近标准 C++:
可恢复函数 (resume/await)关键字 resume 和 await 为异步编程提供语言级的支持,并启用可恢复函数。 目前,此功能仅适用于 x64 目标。 对于 C+ +17 的建议 [N3858]
泛型(多态)Lambda 表达式现在 Lambda 函数参数类型可指定使用 auto;在此上下文中编译器将 auto 解释为此闭包的函数调用运算符是成员函数模板,在 Lambda 表达式中对 auto 的每次使用都对应着截然不同的模板类型参数。
通用的 Lambda 捕获表达式也称为初始化捕获。 现在,任意表达式的结果可分配给 Lambda 捕获子句中的变量。 这将使 move-only 类型被值捕获,并使 Lambda 表达式在其闭包对象中定义任意数据成员。
二进制文本现在支持二进制文本。 这些文本将以 0B 或 0b 作为前缀,且仅由数字 0 和 1 组成。
返回类型推断现在,可推断普通函数的返回类型,包括带有多条返回语句的函数以及递归函数。 这些函数定义前面可以添加 auto 关键字,和带有结尾返回类型的函数定义一样,只是省略了结尾返回类型。
decltype(auto) 使用 auto 关键字初始化表达式的类型推断将从表达式中去除 ref 限定符和顶层 cv 限定符。 decltype(auto) 将保留 ref 和 cv 限定符,且现在可在可以使用 auto 的任意位置使用,除非引入推断或结尾返回类型的函数。
【软件亮点】
线程安全"神奇"静态现在可用线程安全的方式来初始化静态局部变量,而不必进行手动同步。 只有初始化是线程安全的,多线程使用静态局部变量仍必须手动同步。 通过使用 /Zc:threadSafeInit- 标记来避免依赖于 CRT,可以禁用线程安全静态功能。
线程本地存储使用 thread_local 关键字声明应为每个线程创建独立对象。
noexcept 现在,可以使用 noexcept 运算符来检查表达式是否可能引发异常。 现在,可以使用 noexcept 说明符来指定函数未引发异常。
内联命名空间现在可以将命名空间指定为内联式,以将其内容提升至封闭命名空间。 内联命名空间可用于创建带有版本的库,这些库默认提供其最新版本,同时仍显式提供 API 的较低版本。
无限制联合现在联合类型可包含使用重要的构造函数的类型。 必须定义这些联合的构造函数。
新字符类型和 Unicode 文本现在支持 UTF-8、UTF-16 和 UTF-32 格式的字符和字符串文本,并引入了新的字符类型 char16_t 和 char32_t。 字符文本可使用 u8 (UTF-8)、u (UTF-16) 或 U (UTF-32) 作为前缀(如 U'a'),而字符串文本还可使用原始字符串等效项 u8R (UTF-8 raw-string)、uR (UTF-16 raw-string) 或 UR (UTF-32 raw-string) 作为前缀。 通用字符名称可在 Unicode 文本(如 u'\u00EF'、u8"\u00EF is i" 和 u"\U000000ef is I")中自由使用。
__func__ 预定义的标识符 __func__ 显式定义为包含封闭函数的非限定和无修饰名称的字符串。
__restrict 现在 __restrict 可应用于引用。
类型名称关键字。 用户现在可以在模板参数中编写 typename 而不是 class 。
全局 void operator delete(void *, std::size_t) noexcept 和 void operator delete[](void *, std::size_t) noexcept 现在可进行重载。
数字分隔符 现在,您可以使用单引号分隔数值文件,以使其更易于阅读。 例如, int x = 1’000’000;。
文字中的通用字符名 现在,您可以编写基本的字符,如"A"和换行字符,作为文字中的代码点。 例如, const char *s = "\u0041\u000A";。
Visual C++ 库功能
标准库类型的用户定义文本 (UDL) 为了方便起见,<chrono>, <string>和<complex> 标头现在提供 UDL 运算符。 例如,123ms 表示 std::chrono::milliseconds(123),"hello"s 表示 std::string("hello"),且 3.14i 表示 std::complex(0.0, 3.14)。