Strukturell bindning

Strukturerad bindning är  en syntaktisk  innovation av programmeringsspråksstandarden C++17 [ 1 ] , utformad för att packa upp komplexa icke-statiska datatyper och representera dem som en sammansättning av deras beståndsdelar [2] [3] .

Syntax

Strukturell bindning är ett av de nya alternativen för att deklarera variabler i programmeringsspråket C++ [4] . Den definierar förhållandet mellan deklarerade variabler och de tillgängliga komponenterna i ett komplext objekt som fungerar som deras initialiserare [5] :

optional_attribute qualified_auto optional_reference [ identifier_list ] = uttryck ; // deklaration som en strukturell bindning optional_attribute qualified_auto optional_reference [ identifier_list ] = { expression }; // strukturell bindning med tuppelinitiering optional_attribute qualified_auto optional_reference [ identifier_list ] = ( uttryck ); // strukturell bindning för en ofullständig typ
var: optional_attribute är en sekvens av valfria attribut, qualified_auto - ett nyckelord automed en specifikation i form av specifikationer const, volatileetc. optional_reference är en valfri åtkomstoperatör genom referens &eller &&, identifier_list - en lista över deklarerade variabler, separerade med kommatecken, expression är ett initialiserande uttryck som inte kan vara en förening .

På sätt och vis sönderdelar användningen av strukturell bindning initialiseraren till dess beståndsdelar [6] . Som en konsekvens måste antalet variabler som deklareras med hjälp av strukturell bindning matcha antalet element i initialiseraren [1] .

Beskrivning

Strukturell bindning gör det möjligt att komma åt de publika fälten för ett sammansatt objekt, till exempel efter att ha anropat en funktion som returnerar en komplex datatyp. I många fall kan strukturell bindning ses som ett bekvämt alternativ till att kasta undantag [7] .

För att förbättra läsbarheten av koden är det inte förbjudet att använda en initialiserare med strukturell bindning i huvudet på ifeller operatörerna for, där tillståndskontrollen finns [8] [9] .

Strukturell bindning interagerar bra med de inbyggda standardklasserna i STL -biblioteket , såsom pair[10] eller tuple[11] .

Anteckningar

  1. 1 2 Gregoire, 2018 , Structured Bindings, sid. 26.
  2. Lospinoso, 2019 , Structured Bindings, sid. 222.
  3. Olsson, 2018 , Returning Multiple Values, sid. 64.
  4. Lospinoso, 2019 , Deklarationsutlåtanden, sid. 213.
  5. Strukturerad bindande förklaring (sedan C++17) Arkiverad 8 september 2020 på Wayback Machine en.cppreference.com
  6. Josuttis, 2019 , Strukturerade bindningar, sid. 3.
  7. Lospinoso, 2019 , Alternativ till undantag, s. 114.
  8. Lospinoso, 2019 , Initialization Statements and if, sid. 226, 227.
  9. Gregoire, 2018 , The auditVoterRolls Function, sid. 659.
  10. Lospinoso, 2019 , par, sid. 374.
  11. Gregoire, 2018 , Strukturerade bindningar, sid. 717.

Källor

  • Marc Gregoire. Professionell C++ : [ eng. ] . - Fjärde upplagan. - John Wiley & Sons, 2018. - ISBN 978-1-119-42130-6 .
  • Nicolai M. Josuttis. C++17: Den kompletta guiden : ] . - 2019. - ISBN 9783967307177 .
  • John Lospinoso. C++ Crash Course: A Fast Paced Introduction: [ eng. ] . - San Francisco : ingen stärkelsepress, 2019. - ISBN 978-1-59327-888-5 .
  • Mikael Olsson. C++17 Snabbsyntaxreferens: A Pocket Guide to the Language, APIs and Library: [ eng. ] . - Tredje upplagan. - Apress, 2018. - ISBN 978-1-4842-3599-7 . - doi : 10.1007/978-1-4842-3600-0 .