search
HomeBackend DevelopmentC#.Net TutorialWhat are the new features of c++17

c 17 new features include: 1. Changes to the rules for auto expression derivation; 2. Lambda expressions can capture "*this"; 3. New inline variables, which can directly define global variables In the header file; 4. Support initialization statements in conditional expressions; 5. Direct list initialization of enumerations, etc.

What are the new features of c++17

The operating environment of this tutorial: Windows 7 system, C 17 version, Dell G3 computer.

Related recommendations: "C Video Tutorial"

New features in C 17

1. auto keyword

Starting from c 11, the auto keyword can deduce the type of a variable through an initializer. In C 14, the ability of the auto keyword is further improved, and the return type of the function can be deduced through the return statement. Using the auto keyword can improve coding efficiency and simplify the reconstruction process. However, auto derivation in C 11 often results in different results than expected.

In order to support unified initialization in c 11, a new unified initialization syntax is introduced, as shown below.

// c++11
auto x3{ 1, 2 }; // std::initializer_list<int>
auto x4 = { 3 }; // decltype(x4) is std::initializer_list<int>
auto x5{ 3 };    // std::initializer_list<int>

For variables initialized in these three ways, the final type derivation result is std::initializer_list, not the int we think. This is because when the expression used to declare a variable auto is enclosed in {}, the deduced type becomes std::initializer_list.

In C 17, the rules for auto expression derivation have been changed

// c++17
auto x3{ 1, 2 }; // error: not a single element
auto x4 = { 3 }; // decltype(x4) is std::initializer_list<int>
auto x5{ 3 };    // decltype(x5) is int

Comparison found that auto x5{3}, will directly derive the variable into x5, while x3{1, 2} This method will also fail to compile. The rules of auto derivation become more intuitive.

2. Lambda expression

lambda was also introduced in C 11. In C 11, lambda expressions can only capture this, which is the current object. A read-only reference. In C 17, you can capture *this, which is a copy of the current object. Capturing a copy of the current object can ensure that after the current object is released, the lambda expression can safely call the variables and methods in this.

3. Inline variables

Inline variables, inline variables allow variables to be defined more than once. Before C 17, when we defined global variables, we always needed to define the variable in the cpp file, and then use the extern keyword to tell the compiler that the variable has been defined elsewhere. After the inline variable appears, we can directly define the global variable in the header file without worrying about the redefine error message.

4. Initialization statements are supported in conditional expressions

c 17 supports initialization in if or switch statements. The emergence of this capability can make the code more concise .

// c++17之前
map<int, string> c = {{1,"a"}};
{
    auto res = c.insert(make_pair(2, "b"));
    if(!res.second) {
        cout << "key 1 exist" << endl;
    } else {
        cout << "insert success, value:" << res.first->second << endl;
    }
}

In the above piece of code, since res is a temporary variable and we don’t want to affect the subsequent code, we use a pair of curly braces to limit its scope. But if you use the syntax of c 17 and initialize res in the if condition, the code will appear more concise

// c++17
map<int, string> c = {{1,"a"}};
if(auto res = c.insert(make_pair(2, "b")); !res.second ) {
    cout << "key 1 exist" << endl;
} else {
    cout << "insert success, value:" << res.first->second << endl;
}

The standard library of c 17 has also been expanded, and the following data types have been added:

1. std::variant

std::variant is a type-safe union and an enhanced version of union. Variant supports more complex data types, such as map , string, etc.

2. std::optional

std::optional represents a possible value. When we create an object through a function, we usually use the function to return the error code and return the object itself through the parameters. If you return the created instance through optional, it will become more intuitive.

std::optional provides the following methods:

has_value()   // 检查对象是否有值
value()       // 返回对象的值,值不存在时则抛出 std::bad_optional_access 异常
value_or()    // 值存在时返回值,不存在时返回默认值

3. std::any

A type-safe container that can save any value

4. std::string_view

string_view I first used the boost version , string_view in c17 is similar to boost. string_view can be understood as a read-only reference to the original string. string_view itself does not apply for additional memory to store the original string data, but only saves the original string address and length. In many cases, we are only processing strings temporarily and do not need a copy of the original string. Using string_view can reduce unnecessary memory copies and improve program performance. Compared to using string pointers, string_view provides better encapsulation.

It should be noted that since string_view does not have ownership of the original string, you must pay attention to the life cycle of the original string when using string_view. When the original string has been destroyed, string_view can no longer be called.

Other features:

In addition, C 17 also adds some other features, which are not listed one by one in the article.

  • bool expression cannot be used, – these two increment (decrease) operators are no longer used

  • #Exception in c 17 has become a type Part of the system,

  • Direct list initialization of the enumeration

  • Structured binding

  • constexpr if expression

  • map supports merge and extract

For more programming-related knowledge, please visit: Programming Learning! !

The above is the detailed content of What are the new features of c++17. For more information, please follow other related articles on the PHP Chinese website!

Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
C# .NET: An Introduction to the Powerful Programming LanguageC# .NET: An Introduction to the Powerful Programming LanguageApr 22, 2025 am 12:04 AM

The combination of C# and .NET provides developers with a powerful programming environment. 1) C# supports polymorphism and asynchronous programming, 2) .NET provides cross-platform capabilities and concurrent processing mechanisms, which makes them widely used in desktop, web and mobile application development.

.NET Framework vs. C#: Decoding the Terminology.NET Framework vs. C#: Decoding the TerminologyApr 21, 2025 am 12:05 AM

.NETFramework is a software framework, and C# is a programming language. 1..NETFramework provides libraries and services, supporting desktop, web and mobile application development. 2.C# is designed for .NETFramework and supports modern programming functions. 3..NETFramework manages code execution through CLR, and the C# code is compiled into IL and runs by CLR. 4. Use .NETFramework to quickly develop applications, and C# provides advanced functions such as LINQ. 5. Common errors include type conversion and asynchronous programming deadlocks. VisualStudio tools are required for debugging.

Demystifying C# .NET: An Overview for BeginnersDemystifying C# .NET: An Overview for BeginnersApr 20, 2025 am 12:11 AM

C# is a modern, object-oriented programming language developed by Microsoft, and .NET is a development framework provided by Microsoft. C# combines the performance of C and the simplicity of Java, and is suitable for building various applications. The .NET framework supports multiple languages, provides garbage collection mechanisms, and simplifies memory management.

C# and the .NET Runtime: How They Work TogetherC# and the .NET Runtime: How They Work TogetherApr 19, 2025 am 12:04 AM

C# and .NET runtime work closely together to empower developers to efficient, powerful and cross-platform development capabilities. 1) C# is a type-safe and object-oriented programming language designed to integrate seamlessly with the .NET framework. 2) The .NET runtime manages the execution of C# code, provides garbage collection, type safety and other services, and ensures efficient and cross-platform operation.

C# .NET Development: A Beginner's Guide to Getting StartedC# .NET Development: A Beginner's Guide to Getting StartedApr 18, 2025 am 12:17 AM

To start C#.NET development, you need to: 1. Understand the basic knowledge of C# and the core concepts of the .NET framework; 2. Master the basic concepts of variables, data types, control structures, functions and classes; 3. Learn advanced features of C#, such as LINQ and asynchronous programming; 4. Be familiar with debugging techniques and performance optimization methods for common errors. With these steps, you can gradually penetrate the world of C#.NET and write efficient applications.

C# and .NET: Understanding the Relationship Between the TwoC# and .NET: Understanding the Relationship Between the TwoApr 17, 2025 am 12:07 AM

The relationship between C# and .NET is inseparable, but they are not the same thing. C# is a programming language, while .NET is a development platform. C# is used to write code, compile into .NET's intermediate language (IL), and executed by the .NET runtime (CLR).

The Continued Relevance of C# .NET: A Look at Current UsageThe Continued Relevance of C# .NET: A Look at Current UsageApr 16, 2025 am 12:07 AM

C#.NET is still important because it provides powerful tools and libraries that support multiple application development. 1) C# combines .NET framework to make development efficient and convenient. 2) C#'s type safety and garbage collection mechanism enhance its advantages. 3) .NET provides a cross-platform running environment and rich APIs, improving development flexibility.

From Web to Desktop: The Versatility of C# .NETFrom Web to Desktop: The Versatility of C# .NETApr 15, 2025 am 12:07 AM

C#.NETisversatileforbothwebanddesktopdevelopment.1)Forweb,useASP.NETfordynamicapplications.2)Fordesktop,employWindowsFormsorWPFforrichinterfaces.3)UseXamarinforcross-platformdevelopment,enablingcodesharingacrossWindows,macOS,Linux,andmobiledevices.

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

MantisBT

MantisBT

Mantis is an easy-to-deploy web-based defect tracking tool designed to aid in product defect tracking. It requires PHP, MySQL and a web server. Check out our demo and hosting services.

Dreamweaver Mac version

Dreamweaver Mac version

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

PhpStorm Mac version

PhpStorm Mac version

The latest (2018.2.1) professional PHP integrated development tool

WebStorm Mac version

WebStorm Mac version

Useful JavaScript development tools