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# 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.

C# .NET and the Future: Adapting to New TechnologiesC# .NET and the Future: Adapting to New TechnologiesApr 14, 2025 am 12:06 AM

C# and .NET adapt to the needs of emerging technologies through continuous updates and optimizations. 1) C# 9.0 and .NET5 introduce record type and performance optimization. 2) .NETCore enhances cloud native and containerized support. 3) ASP.NETCore integrates with modern web technologies. 4) ML.NET supports machine learning and artificial intelligence. 5) Asynchronous programming and best practices improve performance.

Is C# .NET Right for You? Evaluating its ApplicabilityIs C# .NET Right for You? Evaluating its ApplicabilityApr 13, 2025 am 12:03 AM

C#.NETissuitableforenterprise-levelapplicationswithintheMicrosoftecosystemduetoitsstrongtyping,richlibraries,androbustperformance.However,itmaynotbeidealforcross-platformdevelopmentorwhenrawspeediscritical,wherelanguageslikeRustorGomightbepreferable.

C# Code within .NET: Exploring the Programming ProcessC# Code within .NET: Exploring the Programming ProcessApr 12, 2025 am 12:02 AM

The programming process of C# in .NET includes the following steps: 1) writing C# code, 2) compiling into an intermediate language (IL), and 3) executing by the .NET runtime (CLR). The advantages of C# in .NET are its modern syntax, powerful type system and tight integration with the .NET framework, suitable for various development scenarios from desktop applications to web services.

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

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Tools

Dreamweaver Mac version

Dreamweaver Mac version

Visual web development tools

mPDF

mPDF

mPDF is a PHP library that can generate PDF files from UTF-8 encoded HTML. The original author, Ian Back, wrote mPDF to output PDF files "on the fly" from his website and handle different languages. It is slower than original scripts like HTML2FPDF and produces larger files when using Unicode fonts, but supports CSS styles etc. and has a lot of enhancements. Supports almost all languages, including RTL (Arabic and Hebrew) and CJK (Chinese, Japanese and Korean). Supports nested block-level elements (such as P, DIV),

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

WebStorm Mac version

WebStorm Mac version

Useful JavaScript development tools

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

This project is in the process of being migrated to osdn.net/projects/mingw, you can continue to follow us there. MinGW: A native Windows port of the GNU Compiler Collection (GCC), freely distributable import libraries and header files for building native Windows applications; includes extensions to the MSVC runtime to support C99 functionality. All MinGW software can run on 64-bit Windows platforms.