CINXE.COM

C++11 – Wikipedie

<!DOCTYPE html> <html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-sticky-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-feature-night-mode-disabled skin-theme-clientpref-day vector-toc-available" lang="cs" dir="ltr"> <head> <meta charset="UTF-8"> <title>C++11 – Wikipedie</title> <script>(function(){var className="client-js vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-sticky-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-feature-night-mode-disabled skin-theme-clientpref-day vector-toc-available";var cookie=document.cookie.match(/(?:^|; )cswikimwclientpreferences=([^;]+)/);if(cookie){cookie[1].split('%2C').forEach(function(pref){className=className.replace(new RegExp('(^| )'+pref.replace(/-clientpref-\w+$|[^\w-]+/g,'')+'-clientpref-\\w+( |$)'),'$1'+pref+'$2');});}document.documentElement.className=className;}());RLCONF={"wgBreakFrames":false,"wgSeparatorTransformTable":[",\t."," \t,"],"wgDigitTransformTable":["",""], "wgDefaultDateFormat":"ČSN basic dt","wgMonthNames":["","leden","únor","březen","duben","květen","červen","červenec","srpen","září","říjen","listopad","prosinec"],"wgRequestId":"6a486d43-47db-457a-9d5e-738e7301db87","wgCanonicalNamespace":"","wgCanonicalSpecialPageName":false,"wgNamespaceNumber":0,"wgPageName":"C++11","wgTitle":"C++11","wgCurRevisionId":24251798,"wgRevisionId":24251798,"wgArticleId":936283,"wgIsArticle":true,"wgIsRedirect":false,"wgAction":"view","wgUserName":null,"wgUserGroups":["*"],"wgCategories":["Údržba:Články s dočasně použitou šablonou","Údržba:Články s nejasnými tvrzeními","Monitoring:Články přeložené z enwiki","C++","Standardy IEC","Standardy ISO"],"wgPageViewLanguage":"cs","wgPageContentLanguage":"cs","wgPageContentModel":"wikitext","wgRelevantPageName":"C++11","wgRelevantArticleId":936283,"wgIsProbablyEditable":true,"wgRelevantPageIsProbablyEditable":true,"wgRestrictionEdit":[],"wgRestrictionMove":[],"wgNoticeProject": "wikipedia","wgCiteReferencePreviewsActive":false,"wgMediaViewerOnClick":true,"wgMediaViewerEnabledByDefault":true,"wgPopupsFlags":0,"wgVisualEditor":{"pageLanguageCode":"cs","pageLanguageDir":"ltr","pageVariantFallbacks":"cs"},"wgMFDisplayWikibaseDescriptions":{"search":true,"watchlist":true,"tagline":true,"nearby":true},"wgWMESchemaEditAttemptStepOversample":false,"wgWMEPageLength":90000,"wgRelatedArticlesCompat":[],"wgCentralAuthMobileDomain":false,"wgEditSubmitButtonLabelPublish":true,"wgULSPosition":"interlanguage","wgULSisCompactLinksEnabled":false,"wgVector2022LanguageInHeader":true,"wgULSisLanguageSelectorEmpty":false,"wgWikibaseItemId":"Q1061570","wgCheckUserClientHintsHeadersJsApi":["brands","architecture","bitness","fullVersionList","mobile","model","platform","platformVersion"],"GEHomepageSuggestedEditsEnableTopics":true,"wgGETopicsMatchModeEnabled":true,"wgGEStructuredTaskRejectionReasonTextInputEnabled":false,"wgGELevelingUpEnabledForUser":false};RLSTATE={ "ext.globalCssJs.user.styles":"ready","site.styles":"ready","user.styles":"ready","ext.globalCssJs.user":"ready","user":"ready","user.options":"loading","ext.cite.styles":"ready","ext.pygments":"ready","skins.vector.search.codex.styles":"ready","skins.vector.styles":"ready","skins.vector.icons":"ready","ext.wikimediamessages.styles":"ready","ext.visualEditor.desktopArticleTarget.noscript":"ready","ext.uls.interlanguage":"ready","wikibase.client.init":"ready","ext.wikimediaBadges":"ready"};RLPAGEMODULES=["ext.cite.ux-enhancements","ext.pygments.view","mediawiki.page.media","site","mediawiki.page.ready","mediawiki.toc","skins.vector.js","ext.centralNotice.geoIP","ext.centralNotice.startUp","ext.gadget.WikiMiniAtlas","ext.gadget.OSMmapa","ext.gadget.direct-links-to-commons","ext.gadget.ReferenceTooltips","ext.gadget.courses","ext.urlShortener.toolbar","ext.centralauth.centralautologin","mmv.bootstrap","ext.popups","ext.visualEditor.desktopArticleTarget.init", "ext.visualEditor.targetLoader","ext.echo.centralauth","ext.eventLogging","ext.wikimediaEvents","ext.navigationTiming","ext.uls.interface","ext.cx.eventlogging.campaigns","ext.cx.uls.quick.actions","wikibase.client.vector-2022","ext.checkUser.clientHints","ext.growthExperiments.SuggestedEditSession","wikibase.sidebar.tracking"];</script> <script>(RLQ=window.RLQ||[]).push(function(){mw.loader.impl(function(){return["user.options@12s5i",function($,jQuery,require,module){mw.user.tokens.set({"patrolToken":"+\\","watchToken":"+\\","csrfToken":"+\\"}); }];});});</script> <link rel="stylesheet" href="/w/load.php?lang=cs&amp;modules=ext.cite.styles%7Cext.pygments%2CwikimediaBadges%7Cext.uls.interlanguage%7Cext.visualEditor.desktopArticleTarget.noscript%7Cext.wikimediamessages.styles%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles%7Cwikibase.client.init&amp;only=styles&amp;skin=vector-2022"> <script async="" src="/w/load.php?lang=cs&amp;modules=startup&amp;only=scripts&amp;raw=1&amp;skin=vector-2022"></script> <meta name="ResourceLoaderDynamicStyles" content=""> <link rel="stylesheet" href="/w/load.php?lang=cs&amp;modules=site.styles&amp;only=styles&amp;skin=vector-2022"> <meta name="generator" content="MediaWiki 1.44.0-wmf.4"> <meta name="referrer" content="origin"> <meta name="referrer" content="origin-when-cross-origin"> <meta name="robots" content="max-image-preview:standard"> <meta name="format-detection" content="telephone=no"> <meta property="og:image" content="https://upload.wikimedia.org/wikipedia/commons/thumb/b/bd/Bjarne-stroustrup.jpg/1200px-Bjarne-stroustrup.jpg"> <meta property="og:image:width" content="1200"> <meta property="og:image:height" content="803"> <meta property="og:image" content="https://upload.wikimedia.org/wikipedia/commons/thumb/b/bd/Bjarne-stroustrup.jpg/800px-Bjarne-stroustrup.jpg"> <meta property="og:image:width" content="800"> <meta property="og:image:height" content="536"> <meta property="og:image" content="https://upload.wikimedia.org/wikipedia/commons/thumb/b/bd/Bjarne-stroustrup.jpg/640px-Bjarne-stroustrup.jpg"> <meta property="og:image:width" content="640"> <meta property="og:image:height" content="428"> <meta name="viewport" content="width=1120"> <meta property="og:title" content="C++11 – Wikipedie"> <meta property="og:type" content="website"> <link rel="preconnect" href="//upload.wikimedia.org"> <link rel="alternate" media="only screen and (max-width: 640px)" href="//cs.m.wikipedia.org/wiki/C%2B%2B11"> <link rel="alternate" type="application/x-wiki" title="Editovat" href="/w/index.php?title=C%2B%2B11&amp;action=edit"> <link rel="apple-touch-icon" href="/static/apple-touch/wikipedia.png"> <link rel="icon" href="/static/favicon/wikipedia.ico"> <link rel="search" type="application/opensearchdescription+xml" href="/w/rest.php/v1/search" title="Wikipedie (cs)"> <link rel="EditURI" type="application/rsd+xml" href="//cs.wikipedia.org/w/api.php?action=rsd"> <link rel="canonical" href="https://cs.wikipedia.org/wiki/C%2B%2B11"> <link rel="license" href="https://creativecommons.org/licenses/by-sa/4.0/deed.cs"> <link rel="alternate" type="application/atom+xml" title="Atom kanál Wikipedie." href="/w/index.php?title=Speci%C3%A1ln%C3%AD:Posledn%C3%AD_zm%C4%9Bny&amp;feed=atom"> <link rel="dns-prefetch" href="//meta.wikimedia.org" /> <link rel="dns-prefetch" href="//login.wikimedia.org"> </head> <body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject mw-editable page-C_11 rootpage-C_11 skin-vector-2022 action-view"><a class="mw-jump-link" href="#bodyContent">Přeskočit na obsah</a> <div class="vector-header-container"> <header class="vector-header mw-header"> <div class="vector-header-start"> <nav class="vector-main-menu-landmark" aria-label="Projekt"> <div id="vector-main-menu-dropdown" class="vector-dropdown vector-main-menu-dropdown vector-button-flush-left vector-button-flush-right" > <input type="checkbox" id="vector-main-menu-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-main-menu-dropdown" class="vector-dropdown-checkbox " aria-label="Hlavní menu" > <label id="vector-main-menu-dropdown-label" for="vector-main-menu-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-menu mw-ui-icon-wikimedia-menu"></span> <span class="vector-dropdown-label-text">Hlavní menu</span> </label> <div class="vector-dropdown-content"> <div id="vector-main-menu-unpinned-container" class="vector-unpinned-container"> <div id="vector-main-menu" class="vector-main-menu vector-pinnable-element"> <div class="vector-pinnable-header vector-main-menu-pinnable-header vector-pinnable-header-unpinned" data-feature-name="main-menu-pinned" data-pinnable-element-id="vector-main-menu" data-pinned-container-id="vector-main-menu-pinned-container" data-unpinned-container-id="vector-main-menu-unpinned-container" > <div class="vector-pinnable-header-label">Hlavní menu</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-main-menu.pin">přesunout do postranního panelu</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-main-menu.unpin">skrýt</button> </div> <div id="p-navigation" class="vector-menu mw-portlet mw-portlet-navigation" > <div class="vector-menu-heading"> Navigace </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="n-mainpage" class="mw-list-item"><a href="/wiki/Hlavn%C3%AD_strana" title="Navštívit Hlavní stranu [z]" accesskey="z"><span>Hlavní strana</span></a></li><li id="n-help" class="mw-list-item"><a href="/wiki/N%C3%A1pov%C4%9Bda:Obsah" title="Místo, kde najdete pomoc"><span>Nápověda</span></a></li><li id="n-helpdesk" class="mw-list-item"><a href="/wiki/Wikipedie:Pot%C5%99ebuji_pomoc" title="Pokud si nevíte rady, zeptejte se ostatních"><span>Potřebuji pomoc</span></a></li><li id="n-featuredcontent" class="mw-list-item"><a href="/wiki/Wikipedie:Nejlep%C5%A1%C3%AD_%C4%8Dl%C3%A1nky" title="Přehled článků, které jsou považovány za nejlepší na české Wikipedii"><span>Nejlepší články</span></a></li><li id="n-randompage" class="mw-list-item"><a href="/wiki/Speci%C3%A1ln%C3%AD:N%C3%A1hodn%C3%A1_str%C3%A1nka" title="Přejít na náhodně vybranou stránku [x]" accesskey="x"><span>Náhodný článek</span></a></li><li id="n-recentchanges" class="mw-list-item"><a href="/wiki/Speci%C3%A1ln%C3%AD:Posledn%C3%AD_zm%C4%9Bny" title="Seznam posledních změn na této wiki [r]" accesskey="r"><span>Poslední změny</span></a></li><li id="n-portal" class="mw-list-item"><a href="/wiki/Wikipedie:Port%C3%A1l_Wikipedie" title="O projektu, jak můžete pomoci, kde hledat"><span>Komunitní portál</span></a></li><li id="n-villagepump" class="mw-list-item"><a href="/wiki/Wikipedie:Pod_l%C3%ADpou" title="Hlavní diskusní fórum"><span>Pod lípou</span></a></li> </ul> </div> </div> </div> </div> </div> </div> </nav> <a href="/wiki/Hlavn%C3%AD_strana" class="mw-logo"> <img class="mw-logo-icon" src="/static/images/icons/wikipedia.png" alt="" aria-hidden="true" height="50" width="50"> <span class="mw-logo-container skin-invert"> <img class="mw-logo-wordmark" alt="Wikipedie" src="/static/images/mobile/copyright/wikipedia-wordmark-cs.svg" style="width: 7.5em; height: 1.1875em;"> <img class="mw-logo-tagline" alt="Wikipedie: Otevřená encyklopedie" src="/static/images/mobile/copyright/wikipedia-tagline-cs.svg" width="118" height="13" style="width: 7.375em; height: 0.8125em;"> </span> </a> </div> <div class="vector-header-end"> <div id="p-search" role="search" class="vector-search-box-vue vector-search-box-collapses vector-search-box-show-thumbnail vector-search-box-auto-expand-width vector-search-box"> <a href="/wiki/Speci%C3%A1ln%C3%AD:Hled%C3%A1n%C3%AD" class="cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only search-toggle" title="Prohledat tuto wiki [f]" accesskey="f"><span class="vector-icon mw-ui-icon-search mw-ui-icon-wikimedia-search"></span> <span>Hledání</span> </a> <div class="vector-typeahead-search-container"> <div class="cdx-typeahead-search cdx-typeahead-search--show-thumbnail cdx-typeahead-search--auto-expand-width"> <form action="/w/index.php" id="searchform" class="cdx-search-input cdx-search-input--has-end-button"> <div id="simpleSearch" class="cdx-search-input__input-wrapper" data-search-loc="header-moved"> <div class="cdx-text-input cdx-text-input--has-start-icon"> <input class="cdx-text-input__input" type="search" name="search" placeholder="Hledat na Wikipedii" aria-label="Hledat na Wikipedii" autocapitalize="sentences" title="Prohledat tuto wiki [f]" accesskey="f" id="searchInput" > <span class="cdx-text-input__icon cdx-text-input__start-icon"></span> </div> <input type="hidden" name="title" value="Speciální:Hledání"> </div> <button class="cdx-button cdx-search-input__end-button">Hledat</button> </form> </div> </div> </div> <nav class="vector-user-links vector-user-links-wide" aria-label="Osobní nástroje"> <div class="vector-user-links-main"> <div id="p-vector-user-menu-preferences" class="vector-menu mw-portlet emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> <div id="p-vector-user-menu-userpage" class="vector-menu mw-portlet emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> <nav class="vector-appearance-landmark" aria-label="Vzhled"> <div id="vector-appearance-dropdown" class="vector-dropdown " title="Změnit vzhled velikosti písma, šířky stránky a barvy" > <input type="checkbox" id="vector-appearance-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-appearance-dropdown" class="vector-dropdown-checkbox " aria-label="Vzhled" > <label id="vector-appearance-dropdown-label" for="vector-appearance-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-appearance mw-ui-icon-wikimedia-appearance"></span> <span class="vector-dropdown-label-text">Vzhled</span> </label> <div class="vector-dropdown-content"> <div id="vector-appearance-unpinned-container" class="vector-unpinned-container"> </div> </div> </div> </nav> <div id="p-vector-user-menu-notifications" class="vector-menu mw-portlet emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> <div id="p-vector-user-menu-overflow" class="vector-menu mw-portlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-sitesupport-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="//donate.wikimedia.org/wiki/Special:FundraiserRedirector?utm_source=donate&amp;utm_medium=sidebar&amp;utm_campaign=C13_cs.wikipedia.org&amp;uselang=cs" class=""><span>Podpořte Wikipedii</span></a> </li> <li id="pt-createaccount-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="/w/index.php?title=Speci%C3%A1ln%C3%AD:Vytvo%C5%99it_%C3%BA%C4%8Det&amp;returnto=C%2B%2B11" title="Doporučujeme vytvořit si účet a přihlásit se, ovšem není to povinné" class=""><span>Vytvoření účtu</span></a> </li> <li id="pt-login-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="/w/index.php?title=Speci%C3%A1ln%C3%AD:P%C5%99ihl%C3%A1sit&amp;returnto=C%2B%2B11" title="Doporučujeme vám přihlásit se, ovšem není to povinné. [o]" accesskey="o" class=""><span>Přihlášení</span></a> </li> </ul> </div> </div> </div> <div id="vector-user-links-dropdown" class="vector-dropdown vector-user-menu vector-button-flush-right vector-user-menu-logged-out" title="Další možnosti" > <input type="checkbox" id="vector-user-links-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-user-links-dropdown" class="vector-dropdown-checkbox " aria-label="Osobní nástroje" > <label id="vector-user-links-dropdown-label" for="vector-user-links-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-ellipsis mw-ui-icon-wikimedia-ellipsis"></span> <span class="vector-dropdown-label-text">Osobní nástroje</span> </label> <div class="vector-dropdown-content"> <div id="p-personal" class="vector-menu mw-portlet mw-portlet-personal user-links-collapsible-item" title="Uživatelské menu" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-sitesupport" class="user-links-collapsible-item mw-list-item"><a href="//donate.wikimedia.org/wiki/Special:FundraiserRedirector?utm_source=donate&amp;utm_medium=sidebar&amp;utm_campaign=C13_cs.wikipedia.org&amp;uselang=cs"><span>Podpořte Wikipedii</span></a></li><li id="pt-createaccount" class="user-links-collapsible-item mw-list-item"><a href="/w/index.php?title=Speci%C3%A1ln%C3%AD:Vytvo%C5%99it_%C3%BA%C4%8Det&amp;returnto=C%2B%2B11" title="Doporučujeme vytvořit si účet a přihlásit se, ovšem není to povinné"><span class="vector-icon mw-ui-icon-userAdd mw-ui-icon-wikimedia-userAdd"></span> <span>Vytvoření účtu</span></a></li><li id="pt-login" class="user-links-collapsible-item mw-list-item"><a href="/w/index.php?title=Speci%C3%A1ln%C3%AD:P%C5%99ihl%C3%A1sit&amp;returnto=C%2B%2B11" title="Doporučujeme vám přihlásit se, ovšem není to povinné. [o]" accesskey="o"><span class="vector-icon mw-ui-icon-logIn mw-ui-icon-wikimedia-logIn"></span> <span>Přihlášení</span></a></li> </ul> </div> </div> <div id="p-user-menu-anon-editor" class="vector-menu mw-portlet mw-portlet-user-menu-anon-editor" > <div class="vector-menu-heading"> Stránky pro odhlášené editory <a href="/wiki/N%C3%A1pov%C4%9Bda:%C3%9Avod" aria-label="Více informací o editování"><span>dozvědět se více</span></a> </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-anoncontribs" class="mw-list-item"><a href="/wiki/Speci%C3%A1ln%C3%AD:Moje_p%C5%99%C3%ADsp%C4%9Bvky" title="Seznam editací provedených z této IP adresy [y]" accesskey="y"><span>Příspěvky</span></a></li><li id="pt-anontalk" class="mw-list-item"><a href="/wiki/Speci%C3%A1ln%C3%AD:Moje_diskuse" title="Diskuse o editacích provedených z této IP adresy [n]" accesskey="n"><span>Diskuse</span></a></li> </ul> </div> </div> </div> </div> </nav> </div> </header> </div> <div class="mw-page-container"> <div class="mw-page-container-inner"> <div class="vector-sitenotice-container"> <div id="siteNotice"><!-- CentralNotice --></div> </div> <div class="vector-column-start"> <div class="vector-main-menu-container"> <div id="mw-navigation"> <nav id="mw-panel" class="vector-main-menu-landmark" aria-label="Projekt"> <div id="vector-main-menu-pinned-container" class="vector-pinned-container"> </div> </nav> </div> </div> <div class="vector-sticky-pinned-container"> <nav id="mw-panel-toc" aria-label="Obsah" data-event-name="ui.sidebar-toc" class="mw-table-of-contents-container vector-toc-landmark"> <div id="vector-toc-pinned-container" class="vector-pinned-container"> <div id="vector-toc" class="vector-toc vector-pinnable-element"> <div class="vector-pinnable-header vector-toc-pinnable-header vector-pinnable-header-pinned" data-feature-name="toc-pinned" data-pinnable-element-id="vector-toc" > <h2 class="vector-pinnable-header-label">Obsah</h2> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-toc.pin">přesunout do postranního panelu</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-toc.unpin">skrýt</button> </div> <ul class="vector-toc-contents" id="mw-panel-toc-list"> <li id="toc-mw-content-text" class="vector-toc-list-item vector-toc-level-1"> <a href="#" class="vector-toc-link"> <div class="vector-toc-text">(úvod)</div> </a> </li> <li id="toc-Cíle_návrhu" class="vector-toc-list-item vector-toc-level-1"> <a class="vector-toc-link" href="#Cíle_návrhu"> <div class="vector-toc-text"> <span class="vector-toc-numb">1</span> <span>Cíle návrhu</span> </div> </a> <ul id="toc-Cíle_návrhu-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Rozšíření_jádra_jazyka_C++" class="vector-toc-list-item vector-toc-level-1"> <a class="vector-toc-link" href="#Rozšíření_jádra_jazyka_C++"> <div class="vector-toc-text"> <span class="vector-toc-numb">2</span> <span>Rozšíření jádra jazyka C++</span> </div> </a> <button aria-controls="toc-Rozšíření_jádra_jazyka_C++-sublist" class="cdx-button cdx-button--weight-quiet cdx-button--icon-only vector-toc-toggle"> <span class="vector-icon mw-ui-icon-wikimedia-expand"></span> <span>Přepnout podsekci Rozšíření jádra jazyka C++</span> </button> <ul id="toc-Rozšíření_jádra_jazyka_C++-sublist" class="vector-toc-list"> <li id="toc-Rozšíření_jádra_pro_rychlejší_běh" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Rozšíření_jádra_pro_rychlejší_běh"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.1</span> <span>Rozšíření jádra pro rychlejší běh</span> </div> </a> <ul id="toc-Rozšíření_jádra_pro_rychlejší_běh-sublist" class="vector-toc-list"> <li id="toc-Reference_jako_r-hodnota_a_move_konstruktor" class="vector-toc-list-item vector-toc-level-3"> <a class="vector-toc-link" href="#Reference_jako_r-hodnota_a_move_konstruktor"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.1.1</span> <span>Reference jako r-hodnota a move konstruktor</span> </div> </a> <ul id="toc-Reference_jako_r-hodnota_a_move_konstruktor-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-constexpr_–_Obecné_konstantní_výrazy" class="vector-toc-list-item vector-toc-level-3"> <a class="vector-toc-link" href="#constexpr_–_Obecné_konstantní_výrazy"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.1.2</span> <span>constexpr – Obecné konstantní výrazy</span> </div> </a> <ul id="toc-constexpr_–_Obecné_konstantní_výrazy-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Nová_definice_POD" class="vector-toc-list-item vector-toc-level-3"> <a class="vector-toc-link" href="#Nová_definice_POD"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.1.3</span> <span>Nová definice POD</span> </div> </a> <ul id="toc-Nová_definice_POD-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-Rozšíření_jádra_pro_rychlejší_kompilaci" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Rozšíření_jádra_pro_rychlejší_kompilaci"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.2</span> <span>Rozšíření jádra pro rychlejší kompilaci</span> </div> </a> <ul id="toc-Rozšíření_jádra_pro_rychlejší_kompilaci-sublist" class="vector-toc-list"> <li id="toc-Externí_šablona" class="vector-toc-list-item vector-toc-level-3"> <a class="vector-toc-link" href="#Externí_šablona"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.2.1</span> <span>Externí šablona</span> </div> </a> <ul id="toc-Externí_šablona-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-Rozšíření_jádra_pro_lepší_použití_jazyka" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Rozšíření_jádra_pro_lepší_použití_jazyka"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.3</span> <span>Rozšíření jádra pro lepší použití jazyka</span> </div> </a> <ul id="toc-Rozšíření_jádra_pro_lepší_použití_jazyka-sublist" class="vector-toc-list"> <li id="toc-Seznamy_inicializátorů" class="vector-toc-list-item vector-toc-level-3"> <a class="vector-toc-link" href="#Seznamy_inicializátorů"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.3.1</span> <span>Seznamy inicializátorů</span> </div> </a> <ul id="toc-Seznamy_inicializátorů-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Typová_inference" class="vector-toc-list-item vector-toc-level-3"> <a class="vector-toc-link" href="#Typová_inference"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.3.2</span> <span>Typová inference</span> </div> </a> <ul id="toc-Typová_inference-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-For_cyklus" class="vector-toc-list-item vector-toc-level-3"> <a class="vector-toc-link" href="#For_cyklus"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.3.3</span> <span>For cyklus</span> </div> </a> <ul id="toc-For_cyklus-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Lambda_funkce" class="vector-toc-list-item vector-toc-level-3"> <a class="vector-toc-link" href="#Lambda_funkce"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.3.4</span> <span>Lambda funkce</span> </div> </a> <ul id="toc-Lambda_funkce-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Aliasy_na_jmenné_prostory" class="vector-toc-list-item vector-toc-level-3"> <a class="vector-toc-link" href="#Aliasy_na_jmenné_prostory"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.3.5</span> <span>Aliasy na jmenné prostory</span> </div> </a> <ul id="toc-Aliasy_na_jmenné_prostory-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Nová_syntaxe_typových_aliasů" class="vector-toc-list-item vector-toc-level-3"> <a class="vector-toc-link" href="#Nová_syntaxe_typových_aliasů"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.3.6</span> <span>Nová syntaxe typových aliasů</span> </div> </a> <ul id="toc-Nová_syntaxe_typových_aliasů-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Alternativní_syntaxe_funkcí" class="vector-toc-list-item vector-toc-level-3"> <a class="vector-toc-link" href="#Alternativní_syntaxe_funkcí"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.3.7</span> <span>Alternativní syntaxe funkcí</span> </div> </a> <ul id="toc-Alternativní_syntaxe_funkcí-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Zlepšení_konstrukce_objektů" class="vector-toc-list-item vector-toc-level-3"> <a class="vector-toc-link" href="#Zlepšení_konstrukce_objektů"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.3.8</span> <span>Zlepšení konstrukce objektů</span> </div> </a> <ul id="toc-Zlepšení_konstrukce_objektů-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Explicitní_předefinování_a_final" class="vector-toc-list-item vector-toc-level-3"> <a class="vector-toc-link" href="#Explicitní_předefinování_a_final"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.3.9</span> <span>Explicitní předefinování a final</span> </div> </a> <ul id="toc-Explicitní_předefinování_a_final-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Konstanta_a_typ_nulového_ukazatele" class="vector-toc-list-item vector-toc-level-3"> <a class="vector-toc-link" href="#Konstanta_a_typ_nulového_ukazatele"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.3.10</span> <span>Konstanta a typ nulového ukazatele</span> </div> </a> <ul id="toc-Konstanta_a_typ_nulového_ukazatele-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Silně_typované_výčtové_typy" class="vector-toc-list-item vector-toc-level-3"> <a class="vector-toc-link" href="#Silně_typované_výčtové_typy"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.3.11</span> <span>Silně typované výčtové typy</span> </div> </a> <ul id="toc-Silně_typované_výčtové_typy-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Pravá_lomená_závorka" class="vector-toc-list-item vector-toc-level-3"> <a class="vector-toc-link" href="#Pravá_lomená_závorka"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.3.12</span> <span>Pravá lomená závorka</span> </div> </a> <ul id="toc-Pravá_lomená_závorka-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Explicitní_operátory_konverze" class="vector-toc-list-item vector-toc-level-3"> <a class="vector-toc-link" href="#Explicitní_operátory_konverze"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.3.13</span> <span>Explicitní operátory konverze</span> </div> </a> <ul id="toc-Explicitní_operátory_konverze-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Šablonové_aliasy" class="vector-toc-list-item vector-toc-level-3"> <a class="vector-toc-link" href="#Šablonové_aliasy"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.3.14</span> <span>Šablonové aliasy</span> </div> </a> <ul id="toc-Šablonové_aliasy-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Neomezené_uniony" class="vector-toc-list-item vector-toc-level-3"> <a class="vector-toc-link" href="#Neomezené_uniony"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.3.15</span> <span>Neomezené uniony</span> </div> </a> <ul id="toc-Neomezené_uniony-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-Vylepšení_funkčnosti_jádra_jazyka" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Vylepšení_funkčnosti_jádra_jazyka"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.4</span> <span>Vylepšení funkčnosti jádra jazyka</span> </div> </a> <ul id="toc-Vylepšení_funkčnosti_jádra_jazyka-sublist" class="vector-toc-list"> <li id="toc-Variadické_šablony" class="vector-toc-list-item vector-toc-level-3"> <a class="vector-toc-link" href="#Variadické_šablony"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.4.1</span> <span>Variadické šablony</span> </div> </a> <ul id="toc-Variadické_šablony-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Nové_řetězcové_literály" class="vector-toc-list-item vector-toc-level-3"> <a class="vector-toc-link" href="#Nové_řetězcové_literály"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.4.2</span> <span>Nové řetězcové literály</span> </div> </a> <ul id="toc-Nové_řetězcové_literály-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Uživatelem_definované_literály" class="vector-toc-list-item vector-toc-level-3"> <a class="vector-toc-link" href="#Uživatelem_definované_literály"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.4.3</span> <span>Uživatelem definované literály</span> </div> </a> <ul id="toc-Uživatelem_definované_literály-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Paměťový_model_pro_multithreading" class="vector-toc-list-item vector-toc-level-3"> <a class="vector-toc-link" href="#Paměťový_model_pro_multithreading"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.4.4</span> <span>Paměťový model pro multithreading</span> </div> </a> <ul id="toc-Paměťový_model_pro_multithreading-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Vláknové_lokální_úložiště" class="vector-toc-list-item vector-toc-level-3"> <a class="vector-toc-link" href="#Vláknové_lokální_úložiště"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.4.5</span> <span>Vláknové lokální úložiště</span> </div> </a> <ul id="toc-Vláknové_lokální_úložiště-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Explicitně_implicitní_speciální_členské_funkce" class="vector-toc-list-item vector-toc-level-3"> <a class="vector-toc-link" href="#Explicitně_implicitní_speciální_členské_funkce"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.4.6</span> <span>Explicitně implicitní speciální členské funkce</span> </div> </a> <ul id="toc-Explicitně_implicitní_speciální_členské_funkce-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Explicitně_smazané_funkce" class="vector-toc-list-item vector-toc-level-3"> <a class="vector-toc-link" href="#Explicitně_smazané_funkce"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.4.7</span> <span>Explicitně smazané funkce</span> </div> </a> <ul id="toc-Explicitně_smazané_funkce-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Typ_long_long_int" class="vector-toc-list-item vector-toc-level-3"> <a class="vector-toc-link" href="#Typ_long_long_int"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.4.8</span> <span>Typ long long int</span> </div> </a> <ul id="toc-Typ_long_long_int-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Statické_aserce" class="vector-toc-list-item vector-toc-level-3"> <a class="vector-toc-link" href="#Statické_aserce"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.4.9</span> <span>Statické aserce</span> </div> </a> <ul id="toc-Statické_aserce-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Umožnění_aplikace_sizeof_na_členy_třídy_bez_explicitního_objektu" class="vector-toc-list-item vector-toc-level-3"> <a class="vector-toc-link" href="#Umožnění_aplikace_sizeof_na_členy_třídy_bez_explicitního_objektu"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.4.10</span> <span>Umožnění aplikace sizeof na členy třídy bez explicitního objektu</span> </div> </a> <ul id="toc-Umožnění_aplikace_sizeof_na_členy_třídy_bez_explicitního_objektu-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Ovlivňování_zarovnání_objektu_a_dotaz_na_něj" class="vector-toc-list-item vector-toc-level-3"> <a class="vector-toc-link" href="#Ovlivňování_zarovnání_objektu_a_dotaz_na_něj"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.4.11</span> <span>Ovlivňování zarovnání objektu a dotaz na něj</span> </div> </a> <ul id="toc-Ovlivňování_zarovnání_objektu_a_dotaz_na_něj-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Umožnění_implementace_garbage_collectoru" class="vector-toc-list-item vector-toc-level-3"> <a class="vector-toc-link" href="#Umožnění_implementace_garbage_collectoru"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.4.12</span> <span>Umožnění implementace garbage collectoru</span> </div> </a> <ul id="toc-Umožnění_implementace_garbage_collectoru-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Atributy" class="vector-toc-list-item vector-toc-level-3"> <a class="vector-toc-link" href="#Atributy"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.4.13</span> <span>Atributy</span> </div> </a> <ul id="toc-Atributy-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> </ul> </li> <li id="toc-Změny_standardní_knihovny_C++" class="vector-toc-list-item vector-toc-level-1"> <a class="vector-toc-link" href="#Změny_standardní_knihovny_C++"> <div class="vector-toc-text"> <span class="vector-toc-numb">3</span> <span>Změny standardní knihovny C++</span> </div> </a> <button aria-controls="toc-Změny_standardní_knihovny_C++-sublist" class="cdx-button cdx-button--weight-quiet cdx-button--icon-only vector-toc-toggle"> <span class="vector-icon mw-ui-icon-wikimedia-expand"></span> <span>Přepnout podsekci Změny standardní knihovny C++</span> </button> <ul id="toc-Změny_standardní_knihovny_C++-sublist" class="vector-toc-list"> <li id="toc-Rozšíření_standardní_knihovny" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Rozšíření_standardní_knihovny"> <div class="vector-toc-text"> <span class="vector-toc-numb">3.1</span> <span>Rozšíření standardní knihovny</span> </div> </a> <ul id="toc-Rozšíření_standardní_knihovny-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Vylepšení_komponent_standardní_knihovny" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Vylepšení_komponent_standardní_knihovny"> <div class="vector-toc-text"> <span class="vector-toc-numb">3.2</span> <span>Vylepšení komponent standardní knihovny</span> </div> </a> <ul id="toc-Vylepšení_komponent_standardní_knihovny-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Nástroje_pro_threading" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Nástroje_pro_threading"> <div class="vector-toc-text"> <span class="vector-toc-numb">3.3</span> <span>Nástroje pro threading</span> </div> </a> <ul id="toc-Nástroje_pro_threading-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-N-tice" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#N-tice"> <div class="vector-toc-text"> <span class="vector-toc-numb">3.4</span> <span>N-tice</span> </div> </a> <ul id="toc-N-tice-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Hašovací_tabulky" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Hašovací_tabulky"> <div class="vector-toc-text"> <span class="vector-toc-numb">3.5</span> <span>Hašovací tabulky</span> </div> </a> <ul id="toc-Hašovací_tabulky-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-std::array_a_std::forward_list" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#std::array_a_std::forward_list"> <div class="vector-toc-text"> <span class="vector-toc-numb">3.6</span> <span>std::array a std::forward_list</span> </div> </a> <ul id="toc-std::array_a_std::forward_list-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Regulární_výrazy" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Regulární_výrazy"> <div class="vector-toc-text"> <span class="vector-toc-numb">3.7</span> <span>Regulární výrazy</span> </div> </a> <ul id="toc-Regulární_výrazy-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Univerzální_smart_pointery" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Univerzální_smart_pointery"> <div class="vector-toc-text"> <span class="vector-toc-numb">3.8</span> <span>Univerzální smart pointery</span> </div> </a> <ul id="toc-Univerzální_smart_pointery-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Rozšiřitelné_nástroje_pro_generování_náhodných_čísel" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Rozšiřitelné_nástroje_pro_generování_náhodných_čísel"> <div class="vector-toc-text"> <span class="vector-toc-numb">3.9</span> <span>Rozšiřitelné nástroje pro generování náhodných čísel</span> </div> </a> <ul id="toc-Rozšiřitelné_nástroje_pro_generování_náhodných_čísel-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Adaptér" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Adaptér"> <div class="vector-toc-text"> <span class="vector-toc-numb">3.10</span> <span>Adaptér</span> </div> </a> <ul id="toc-Adaptér-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Polymorfní_adaptéry_pro_objekty_funkcí" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Polymorfní_adaptéry_pro_objekty_funkcí"> <div class="vector-toc-text"> <span class="vector-toc-numb">3.11</span> <span>Polymorfní adaptéry pro objekty funkcí</span> </div> </a> <ul id="toc-Polymorfní_adaptéry_pro_objekty_funkcí-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Typ_rysy_pro_metaprogramování" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Typ_rysy_pro_metaprogramování"> <div class="vector-toc-text"> <span class="vector-toc-numb">3.12</span> <span>Typ rysy pro metaprogramování</span> </div> </a> <ul id="toc-Typ_rysy_pro_metaprogramování-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Uniformní_metoda_výpočtu_návratového_typu_funkčních_objektů" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Uniformní_metoda_výpočtu_návratového_typu_funkčních_objektů"> <div class="vector-toc-text"> <span class="vector-toc-numb">3.13</span> <span>Uniformní metoda výpočtu návratového typu funkčních objektů</span> </div> </a> <ul id="toc-Uniformní_metoda_výpočtu_návratového_typu_funkčních_objektů-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-Vylepšení_kompatibility_s_jazykem_C" class="vector-toc-list-item vector-toc-level-1"> <a class="vector-toc-link" href="#Vylepšení_kompatibility_s_jazykem_C"> <div class="vector-toc-text"> <span class="vector-toc-numb">4</span> <span>Vylepšení kompatibility s jazykem C</span> </div> </a> <ul id="toc-Vylepšení_kompatibility_s_jazykem_C-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Vlastnosti_původně_plánované,_ale_odstraněné_nebo_nezahrnuté" class="vector-toc-list-item vector-toc-level-1"> <a class="vector-toc-link" href="#Vlastnosti_původně_plánované,_ale_odstraněné_nebo_nezahrnuté"> <div class="vector-toc-text"> <span class="vector-toc-numb">5</span> <span>Vlastnosti původně plánované, ale odstraněné nebo nezahrnuté</span> </div> </a> <ul id="toc-Vlastnosti_původně_plánované,_ale_odstraněné_nebo_nezahrnuté-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Odstraněné_a_nedoporučované_vlastnosti" class="vector-toc-list-item vector-toc-level-1"> <a class="vector-toc-link" href="#Odstraněné_a_nedoporučované_vlastnosti"> <div class="vector-toc-text"> <span class="vector-toc-numb">6</span> <span>Odstraněné a nedoporučované vlastnosti</span> </div> </a> <ul id="toc-Odstraněné_a_nedoporučované_vlastnosti-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Odkazy" class="vector-toc-list-item vector-toc-level-1"> <a class="vector-toc-link" href="#Odkazy"> <div class="vector-toc-text"> <span class="vector-toc-numb">7</span> <span>Odkazy</span> </div> </a> <button aria-controls="toc-Odkazy-sublist" class="cdx-button cdx-button--weight-quiet cdx-button--icon-only vector-toc-toggle"> <span class="vector-icon mw-ui-icon-wikimedia-expand"></span> <span>Přepnout podsekci Odkazy</span> </button> <ul id="toc-Odkazy-sublist" class="vector-toc-list"> <li id="toc-Reference" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Reference"> <div class="vector-toc-text"> <span class="vector-toc-numb">7.1</span> <span>Reference</span> </div> </a> <ul id="toc-Reference-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Související_články" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Související_články"> <div class="vector-toc-text"> <span class="vector-toc-numb">7.2</span> <span>Související články</span> </div> </a> <ul id="toc-Související_články-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Externí_odkazy" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Externí_odkazy"> <div class="vector-toc-text"> <span class="vector-toc-numb">7.3</span> <span>Externí odkazy</span> </div> </a> <ul id="toc-Externí_odkazy-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> </ul> </div> </div> </nav> </div> </div> <div class="mw-content-container"> <main id="content" class="mw-body"> <header class="mw-body-header vector-page-titlebar"> <nav aria-label="Obsah" class="vector-toc-landmark"> <div id="vector-page-titlebar-toc" class="vector-dropdown vector-page-titlebar-toc vector-button-flush-left" > <input type="checkbox" id="vector-page-titlebar-toc-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-page-titlebar-toc" class="vector-dropdown-checkbox " aria-label="Přepnout obsah" > <label id="vector-page-titlebar-toc-label" for="vector-page-titlebar-toc-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-listBullet mw-ui-icon-wikimedia-listBullet"></span> <span class="vector-dropdown-label-text">Přepnout obsah</span> </label> <div class="vector-dropdown-content"> <div id="vector-page-titlebar-toc-unpinned-container" class="vector-unpinned-container"> </div> </div> </div> </nav> <h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-main">C++11</span></h1> <div id="p-lang-btn" class="vector-dropdown mw-portlet mw-portlet-lang" > <input type="checkbox" id="p-lang-btn-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-p-lang-btn" class="vector-dropdown-checkbox mw-interlanguage-selector" aria-label="Přejděte k článku v jiném jazyce. Je dostupný v 21 jazycích" > <label id="p-lang-btn-label" for="p-lang-btn-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--action-progressive mw-portlet-lang-heading-21" aria-hidden="true" ><span class="vector-icon mw-ui-icon-language-progressive mw-ui-icon-wikimedia-language-progressive"></span> <span class="vector-dropdown-label-text">21 jazyků</span> </label> <div class="vector-dropdown-content"> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li class="interlanguage-link interwiki-ar mw-list-item"><a href="https://ar.wikipedia.org/wiki/%D8%B3%D9%8A%2B%2B11" title="سي++11 – arabština" lang="ar" hreflang="ar" data-title="سي++11" data-language-autonym="العربية" data-language-local-name="arabština" class="interlanguage-link-target"><span>العربية</span></a></li><li class="interlanguage-link interwiki-ca mw-list-item"><a href="https://ca.wikipedia.org/wiki/C%2B%2B11" title="C++11 – katalánština" lang="ca" hreflang="ca" data-title="C++11" data-language-autonym="Català" data-language-local-name="katalánština" class="interlanguage-link-target"><span>Català</span></a></li><li class="interlanguage-link interwiki-de badge-Q70894304 mw-list-item" title=""><a href="https://de.wikipedia.org/wiki/C%2B%2B11" title="C++11 – němčina" lang="de" hreflang="de" data-title="C++11" data-language-autonym="Deutsch" data-language-local-name="němčina" class="interlanguage-link-target"><span>Deutsch</span></a></li><li class="interlanguage-link interwiki-en mw-list-item"><a href="https://en.wikipedia.org/wiki/C%2B%2B11" title="C++11 – angličtina" lang="en" hreflang="en" data-title="C++11" data-language-autonym="English" data-language-local-name="angličtina" class="interlanguage-link-target"><span>English</span></a></li><li class="interlanguage-link interwiki-es mw-list-item"><a href="https://es.wikipedia.org/wiki/C%2B%2B11" title="C++11 – španělština" lang="es" hreflang="es" data-title="C++11" data-language-autonym="Español" data-language-local-name="španělština" class="interlanguage-link-target"><span>Español</span></a></li><li class="interlanguage-link interwiki-fa mw-list-item"><a href="https://fa.wikipedia.org/wiki/%D8%B3%DB%8C%E2%80%8C%D9%BE%D9%84%D8%A7%D8%B3%E2%80%8C%D9%BE%D9%84%D8%A7%D8%B3_%DB%B1%DB%B1" title="سی‌پلاس‌پلاس ۱۱ – perština" lang="fa" hreflang="fa" data-title="سی‌پلاس‌پلاس ۱۱" data-language-autonym="فارسی" data-language-local-name="perština" class="interlanguage-link-target"><span>فارسی</span></a></li><li class="interlanguage-link interwiki-fi mw-list-item"><a href="https://fi.wikipedia.org/wiki/C%2B%2B11" title="C++11 – finština" lang="fi" hreflang="fi" data-title="C++11" data-language-autonym="Suomi" data-language-local-name="finština" class="interlanguage-link-target"><span>Suomi</span></a></li><li class="interlanguage-link interwiki-fr mw-list-item"><a href="https://fr.wikipedia.org/wiki/C%2B%2B11" title="C++11 – francouzština" lang="fr" hreflang="fr" data-title="C++11" data-language-autonym="Français" data-language-local-name="francouzština" class="interlanguage-link-target"><span>Français</span></a></li><li class="interlanguage-link interwiki-hy mw-list-item"><a href="https://hy.wikipedia.org/wiki/C%2B%2B11" title="C++11 – arménština" lang="hy" hreflang="hy" data-title="C++11" data-language-autonym="Հայերեն" data-language-local-name="arménština" class="interlanguage-link-target"><span>Հայերեն</span></a></li><li class="interlanguage-link interwiki-it mw-list-item"><a href="https://it.wikipedia.org/wiki/C%2B%2B11" title="C++11 – italština" lang="it" hreflang="it" data-title="C++11" data-language-autonym="Italiano" data-language-local-name="italština" class="interlanguage-link-target"><span>Italiano</span></a></li><li class="interlanguage-link interwiki-ja mw-list-item"><a href="https://ja.wikipedia.org/wiki/C%2B%2B11" title="C++11 – japonština" lang="ja" hreflang="ja" data-title="C++11" data-language-autonym="日本語" data-language-local-name="japonština" class="interlanguage-link-target"><span>日本語</span></a></li><li class="interlanguage-link interwiki-ko mw-list-item"><a href="https://ko.wikipedia.org/wiki/C%2B%2B11" title="C++11 – korejština" lang="ko" hreflang="ko" data-title="C++11" data-language-autonym="한국어" data-language-local-name="korejština" class="interlanguage-link-target"><span>한국어</span></a></li><li class="interlanguage-link interwiki-no mw-list-item"><a href="https://no.wikipedia.org/wiki/C%2B%2B11" title="C++11 – norština (bokmål)" lang="nb" hreflang="nb" data-title="C++11" data-language-autonym="Norsk bokmål" data-language-local-name="norština (bokmål)" class="interlanguage-link-target"><span>Norsk bokmål</span></a></li><li class="interlanguage-link interwiki-pl mw-list-item"><a href="https://pl.wikipedia.org/wiki/C%2B%2B11" title="C++11 – polština" lang="pl" hreflang="pl" data-title="C++11" data-language-autonym="Polski" data-language-local-name="polština" class="interlanguage-link-target"><span>Polski</span></a></li><li class="interlanguage-link interwiki-pt mw-list-item"><a href="https://pt.wikipedia.org/wiki/C%2B%2B11" title="C++11 – portugalština" lang="pt" hreflang="pt" data-title="C++11" data-language-autonym="Português" data-language-local-name="portugalština" class="interlanguage-link-target"><span>Português</span></a></li><li class="interlanguage-link interwiki-ru mw-list-item"><a href="https://ru.wikipedia.org/wiki/C%2B%2B11" title="C++11 – ruština" lang="ru" hreflang="ru" data-title="C++11" data-language-autonym="Русский" data-language-local-name="ruština" class="interlanguage-link-target"><span>Русский</span></a></li><li class="interlanguage-link interwiki-sr mw-list-item"><a href="https://sr.wikipedia.org/wiki/%D0%9D%D0%B0%D1%86%D1%80%D1%82_C%2B%2B0x_%D0%BE%D0%B4_%D0%BC%D0%B0%D1%80%D1%82%D0%B0_2010." title="Нацрт C++0x од марта 2010. – srbština" lang="sr" hreflang="sr" data-title="Нацрт C++0x од марта 2010." data-language-autonym="Српски / srpski" data-language-local-name="srbština" class="interlanguage-link-target"><span>Српски / srpski</span></a></li><li class="interlanguage-link interwiki-th mw-list-item"><a href="https://th.wikipedia.org/wiki/%E0%B8%A0%E0%B8%B2%E0%B8%A9%E0%B8%B2%E0%B8%8B%E0%B8%B5%E0%B8%9E%E0%B8%A5%E0%B8%B1%E0%B8%AA%E0%B8%9E%E0%B8%A5%E0%B8%B1%E0%B8%AA11" title="ภาษาซีพลัสพลัส11 – thajština" lang="th" hreflang="th" data-title="ภาษาซีพลัสพลัส11" data-language-autonym="ไทย" data-language-local-name="thajština" class="interlanguage-link-target"><span>ไทย</span></a></li><li class="interlanguage-link interwiki-uk mw-list-item"><a href="https://uk.wikipedia.org/wiki/C%2B%2B11" title="C++11 – ukrajinština" lang="uk" hreflang="uk" data-title="C++11" data-language-autonym="Українська" data-language-local-name="ukrajinština" class="interlanguage-link-target"><span>Українська</span></a></li><li class="interlanguage-link interwiki-vi mw-list-item"><a href="https://vi.wikipedia.org/wiki/C%2B%2B11" title="C++11 – vietnamština" lang="vi" hreflang="vi" data-title="C++11" data-language-autonym="Tiếng Việt" data-language-local-name="vietnamština" class="interlanguage-link-target"><span>Tiếng Việt</span></a></li><li class="interlanguage-link interwiki-zh mw-list-item"><a href="https://zh.wikipedia.org/wiki/C%2B%2B11" title="C++11 – čínština" lang="zh" hreflang="zh" data-title="C++11" data-language-autonym="中文" data-language-local-name="čínština" class="interlanguage-link-target"><span>中文</span></a></li> </ul> <div class="after-portlet after-portlet-lang"><span class="wb-langlinks-edit wb-langlinks-link"><a href="https://www.wikidata.org/wiki/Special:EntityPage/Q1061570#sitelinks-wikipedia" title="Editovat mezijazykové odkazy" class="wbc-editpage">Upravit odkazy</a></span></div> </div> </div> </div> </header> <div class="vector-page-toolbar"> <div class="vector-page-toolbar-container"> <div id="left-navigation"> <nav aria-label="Jmenné prostory"> <div id="p-associated-pages" class="vector-menu vector-menu-tabs mw-portlet mw-portlet-associated-pages" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-nstab-main" class="selected vector-tab-noicon mw-list-item"><a href="/wiki/C%2B%2B11" title="Zobrazit obsahovou stránku [c]" accesskey="c"><span>Článek</span></a></li><li id="ca-talk" class="new vector-tab-noicon mw-list-item"><a href="/w/index.php?title=Diskuse:C%2B%2B11&amp;action=edit&amp;redlink=1" rel="discussion" class="new" title="Diskuse ke stránce (stránka neexistuje) [t]" accesskey="t"><span>Diskuse</span></a></li> </ul> </div> </div> <div id="vector-variants-dropdown" class="vector-dropdown emptyPortlet" > <input type="checkbox" id="vector-variants-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-variants-dropdown" class="vector-dropdown-checkbox " aria-label="Změnit variantu jazyka" > <label id="vector-variants-dropdown-label" for="vector-variants-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet" aria-hidden="true" ><span class="vector-dropdown-label-text">čeština</span> </label> <div class="vector-dropdown-content"> <div id="p-variants" class="vector-menu mw-portlet mw-portlet-variants emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> </div> </div> </nav> </div> <div id="right-navigation" class="vector-collapsible"> <nav aria-label="Zobrazení"> <div id="p-views" class="vector-menu vector-menu-tabs mw-portlet mw-portlet-views" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-view" class="selected vector-tab-noicon mw-list-item"><a href="/wiki/C%2B%2B11"><span>Číst</span></a></li><li id="ca-ve-edit" class="vector-tab-noicon mw-list-item"><a href="/w/index.php?title=C%2B%2B11&amp;veaction=edit" title="Editovat tuto stránku [v]" accesskey="v"><span>Editovat</span></a></li><li id="ca-edit" class="collapsible vector-tab-noicon mw-list-item"><a href="/w/index.php?title=C%2B%2B11&amp;action=edit" title="Editovat zdrojový kód této stránky [e]" accesskey="e"><span>Editovat zdroj</span></a></li><li id="ca-history" class="vector-tab-noicon mw-list-item"><a href="/w/index.php?title=C%2B%2B11&amp;action=history" title="Starší verze této stránky. [h]" accesskey="h"><span>Zobrazit historii</span></a></li> </ul> </div> </div> </nav> <nav class="vector-page-tools-landmark" aria-label="Nástroje ke stránce"> <div id="vector-page-tools-dropdown" class="vector-dropdown vector-page-tools-dropdown" > <input type="checkbox" id="vector-page-tools-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-page-tools-dropdown" class="vector-dropdown-checkbox " aria-label="Nástroje" > <label id="vector-page-tools-dropdown-label" for="vector-page-tools-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet" aria-hidden="true" ><span class="vector-dropdown-label-text">Nástroje</span> </label> <div class="vector-dropdown-content"> <div id="vector-page-tools-unpinned-container" class="vector-unpinned-container"> <div id="vector-page-tools" class="vector-page-tools vector-pinnable-element"> <div class="vector-pinnable-header vector-page-tools-pinnable-header vector-pinnable-header-unpinned" data-feature-name="page-tools-pinned" data-pinnable-element-id="vector-page-tools" data-pinned-container-id="vector-page-tools-pinned-container" data-unpinned-container-id="vector-page-tools-unpinned-container" > <div class="vector-pinnable-header-label">Nástroje</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-page-tools.pin">přesunout do postranního panelu</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-page-tools.unpin">skrýt</button> </div> <div id="p-cactions" class="vector-menu mw-portlet mw-portlet-cactions emptyPortlet vector-has-collapsible-items" title="Další možnosti" > <div class="vector-menu-heading"> Akce </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-more-view" class="selected vector-more-collapsible-item mw-list-item"><a href="/wiki/C%2B%2B11"><span>Číst</span></a></li><li id="ca-more-ve-edit" class="vector-more-collapsible-item mw-list-item"><a href="/w/index.php?title=C%2B%2B11&amp;veaction=edit" title="Editovat tuto stránku [v]" accesskey="v"><span>Editovat</span></a></li><li id="ca-more-edit" class="collapsible vector-more-collapsible-item mw-list-item"><a href="/w/index.php?title=C%2B%2B11&amp;action=edit" title="Editovat zdrojový kód této stránky [e]" accesskey="e"><span>Editovat zdroj</span></a></li><li id="ca-more-history" class="vector-more-collapsible-item mw-list-item"><a href="/w/index.php?title=C%2B%2B11&amp;action=history"><span>Zobrazit historii</span></a></li> </ul> </div> </div> <div id="p-tb" class="vector-menu mw-portlet mw-portlet-tb" > <div class="vector-menu-heading"> Obecné </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="t-whatlinkshere" class="mw-list-item"><a href="/wiki/Speci%C3%A1ln%C3%AD:Co_odkazuje_na/C%2B%2B11" title="Seznam všech wikistránek, které sem odkazují [j]" accesskey="j"><span>Odkazuje sem</span></a></li><li id="t-recentchangeslinked" class="mw-list-item"><a href="/wiki/Speci%C3%A1ln%C3%AD:Souvisej%C3%ADc%C3%AD_zm%C4%9Bny/C%2B%2B11" rel="nofollow" title="Nedávné změny stránek, na které je odkazováno [k]" accesskey="k"><span>Související změny</span></a></li><li id="t-upload" class="mw-list-item"><a href="//commons.wikimedia.org/wiki/Special:UploadWizard?uselang=cs" title="Nahrát obrázky či jiná multimédia [u]" accesskey="u"><span>Načíst soubor</span></a></li><li id="t-specialpages" class="mw-list-item"><a href="/wiki/Speci%C3%A1ln%C3%AD:Speci%C3%A1ln%C3%AD_str%C3%A1nky" title="Seznam všech speciálních stránek [q]" accesskey="q"><span>Speciální stránky</span></a></li><li id="t-permalink" class="mw-list-item"><a href="/w/index.php?title=C%2B%2B11&amp;oldid=24251798" title="Trvalý odkaz na současnou verzi této stránky"><span>Trvalý odkaz</span></a></li><li id="t-info" class="mw-list-item"><a href="/w/index.php?title=C%2B%2B11&amp;action=info" title="Více informací o této stránce"><span>Informace o stránce</span></a></li><li id="t-cite" class="mw-list-item"><a href="/w/index.php?title=Speci%C3%A1ln%C3%AD:Citovat&amp;page=C%2B%2B11&amp;id=24251798&amp;wpFormIdentifier=titleform" title="Informace o tom, jak citovat tuto stránku"><span>Citovat stránku</span></a></li><li id="t-urlshortener" class="mw-list-item"><a href="/w/index.php?title=Speci%C3%A1ln%C3%AD:UrlShortener&amp;url=https%3A%2F%2Fcs.wikipedia.org%2Fwiki%2FC%252B%252B11"><span>Získat zkrácené URL</span></a></li><li id="t-urlshortener-qrcode" class="mw-list-item"><a href="/w/index.php?title=Speci%C3%A1ln%C3%AD:QrCode&amp;url=https%3A%2F%2Fcs.wikipedia.org%2Fwiki%2FC%252B%252B11"><span>Stáhnout QR kód</span></a></li> </ul> </div> </div> <div id="p-coll-print_export" class="vector-menu mw-portlet mw-portlet-coll-print_export" > <div class="vector-menu-heading"> Tisk/export </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="coll-create_a_book" class="mw-list-item"><a href="/w/index.php?title=Speci%C3%A1ln%C3%AD:Kniha&amp;bookcmd=book_creator&amp;referer=C%2B%2B11"><span>Vytvořit knihu</span></a></li><li id="coll-download-as-rl" class="mw-list-item"><a href="/w/index.php?title=Speci%C3%A1ln%C3%AD:DownloadAsPdf&amp;page=C%2B%2B11&amp;action=show-download-screen"><span>Stáhnout jako PDF</span></a></li><li id="t-print" class="mw-list-item"><a href="/w/index.php?title=C%2B%2B11&amp;printable=yes" title="Tato stránka v podobě vhodné k tisku [p]" accesskey="p"><span>Verze k tisku</span></a></li> </ul> </div> </div> <div id="p-wikibase-otherprojects" class="vector-menu mw-portlet mw-portlet-wikibase-otherprojects" > <div class="vector-menu-heading"> Na jiných projektech </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="t-wikibase" class="wb-otherproject-link wb-otherproject-wikibase-dataitem mw-list-item"><a href="https://www.wikidata.org/wiki/Special:EntityPage/Q1061570" title="Odkaz na propojenou položku datového úložiště [g]" accesskey="g"><span>Položka Wikidat</span></a></li> </ul> </div> </div> </div> </div> </div> </div> </nav> </div> </div> </div> <div class="vector-column-end"> <div class="vector-sticky-pinned-container"> <nav class="vector-page-tools-landmark" aria-label="Nástroje ke stránce"> <div id="vector-page-tools-pinned-container" class="vector-pinned-container"> </div> </nav> <nav class="vector-appearance-landmark" aria-label="Vzhled"> <div id="vector-appearance-pinned-container" class="vector-pinned-container"> <div id="vector-appearance" class="vector-appearance vector-pinnable-element"> <div class="vector-pinnable-header vector-appearance-pinnable-header vector-pinnable-header-pinned" data-feature-name="appearance-pinned" data-pinnable-element-id="vector-appearance" data-pinned-container-id="vector-appearance-pinned-container" data-unpinned-container-id="vector-appearance-unpinned-container" > <div class="vector-pinnable-header-label">Vzhled</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-appearance.pin">přesunout do postranního panelu</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-appearance.unpin">skrýt</button> </div> </div> </div> </nav> </div> </div> <div id="bodyContent" class="vector-body" aria-labelledby="firstHeading" data-mw-ve-target-container> <div class="vector-body-before-content"> <div class="mw-indicators"> </div> <div id="siteSub" class="noprint">Z Wikipedie, otevřené encyklopedie</div> </div> <div id="contentSub"><div id="mw-content-subtitle"></div></div> <div id="mw-content-text" class="mw-body-content"><div class="mw-content-ltr mw-parser-output" lang="cs" dir="ltr"><table class="infobox noprint" style="text-align:center; width:200px;"> <tbody><tr style="background:#A7D7F9; text-align:center"> <th><span style="font-size: larger;"><a href="/wiki/C%2B%2B" title="C++">Verze jazyka C++</a></span> </th></tr> <tr style=""> <td><div class="hlist"><ul><li><a href="/wiki/C%2B%2B" title="C++">C++98</a> * <a href="/wiki/C%2B%2B03" title="C++03">C++03</a> * <a class="mw-selflink selflink">C++11</a> * <a href="/wiki/C%2B%2B14" title="C++14">C++14</a> * <a href="/wiki/C%2B%2B17" title="C++17">C++17</a> * <a href="/wiki/C%2B%2B20" title="C++20">C++20</a> * <a href="/w/index.php?title=C%2B%2B23&amp;action=edit&amp;redlink=1" class="new" title="C++23 (stránka neexistuje)">C++23</a> * <a href="/w/index.php?title=C%2B%2B26&amp;action=edit&amp;redlink=1" class="new" title="C++26 (stránka neexistuje)">C++26</a></li></ul></div> </td></tr></tbody></table> <figure class="mw-default-size" typeof="mw:File/Thumb"><a href="/wiki/Soubor:Bjarne-stroustrup.jpg" class="mw-file-description"><img src="//upload.wikimedia.org/wikipedia/commons/thumb/b/bd/Bjarne-stroustrup.jpg/220px-Bjarne-stroustrup.jpg" decoding="async" width="220" height="147" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/b/bd/Bjarne-stroustrup.jpg/330px-Bjarne-stroustrup.jpg 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/b/bd/Bjarne-stroustrup.jpg/440px-Bjarne-stroustrup.jpg 2x" data-file-width="1600" data-file-height="1071" /></a><figcaption>Autor jazyka C++ <a href="/wiki/Bjarne_Stroustrup" title="Bjarne Stroustrup">Bjarne Stroustrup</a> (vlevo) na konferenci CEE-SECR 2010 v <a href="/wiki/Moskva" title="Moskva">Moskvě</a></figcaption></figure> <p><b>C++11</b> (dříve <b>C++0x</b><sup id="cite_ref-:0_1-0" class="reference"><a href="#cite_note-:0-1"><span class="cite-bracket">&#91;</span>1<span class="cite-bracket">&#93;</span></a></sup>) je standard <a href="/wiki/C%2B%2B" title="C++">programovacího jazyka C++</a>. Byl schválen organizací ISO dne 12. srpna 2011 a nahrazuje <a href="/wiki/C%2B%2B03" title="C++03">C++03</a>. Označení navazuje na tradici pojmenovávání verzí jazyka podle roku publikování specifikace. C++11 přidává několik prvků k jádru jazyka a rozšiřuje standardní <a href="/wiki/C%2B%2B" title="C++">C++</a> knihovnu. V září 2011 byl standard publikován jako ISO/IEC 14882:2011.<sup id="cite_ref-2" class="reference"><a href="#cite_note-2"><span class="cite-bracket">&#91;</span>2<span class="cite-bracket">&#93;</span></a></sup> </p><p>Nejnovějšími standardy jsou postupně <a href="/wiki/C%2B%2B14" title="C++14">C++14</a>, <a href="/wiki/C%2B%2B17" title="C++17">C++17</a> a <a href="/wiki/C%2B%2B20" title="C++20">C++20</a>, a pracuje se na standardu <a href="/w/index.php?title=C%2B%2B23&amp;action=edit&amp;redlink=1" class="new" title="C++23 (stránka neexistuje)">C++23</a>.<sup id="cite_ref-3" class="reference"><a href="#cite_note-3"><span class="cite-bracket">&#91;</span>3<span class="cite-bracket">&#93;</span></a></sup><sup id="cite_ref-4" class="reference"><a href="#cite_note-4"><span class="cite-bracket">&#91;</span>4<span class="cite-bracket">&#93;</span></a></sup> </p> <meta property="mw:PageProp/toc" /> <div class="mw-heading mw-heading2"><h2 id="Cíle_návrhu"><span id="C.C3.ADle_n.C3.A1vrhu"></span>Cíle návrhu</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B11&amp;veaction=edit&amp;section=1" title="Editace sekce: Cíle návrhu" class="mw-editsection-visualeditor"><span>editovat</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=C%2B%2B11&amp;action=edit&amp;section=1" title="Editovat zdrojový kód sekce Cíle návrhu"><span>editovat zdroj</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Komise pro návrh C++11 kladla důraz na: </p> <ul><li>zachování stability a <a href="/wiki/Zp%C4%9Btn%C3%A1_kompatibilita" title="Zpětná kompatibilita">kompatibility</a> se staršími verzemi C++ a <a href="/wiki/C_(programovac%C3%AD_jazyk)" title="C (programovací jazyk)">jazykem C</a></li> <li>nerozšiřování jádra jazyka (pokud je to možné) – nové vlastnosti přednostně zavádět do standardní knihovny<sup id="cite_ref-:1_5-0" class="reference"><a href="#cite_note-:1-5"><span class="cite-bracket">&#91;</span>5<span class="cite-bracket">&#93;</span></a></sup></li> <li>zlepšení jazyka C++, aby se usnadnil návrh systémů a knihoven místo zavádění nových vlastností užitečných pouze pro určité aplikace</li> <li>zvýšení typové bezpečnosti poskytnutím bezpečnějších alternativ k původním nebezpečným technikám</li> <li>zvýšení výkonnosti a zlepšení schopností pracovat přímo s hardwarem</li> <li>poskytování vhodných nástrojů pro řešení reálných problémů</li> <li>usnadnění učení a vyučování jazyku C++ bez odstraňování užitečných vlastností používaných zkušenými programátory</li></ul> <p>Významná je pozornost věnovaná začátečníkům, protože velká část programátorů jimi navždy zůstane, a protože si mnoho začátečníků nikdy nerozšíří své znalosti nad rámec těch aspektů jazyka, na které se specializují.<sup id="cite_ref-:0_1-1" class="reference"><a href="#cite_note-:0-1"><span class="cite-bracket">&#91;</span>1<span class="cite-bracket">&#93;</span></a></sup><sup id="cite_ref-:1_5-1" class="reference"><a href="#cite_note-:1-5"><span class="cite-bracket">&#91;</span>5<span class="cite-bracket">&#93;</span></a></sup> </p> <div class="mw-heading mw-heading2"><h2 id="Rozšíření_jádra_jazyka_C++"><span id="Roz.C5.A1.C3.AD.C5.99en.C3.AD_j.C3.A1dra_jazyka_C.2B.2B"></span>Rozšíření jádra jazyka C++</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B11&amp;veaction=edit&amp;section=2" title="Editace sekce: Rozšíření jádra jazyka C++" class="mw-editsection-visualeditor"><span>editovat</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=C%2B%2B11&amp;action=edit&amp;section=2" title="Editovat zdrojový kód sekce Rozšíření jádra jazyka C++"><span>editovat zdroj</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Jednou z funkcí komise C++ je vývoj jádra jazyka. K oblastem jádra jazyka, které byly výrazně vylepšeny, patří podpora <a href="/wiki/Vl%C3%A1kno_(informatika)" title="Vlákno (informatika)">multithreadingu</a>, podpora <a href="/wiki/Generick%C3%A9_programov%C3%A1n%C3%AD" title="Generické programování">generického programování</a>, uniformní inicializace a zvyšování výkonnosti. </p> <div class="mw-heading mw-heading3"><h3 id="Rozšíření_jádra_pro_rychlejší_běh"><span id="Roz.C5.A1.C3.AD.C5.99en.C3.AD_j.C3.A1dra_pro_rychlej.C5.A1.C3.AD_b.C4.9Bh"></span>Rozšíření jádra pro rychlejší běh</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B11&amp;veaction=edit&amp;section=3" title="Editace sekce: Rozšíření jádra pro rychlejší běh" class="mw-editsection-visualeditor"><span>editovat</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=C%2B%2B11&amp;action=edit&amp;section=3" title="Editovat zdrojový kód sekce Rozšíření jádra pro rychlejší běh"><span>editovat zdroj</span></a><span class="mw-editsection-bracket">]</span></span></div> <div class="mw-heading mw-heading4"><h4 id="Reference_jako_r-hodnota_a_move_konstruktor">Reference jako r-hodnota a move konstruktor</h4><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B11&amp;veaction=edit&amp;section=4" title="Editace sekce: Reference jako r-hodnota a move konstruktor" class="mw-editsection-visualeditor"><span>editovat</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=C%2B%2B11&amp;action=edit&amp;section=4" title="Editovat zdrojový kód sekce Reference jako r-hodnota a move konstruktor"><span>editovat zdroj</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Umožňuje použít referenci na objekt jako r-hodnotu. R-hodnota je dočasná konstanta, do které nelze nijak zapisovat. </p> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="kt">int</span><span class="w"> </span><span class="n">a</span><span class="p">;</span> <span class="n">a</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">5</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">10</span><span class="w"> </span><span class="c1">// (5 + 10) je r-hodnota</span> <span class="p">(</span><span class="mi">5</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">10</span><span class="p">)</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">a</span><span class="p">;</span><span class="w"> </span><span class="c1">// nelze přiřadit hodnotu r-hodnotě.</span> <span class="kt">int</span><span class="o">&amp;</span><span class="w"> </span><span class="n">b</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">10</span><span class="p">;</span><span class="w"> </span><span class="c1">// nelze, nemůže existovat nekonstantní reference na r-hodnotu, konstanta není uložená v paměti, ale dosazena překladačem</span> <span class="k">const</span><span class="w"> </span><span class="kt">int</span><span class="o">&amp;</span><span class="w"> </span><span class="n">b</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">10</span><span class="p">;</span><span class="w"> </span><span class="c1">// lze, za b se vždy dosadí 10</span> <span class="kt">int</span><span class="o">&amp;&amp;</span><span class="w"> </span><span class="n">b</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">10</span><span class="p">;</span><span class="w"> </span><span class="c1">// lze, uloží se do paměti jako dočasná proměnná, inicializuje se na hodnotu 10</span> </pre></div> <p>Move konstruktor lze využít pro přesun zdrojů z jedné třídy do druhé bez alokace a dealokace paměti. C++11 zavádí operátor &amp;&amp; jako referenci na r-hodnotu. Move konstruktor je definován jako <code>Trida(Trida&amp;&amp; trida)</code>, a zavolá se při konstrukci objektu z reference na objekt, který je r-hodnotou. </p> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="k">class</span><span class="w"> </span><span class="nc">Array</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="kt">int</span><span class="o">*</span><span class="w"> </span><span class="n">pole</span><span class="p">;</span> <span class="w"> </span><span class="kt">size_t</span><span class="w"> </span><span class="n">s</span><span class="p">;</span> <span class="k">public</span><span class="o">:</span> <span class="w"> </span><span class="c1">// Konstruktor</span> <span class="w"> </span><span class="n">Array</span><span class="p">(</span><span class="kt">size_t</span><span class="w"> </span><span class="n">s</span><span class="p">)</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="n">s</span><span class="p">(</span><span class="n">s</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="n">pole</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="kt">int</span><span class="p">[</span><span class="n">s</span><span class="p">];</span> <span class="w"> </span><span class="p">}</span> <span class="w"> </span><span class="c1">// Kopírovací konstruktor</span> <span class="w"> </span><span class="n">Array</span><span class="p">(</span><span class="k">const</span><span class="w"> </span><span class="n">Tr1</span><span class="o">&amp;</span><span class="w"> </span><span class="n">par</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="n">pole</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="kt">int</span><span class="p">[</span><span class="n">s</span><span class="p">];</span> <span class="w"> </span><span class="n">memcpy</span><span class="p">(</span><span class="n">pole</span><span class="p">,</span><span class="w"> </span><span class="n">par</span><span class="p">.</span><span class="n">pole</span><span class="p">,</span><span class="w"> </span><span class="k">sizeof</span><span class="p">(</span><span class="kt">int</span><span class="p">)</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">s</span><span class="p">);</span> <span class="w"> </span><span class="p">}</span> <span class="w"> </span><span class="c1">// Move konstruktor</span> <span class="w"> </span><span class="n">Array</span><span class="p">(</span><span class="n">Tr1</span><span class="o">&amp;&amp;</span><span class="w"> </span><span class="n">par</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="n">pole</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">par</span><span class="p">.</span><span class="n">pole</span><span class="p">;</span> <span class="w"> </span><span class="n">s</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">par</span><span class="p">.</span><span class="n">s</span><span class="p">;</span> <span class="w"> </span><span class="n">par</span><span class="p">.</span><span class="n">pole</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span> <span class="w"> </span><span class="n">par</span><span class="p">.</span><span class="n">s</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span> <span class="w"> </span><span class="p">}</span> <span class="w"> </span><span class="o">~</span><span class="n">Array</span><span class="p">()</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="k">delete</span><span class="p">[]</span><span class="w"> </span><span class="n">pole</span><span class="p">;</span> <span class="w"> </span><span class="p">}</span> <span class="p">};</span> <span class="n">Array</span><span class="w"> </span><span class="nf">pole1</span><span class="p">(</span><span class="mi">100</span><span class="p">);</span><span class="w"> </span><span class="c1">// Zavolá standardní konstruktor</span> <span class="n">Array</span><span class="w"> </span><span class="nf">pole2</span><span class="p">(</span><span class="k">static_cast</span><span class="o">&lt;</span><span class="n">Array</span><span class="o">&amp;&amp;&gt;</span><span class="p">(</span><span class="n">pole1</span><span class="p">));</span><span class="w"> </span><span class="c1">// Přetypuje pole1 na referenci na r-hodnotu, a zavolá move konstruktor</span> <span class="c1">// pole2 je stejné jako bylo pole1 a pole1 je prázdné</span> </pre></div> <div class="mw-heading mw-heading4"><h4 id="constexpr_–_Obecné_konstantní_výrazy"><span id="constexpr_.E2.80.93_Obecn.C3.A9_konstantn.C3.AD_v.C3.BDrazy"></span>constexpr – Obecné konstantní výrazy</h4><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B11&amp;veaction=edit&amp;section=5" title="Editace sekce: constexpr – Obecné konstantní výrazy" class="mw-editsection-visualeditor"><span>editovat</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=C%2B%2B11&amp;action=edit&amp;section=5" title="Editovat zdrojový kód sekce constexpr – Obecné konstantní výrazy"><span>editovat zdroj</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>C++11 zavádí klíčové slovo <code>constexpr</code>, které u funkce nebo objektu vynutí, že bude vyhodnocena (objekt konstruován) v době kompilace. </p> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="kt">int</span><span class="w"> </span><span class="nf">get_five</span><span class="p">()</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">5</span><span class="p">;</span> <span class="p">}</span> <span class="kt">int</span><span class="w"> </span><span class="n">some_value</span><span class="p">[</span><span class="n">get_five</span><span class="p">()</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">7</span><span class="p">];</span><span class="w"> </span><span class="c1">// Nelze použít, get_five() není konstantní výraz</span> <span class="k">enum</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="n">five</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">get_five</span><span class="p">();</span><span class="w"> </span><span class="c1">// Nelze použít, get_five() není konstantní vyraz</span> <span class="p">};</span> <span class="k">constexpr</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="nf">get_five</span><span class="p">()</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">5</span><span class="p">;</span> <span class="p">}</span> <span class="kt">int</span><span class="w"> </span><span class="n">some_value</span><span class="p">[</span><span class="n">get_five</span><span class="p">()</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">7</span><span class="p">];</span> <span class="k">enum</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="n">five</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">get_five</span><span class="p">();</span> <span class="p">};</span> </pre></div> <div class="mw-heading mw-heading4"><h4 id="Nová_definice_POD"><span id="Nov.C3.A1_definice_POD"></span>Nová definice POD</h4><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B11&amp;veaction=edit&amp;section=6" title="Editace sekce: Nová definice POD" class="mw-editsection-visualeditor"><span>editovat</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=C%2B%2B11&amp;action=edit&amp;section=6" title="Editovat zdrojový kód sekce Nová definice POD"><span>editovat zdroj</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Třída nebo struktura v C++03 musí splňovat několik podmínek, aby byla považována za <a href="/w/index.php?title=Plain_old_data&amp;action=edit&amp;redlink=1" class="new" title="Plain old data (stránka neexistuje)">plain old data</a> (POD) typ. Typy, které této definici vyhovují, vytvářejí rozvržení objektů, které je kompatibilní s jazykem C, a je možné je inicializovat staticky. Norma C++03 má omezení na to, jaké typy jsou kompatibilní s jazykem C a které lze staticky inicializovat, protože neexistuje žádný technický důvod, aby překladač nemohl program přijmout; pokud by někdo úmyslně vytvořil C++03 POD typ a přidal nevirtuální členskou funkci, tento typ by již nebyl POD typem, nemohl by být staticky inicializován, a nebyl by kompatibilní s jazykem C, i kdyby nedošlo ke změně rozložení paměti. </p><p>C++11 uvolnilo několik pravidel pro POD a rozdělilo koncept POD na dva samostatné koncepty: <i>triviální</i> a <i>se standardní strukturou</i>. </p><p>Typ, který je <i>triviální</i>, může být staticky inicializován. To znamená, že jeho obsah lze kopírovat funkcí <code>memcpy</code> a není nutné používat kopírovací konstruktor. Životnost <i>triviálního</i> typu začíná, když je definován jeho úložný prostor, a ne když končí konstruktor. </p><p>Třída nebo struktura je triviální, pokud: </p> <ol><li>má triviální implicitní konstruktor; konstruktor může používat <a href="#Explicitně_implicitní_speciální_členská_funkce">implicitní konstruktoru syntax</a> (<code>SomeConstructor() = default;</code>).</li> <li>má triviální kopírovací a přesunové konstruktory, který může použít implicitní syntax.</li> <li>má triviální kopírovací a přesunové operátory přiřazení, které mohou použít implicitní syntax.</li> <li>má triviální destruktor, který nesmí být virtuální.</li></ol> <p>Konstruktory jsou triviální, pouze pokud třída nemá žádné virtuální členské funkce a žádné virtuální základní třídy. Operace kopírování a přesunu také vyžadují, aby všechny nestatické datové členy byly triviální. </p><p>Že typ má <i>standardní strukturu</i>, znamená, že uspořádává a pakuje své členy způsobem, které je kompatibilní s jazykem C. Třída nebo struktura je standardní strukturou, pokud: </p> <ol><li>nemá žádné <a href="/wiki/Virtu%C3%A1ln%C3%AD_funkce" title="Virtuální funkce">virtuální funkce</a></li> <li>nemá žádné virtuální základní třídy</li> <li>všechny jeho nestatické datové členy mají stejné řízení přístupu (public, private, protected)</li> <li>všechno jeho nestatické datové členy, včetně libovolný v jeho základní třídy, jsou v stejný jeden třída v hierarchie</li> <li>výše uvedená pravidla také platí pro všechny bázové třídy a všechny nestatické datové členy v hierarchii tříd</li> <li>nemá žádný základní třídy stejného typu jako první definovaný nestatický datový člen</li></ol> <p>Třída, struktura nebo union se považuje za POD, pokud je triviální, má standardní strukturu, a veškeré jeho nestatické datové členy a základní třídy jsou PODy. </p><p>Díky oddělení těchto konceptů je možné se jednoho vzdát, aniž by byl porušen druhý. Třída se složitými přesunovými a kopírovací konstruktory nemusí být triviální, ale pokud má standardní strukturu, může spolupracovat s jazykem C. Podobně třída s veřejnými a soukromými nestatickými datovými členy nebude mít standardní strukturu, ale může být triviální, a pak ji lze kopírovat pomocí <code>memcpy</code>. </p> <div class="mw-heading mw-heading3"><h3 id="Rozšíření_jádra_pro_rychlejší_kompilaci"><span id="Roz.C5.A1.C3.AD.C5.99en.C3.AD_j.C3.A1dra_pro_rychlej.C5.A1.C3.AD_kompilaci"></span>Rozšíření jádra pro rychlejší kompilaci</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B11&amp;veaction=edit&amp;section=7" title="Editace sekce: Rozšíření jádra pro rychlejší kompilaci" class="mw-editsection-visualeditor"><span>editovat</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=C%2B%2B11&amp;action=edit&amp;section=7" title="Editovat zdrojový kód sekce Rozšíření jádra pro rychlejší kompilaci"><span>editovat zdroj</span></a><span class="mw-editsection-bracket">]</span></span></div> <div class="mw-heading mw-heading4"><h4 id="Externí_šablona"><span id="Extern.C3.AD_.C5.A1ablona"></span>Externí šablona</h4><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B11&amp;veaction=edit&amp;section=8" title="Editace sekce: Externí šablona" class="mw-editsection-visualeditor"><span>editovat</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=C%2B%2B11&amp;action=edit&amp;section=8" title="Editovat zdrojový kód sekce Externí šablona"><span>editovat zdroj</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>V C++03 musí překladač instanciovat šablonu vždy, když se v kompilační jednotce objeví plně specifikovaná šablona, např.: </p> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="k">template</span><span class="w"> </span><span class="k">class</span><span class="w"> </span><span class="nc">std</span><span class="o">::</span><span class="n">vector</span><span class="o">&lt;</span><span class="n">myclass</span><span class="o">&gt;</span><span class="p">;</span> </pre></div> <p>Pokud je šablona instanciována se stejnými typy v mnoha kompilačních jednotkách, může to výrazně prodloužit trvání překladu. V C++03 tomu nelze zabránit, ale C++11 zavádí externí deklarace šablon podobné externím deklaracím dat. Používají deklarátor <code>extern</code>: </p> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="k">extern</span><span class="w"> </span><span class="k">template</span><span class="w"> </span><span class="k">class</span><span class="w"> </span><span class="nc">std</span><span class="o">::</span><span class="n">vector</span><span class="o">&lt;</span><span class="n">myclass</span><span class="o">&gt;</span><span class="p">;</span> </pre></div> <p>čímž říká překladači, aby v této kompilační jednotce instanciaci šablony <i>neprováděl</i>. </p> <div class="mw-heading mw-heading3"><h3 id="Rozšíření_jádra_pro_lepší_použití_jazyka"><span id="Roz.C5.A1.C3.AD.C5.99en.C3.AD_j.C3.A1dra_pro_lep.C5.A1.C3.AD_pou.C5.BEit.C3.AD_jazyka"></span>Rozšíření jádra pro lepší použití jazyka</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B11&amp;veaction=edit&amp;section=9" title="Editace sekce: Rozšíření jádra pro lepší použití jazyka" class="mw-editsection-visualeditor"><span>editovat</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=C%2B%2B11&amp;action=edit&amp;section=9" title="Editovat zdrojový kód sekce Rozšíření jádra pro lepší použití jazyka"><span>editovat zdroj</span></a><span class="mw-editsection-bracket">]</span></span></div> <div class="mw-heading mw-heading4"><h4 id="Seznamy_inicializátorů"><span id="Seznamy_inicializ.C3.A1tor.C5.AF"></span>Seznamy inicializátorů</h4><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B11&amp;veaction=edit&amp;section=10" title="Editace sekce: Seznamy inicializátorů" class="mw-editsection-visualeditor"><span>editovat</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=C%2B%2B11&amp;action=edit&amp;section=10" title="Editovat zdrojový kód sekce Seznamy inicializátorů"><span>editovat zdroj</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>C++11 rozšiřuje statickou inicializaci pole nebo struktury známou z C. Pomocí <code>std::initializer_list&lt;&gt;</code> umožňuje konstruktoru předat pole inicializačních parametrů uzavřených v {}. </p> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="c1">// inicializace v C</span> <span class="kt">int</span><span class="w"> </span><span class="n">pole</span><span class="p">[]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="mi">10</span><span class="p">,</span><span class="w"> </span><span class="mi">10</span><span class="p">};</span><span class="w"> </span><span class="c1">// inicializace pole</span> <span class="k">typedef</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">a</span><span class="p">;</span> <span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">b</span><span class="p">;</span> <span class="p">}</span><span class="w"> </span><span class="n">Struktura</span><span class="p">;</span> <span class="n">Struktura</span><span class="w"> </span><span class="n">strukt</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="mi">10</span><span class="p">,</span><span class="w"> </span><span class="mi">10</span><span class="p">};</span><span class="w"> </span><span class="c1">// inicializace struktury</span> <span class="c1">// inicializace v C++11</span> <span class="k">class</span><span class="w"> </span><span class="nc">Trida</span><span class="w"> </span><span class="p">{</span> <span class="k">public</span><span class="o">:</span> <span class="w"> </span><span class="n">Trida</span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">par</span><span class="p">);</span> <span class="p">};</span> <span class="n">Trida</span><span class="w"> </span><span class="n">pole</span><span class="p">[]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="mi">10</span><span class="p">,</span><span class="w"> </span><span class="mi">10</span><span class="p">};</span><span class="w"> </span><span class="c1">// inicializace pole tříd</span> <span class="k">class</span><span class="w"> </span><span class="nc">Trida</span><span class="w"> </span><span class="p">{</span> <span class="k">public</span><span class="o">:</span> <span class="w"> </span><span class="n">Trida</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">initializer_list</span><span class="o">&lt;</span><span class="kt">int</span><span class="o">&gt;</span><span class="w"> </span><span class="n">list</span><span class="p">);</span> <span class="p">};</span> <span class="n">Trida</span><span class="w"> </span><span class="n">pole</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">};</span><span class="w"> </span><span class="c1">// inicializace třídy</span> </pre></div> <div class="mw-heading mw-heading4"><h4 id="Typová_inference"><span id="Typov.C3.A1_inference"></span>Typová inference</h4><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B11&amp;veaction=edit&amp;section=11" title="Editace sekce: Typová inference" class="mw-editsection-visualeditor"><span>editovat</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=C%2B%2B11&amp;action=edit&amp;section=11" title="Editovat zdrojový kód sekce Typová inference"><span>editovat zdroj</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>C++11 zavádí dvě nové metody, jak deklarovat proměnné. Klíčové slovo <code>auto</code> doplní typ proměnné automaticky podle přiřazované hodnoty. Funkce <code>decltype(výraz)</code> vrací typ parametru. </p> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="k">auto</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">15</span><span class="p">;</span><span class="w"> </span><span class="c1">// i bude int;</span> <span class="k">decltype</span><span class="p">(</span><span class="n">i</span><span class="p">)</span><span class="w"> </span><span class="n">j</span><span class="p">;</span><span class="w"> </span><span class="c1">// j bude int;</span> </pre></div> <p>Výhodu přináší u složitých typů, zkracuje zápis. </p> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="c1">// C++03</span> <span class="k">for</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o">&lt;</span><span class="kt">int</span><span class="o">&gt;::</span><span class="n">const_iterator</span><span class="w"> </span><span class="n">it</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">data</span><span class="p">.</span><span class="n">cbegin</span><span class="p">();</span><span class="w"> </span><span class="n">it</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="n">data</span><span class="p">.</span><span class="n">cend</span><span class="p">();</span><span class="w"> </span><span class="o">++</span><span class="n">it</span><span class="p">);</span> <span class="c1">// C++11</span> <span class="k">for</span><span class="p">(</span><span class="k">auto</span><span class="w"> </span><span class="n">it</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">data</span><span class="p">.</span><span class="n">cbegin</span><span class="p">();</span><span class="w"> </span><span class="n">it</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="n">data</span><span class="p">.</span><span class="n">cend</span><span class="p">();</span><span class="w"> </span><span class="o">++</span><span class="n">it</span><span class="p">);</span> </pre></div> <div class="mw-heading mw-heading4"><h4 id="For_cyklus">For cyklus</h4><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B11&amp;veaction=edit&amp;section=12" title="Editace sekce: For cyklus" class="mw-editsection-visualeditor"><span>editovat</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=C%2B%2B11&amp;action=edit&amp;section=12" title="Editovat zdrojový kód sekce For cyklus"><span>editovat zdroj</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Rozšiřuje o novou definici cyklu for. Tento cyklus je známý z jiných jazyků jako cyklus <a href="/wiki/Cyklus_foreach" title="Cyklus foreach">foreach</a>. </p> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="kt">int</span><span class="w"> </span><span class="n">pole</span><span class="p">[</span><span class="mi">10</span><span class="p">];</span> <span class="k">for</span><span class="p">(</span><span class="kt">int</span><span class="o">&amp;</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="n">pole</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> <span class="p">}</span> </pre></div><p>Tento cyklus lze také použít pro kontejnery, které poskytují metody begin a end. </p><div class="mw-heading mw-heading4"><h4 id="Lambda_funkce">Lambda funkce</h4><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B11&amp;veaction=edit&amp;section=13" title="Editace sekce: Lambda funkce" class="mw-editsection-visualeditor"><span>editovat</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=C%2B%2B11&amp;action=edit&amp;section=13" title="Editovat zdrojový kód sekce Lambda funkce"><span>editovat zdroj</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>C++11 zavádí <a href="/w/index.php?title=Anonymn%C3%AD_funkce&amp;action=edit&amp;redlink=1" class="new" title="Anonymní funkce (stránka neexistuje)">anonymní funkce</a> (lambda funkce). Lambda funkce umožňuje deklarovat i definovat dočasnou funkci (například jako parametr funkce nebo uvnitř jiné funkce). </p> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="p">[</span><span class="n">externí_proměnné</span><span class="p">](</span><span class="n">parametry</span><span class="p">)</span><span class="o">-&gt;</span><span class="n">návratový_typ</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="n">tělo</span><span class="w"> </span><span class="n">funkce</span><span class="p">;</span><span class="w"> </span><span class="p">}</span> </pre></div> <p>V hranatých závorkách lze předat proměnné z rozsahu platnosti, ve kterém je funkce definovaná. Lze předat všechny, nebo jen výčet a je možné je předat hodnotou nebo referencí. </p> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="p">[]</span><span class="w"> </span><span class="c1">// funkce nemá přístup k externím proměnným</span> <span class="p">[</span><span class="n">x</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">y</span><span class="p">]</span><span class="w"> </span><span class="c1">// k proměnné x lze ve funkci přistupovat jako k hodnotě, k y jako k referenci</span> <span class="p">[</span><span class="o">&amp;</span><span class="p">]</span><span class="w"> </span><span class="c1">// všechny proměnné jsou předány referencí</span> <span class="p">[</span><span class="o">=</span><span class="p">]</span><span class="w"> </span><span class="c1">// všechny proměnné jsou předány hodnotou</span> <span class="p">[</span><span class="o">&amp;</span><span class="p">,</span><span class="w"> </span><span class="n">x</span><span class="p">]</span><span class="w"> </span><span class="c1">// x je předáno hodnotou, všechny ostatní referencí</span> </pre></div> <p>Příklad lambda funkce: </p> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="p">[](</span><span class="kt">int</span><span class="w"> </span><span class="n">x</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">y</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">y</span><span class="p">;</span><span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="c1">// Návratový typ je implicitní, funkce nevidí žádné proměnné mimo rozsah své platnosti</span> <span class="kt">int</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">10</span><span class="p">;</span> <span class="p">[</span><span class="o">&amp;</span><span class="p">](</span><span class="kt">int</span><span class="w"> </span><span class="n">x</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">y</span><span class="p">)</span><span class="o">-&gt;</span><span class="kt">int</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">y</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">a</span><span class="p">;</span><span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="c1">// Návratový typ je explicitní, funkce má přístup ke všem proměnným z rozsahu platnosti</span> <span class="w"> </span><span class="c1">// ve které je definována, proměnné jsou předány referencí</span> <span class="p">[</span><span class="o">=</span><span class="p">](</span><span class="kt">int</span><span class="w"> </span><span class="n">x</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">y</span><span class="p">)</span><span class="o">-&gt;</span><span class="kt">int</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">y</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">a</span><span class="p">;</span><span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="c1">// proměnné jsou předány hodnotou</span> </pre></div> <div class="mw-heading mw-heading4"><h4 id="Aliasy_na_jmenné_prostory"><span id="Aliasy_na_jmenn.C3.A9_prostory"></span>Aliasy na jmenné prostory</h4><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B11&amp;veaction=edit&amp;section=14" title="Editace sekce: Aliasy na jmenné prostory" class="mw-editsection-visualeditor"><span>editovat</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=C%2B%2B11&amp;action=edit&amp;section=14" title="Editovat zdrojový kód sekce Aliasy na jmenné prostory"><span>editovat zdroj</span></a><span class="mw-editsection-bracket">]</span></span></div> <div class="mw-highlight mw-highlight-lang-c++ mw-content-ltr" dir="ltr"><pre><span></span><span class="k">namespace</span><span class="w"> </span><span class="nn">ab</span> <span class="p">{</span> <span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="nf">zdvojnasob</span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">x</span><span class="p">)</span> <span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">x</span><span class="o">*</span><span class="mi">2</span><span class="p">;</span> <span class="w"> </span><span class="p">}</span> <span class="p">}</span> <span class="k">namespace</span><span class="w"> </span><span class="nn">x</span><span class="o">=</span><span class="nn">ab</span><span class="p">;</span> <span class="n">x</span><span class="o">::</span><span class="n">zdvojnasob</span><span class="p">(</span><span class="mi">5</span><span class="p">);</span><span class="c1">//To samé jako ab::zdvojnasob(5)</span> </pre></div> <div class="mw-heading mw-heading4"><h4 id="Nová_syntaxe_typových_aliasů"><span id="Nov.C3.A1_syntaxe_typov.C3.BDch_alias.C5.AF"></span>Nová syntaxe typových aliasů</h4><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B11&amp;veaction=edit&amp;section=15" title="Editace sekce: Nová syntaxe typových aliasů" class="mw-editsection-visualeditor"><span>editovat</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=C%2B%2B11&amp;action=edit&amp;section=15" title="Editovat zdrojový kód sekce Nová syntaxe typových aliasů"><span>editovat zdroj</span></a><span class="mw-editsection-bracket">]</span></span></div> <div class="mw-highlight mw-highlight-lang-c++ mw-content-ltr" dir="ltr"><pre><span></span><span class="c1">//C++98</span> <span class="k">typedef</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">my_type</span><span class="p">;</span> <span class="c1">//C++11</span> <span class="k">typedef</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">my_type</span><span class="p">;</span><span class="c1">//Zpětná kompatibilita</span> <span class="k">using</span><span class="w"> </span><span class="n">my_type</span><span class="o">=</span><span class="kt">int</span><span class="p">;</span><span class="c1">//Nová syntaxe</span> <span class="c1">//Toto pomocí typedef nelze:</span> <span class="k">template</span><span class="o">&lt;</span><span class="k">typename</span><span class="w"> </span><span class="nc">T</span><span class="o">&gt;</span><span class="k">using</span><span class="w"> </span><span class="n">ptr</span><span class="o">=</span><span class="n">T</span><span class="o">*</span><span class="p">;</span> </pre></div> <div class="mw-heading mw-heading4"><h4 id="Alternativní_syntaxe_funkcí"><span id="Alternativn.C3.AD_syntaxe_funkc.C3.AD"></span><span id="trailing-return-type"></span> Alternativní syntaxe funkcí</h4><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B11&amp;veaction=edit&amp;section=16" title="Editace sekce: Alternativní syntaxe funkcí" class="mw-editsection-visualeditor"><span>editovat</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=C%2B%2B11&amp;action=edit&amp;section=16" title="Editovat zdrojový kód sekce Alternativní syntaxe funkcí"><span>editovat zdroj</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Syntaxe deklarací funkcí ve standardním <a href="/wiki/C_(programovac%C3%AD_jazyk)" title="C (programovací jazyk)">jazyce C</a> byla pro tento jazyk naprosto dostatečná. Protože se jazyk C++ vyvinul z jazyka C, udržoval základní syntaxi a rozšířil ji, kde to bylo potřebné. Jak se jazyk C++ zesložiťoval, byl vystaven několika limitům, zvláště týkajících se deklarace šablon funkcí. Například v C++03 není toto možné: </p> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="k">template</span><span class="o">&lt;</span><span class="n">classLhs</span><span class="p">,</span><span class="w"> </span><span class="n">třída</span><span class="w"> </span><span class="n">Rhs</span><span class="o">&gt;</span> <span class="w"> </span><span class="n">Ret</span><span class="w"> </span><span class="n">adding_func</span><span class="p">(</span><span class="k">const</span><span class="w"> </span><span class="n">Lhs</span><span class="w"> </span><span class="o">&amp;</span><span class="n">lhs</span><span class="p">,</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="n">Rhs</span><span class="w"> </span><span class="o">&amp;</span><span class="n">rhs</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="k">return</span><span class="w"> </span><span class="n">lhs</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">rhs</span><span class="p">;}</span><span class="w"> </span><span class="c1">//Ret musí mít typ jako lhs+rhs</span> </pre></div> <p>Typ <code>Ret</code> je cokoli, co vznikne sečtením typů <code>Lhs</code> a <code>Rhs</code>. Dokonce ani s výše uvedenou funkčností <code>decltype</code> je v C++11 následující zápis chybný: </p> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="k">template</span><span class="o">&lt;</span><span class="n">classLhs</span><span class="p">,</span><span class="w"> </span><span class="n">třída</span><span class="w"> </span><span class="n">Rhs</span><span class="o">&gt;</span> <span class="w"> </span><span class="k">decltype</span><span class="p">(</span><span class="n">lhs</span><span class="o">+</span><span class="n">rhs</span><span class="p">)</span><span class="w"> </span><span class="n">adding_func</span><span class="p">(</span><span class="k">const</span><span class="w"> </span><span class="n">Lhs</span><span class="w"> </span><span class="o">&amp;</span><span class="n">lhs</span><span class="p">,</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="n">Rhs</span><span class="w"> </span><span class="o">&amp;</span><span class="n">rhs</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="k">return</span><span class="w"> </span><span class="n">lhs</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">rhs</span><span class="p">;}</span><span class="w"> </span><span class="c1">// V C++11 není dovoleno</span> </pre></div> <p>Tato konstrukce není v C++ povolena, protože <code>lhs</code> a <code>rhs</code> zatím nebyly definovány; identifikátory nejsou platné, dokud analyzátor neprovede analýzu zbytku prototypu funkce. </p><p>Proto C++11 umožňuje zadat typ návratové hodnoty funkce až za seznamem parametrů a symbolem <code>-&gt;</code>:<sup id="cite_ref-6" class="reference"><a href="#cite_note-6"><span class="cite-bracket">&#91;</span>6<span class="cite-bracket">&#93;</span></a></sup> </p> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="k">template</span><span class="o">&lt;</span><span class="n">classLhs</span><span class="p">,</span><span class="w"> </span><span class="n">třída</span><span class="w"> </span><span class="n">Rhs</span><span class="o">&gt;</span> <span class="w"> </span><span class="k">auto</span><span class="w"> </span><span class="n">adding_func</span><span class="p">(</span><span class="k">const</span><span class="w"> </span><span class="n">Lhs</span><span class="w"> </span><span class="o">&amp;</span><span class="n">lhs</span><span class="p">,</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="n">Rhs</span><span class="w"> </span><span class="o">&amp;</span><span class="n">rhs</span><span class="p">)</span><span class="w"> </span><span class="o">-&gt;</span><span class="w"> </span><span class="k">decltype</span><span class="p">(</span><span class="n">lhs</span><span class="o">+</span><span class="n">rhs</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="k">return</span><span class="w"> </span><span class="n">lhs</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">rhs</span><span class="p">;}</span> </pre></div> <p>Tuto syntaxi lze používat i pro jednodušší deklarace a definice funkcí: </p> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="k">struct</span><span class="w"> </span><span class="nc">SomeStruct</span> <span class="p">{</span> <span class="w"> </span><span class="k">auto</span><span class="w"> </span><span class="n">func_name</span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">x</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">y</span><span class="p">)</span><span class="w"> </span><span class="o">-&gt;</span><span class="w"> </span><span class="kt">int</span><span class="p">;</span> <span class="p">};</span> <span class="k">auto</span><span class="w"> </span><span class="n">SomeStruct</span><span class="o">::</span><span class="n">func_name</span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">x</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">y</span><span class="p">)</span><span class="w"> </span><span class="o">-&gt;</span><span class="w"> </span><span class="kt">int</span> <span class="p">{</span> <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">y</span><span class="p">;</span> <span class="p">}</span> </pre></div> <p>Klíčové slovo <code>auto</code> je v tomto případě pouze syntaktickou záležitostí a neznamená automatické vyvozování typu. Od C++14 je možné návratový typ funkce za seznamem parametrů zcela vypustit a překladač si jej odvodí sám.<sup id="cite_ref-7" class="reference"><a href="#cite_note-7"><span class="cite-bracket">&#91;</span>7<span class="cite-bracket">&#93;</span></a></sup> </p> <div class="mw-heading mw-heading4"><h4 id="Zlepšení_konstrukce_objektů"><span id="Zlep.C5.A1en.C3.AD_konstrukce_objekt.C5.AF"></span>Zlepšení konstrukce objektů</h4><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B11&amp;veaction=edit&amp;section=17" title="Editace sekce: Zlepšení konstrukce objektů" class="mw-editsection-visualeditor"><span>editovat</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=C%2B%2B11&amp;action=edit&amp;section=17" title="Editovat zdrojový kód sekce Zlepšení konstrukce objektů"><span>editovat zdroj</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>V C++03 není dovoleno konstruktorům třídy volat jiné konstruktory v seznamu inicializátorů této třídy. Každý konstruktor musí vytvořit veškeré členy své třídy sám nebo zavolat společnou členskou funkci, jako např.: </p> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="k">class</span><span class="w"> </span><span class="nc">SomeType</span> <span class="p">{</span> <span class="k">public</span><span class="o">:</span> <span class="w"> </span><span class="n">SomeType</span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">new_number</span><span class="p">)</span> <span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="n">Construct</span><span class="p">(</span><span class="n">new_number</span><span class="p">);</span> <span class="w"> </span><span class="p">}</span> <span class="w"> </span><span class="n">SomeType</span><span class="p">()</span> <span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="n">Construct</span><span class="p">(</span><span class="mi">42</span><span class="p">);</span> <span class="w"> </span><span class="p">}</span> <span class="k">private</span><span class="o">:</span> <span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="n">Construct</span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">new_number</span><span class="p">)</span> <span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="n">number</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">new_number</span><span class="p">;</span> <span class="w"> </span><span class="p">}</span> <span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">number</span><span class="p">;</span> <span class="p">};</span> </pre></div> <p>Konstruktory bázových tříd nemohou být přímo zpřístupněny odvozeným třídám; každá odvozená třída musí implementovat vlastní konstruktory, i když by stačil konstruktor základní třídy. Nekonstantní datové členy třídy nemohou být inicializovány v místě své deklarace, ale pouze v konstruktoru. </p><p>C++11 poskytuje řešení všech těchto problémů: </p><p>C++11 umožňuje, aby konstruktory volaly jiné konstruktory (což se nazývá <a href="/w/index.php?title=Delegace_(programov%C3%A1n%C3%AD)&amp;action=edit&amp;redlink=1" class="new" title="Delegace (programování) (stránka neexistuje)">delegace</a>). To umožňuje, aby konstruktory využívaly chování jiných konstruktorů s minimem přidaného kódu. Delegace jsou dostupné v jiných jazycích, např. v <a href="/wiki/Java_(programovac%C3%AD_jazyk)" title="Java (programovací jazyk)">Javě</a> nebo v <a href="/wiki/Objective-C" title="Objective-C">Objective-C</a>. </p><p>V C++11 lze místo výše uvedeného kódu definujícího jeden konstruktor s parametrem a druhý bez parametru napsat: </p> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="k">class</span><span class="w"> </span><span class="nc">SomeType</span> <span class="p">{</span> <span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">number</span><span class="p">;</span> <span class="k">public</span><span class="o">:</span> <span class="w"> </span><span class="n">SomeType</span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">new_number</span><span class="p">)</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="n">number</span><span class="p">(</span><span class="n">new_number</span><span class="p">)</span><span class="w"> </span><span class="p">{}</span> <span class="w"> </span><span class="n">SomeType</span><span class="p">()</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="n">SomeType</span><span class="p">(</span><span class="mi">42</span><span class="p">)</span><span class="w"> </span><span class="p">{}</span> <span class="p">};</span> </pre></div> <p>Stejného efektu by bylo možné dosáhnout tím, že by <code>new_number</code> bylo implicitním parametrem. Nová syntaxe však umožňuje, aby implicitní hodnota (42) byla vyjádřena v implementaci místo v rozhraní – což je výhodné pro údržbu knihoven, protože implicitní hodnoty funkčních parametrů jsou „zapečené“ v místech volání, zatímco delegování konstruktoru umožňuje změnit hodnotu bez nového překladu kódu používajícího knihovnu. </p><p>Delegace konstruktorů přináší určitý problém: zatímco v C++03 je na konci provádění libovolného konstruktoru objekt úplně vytvořen, v C++11 je objekt vytvořen, až když doběhnou <i>všechny</i> konstruktory. Protože je povoleno provádět více konstruktorů, každý delegující konstruktor bude pracovat na plně zkonstruovaném objektu pouze svého typu. Konstruktory odvozených tříd se budou provádět až po dokončení všech delegací v jejich základních třídách. </p><p>Pro konstruktory základních tříd umožňuje C++11 třídě určit, že konstruktory základní třída budou zděděny. Překladač C++11 tedy vygeneruje kód, který provede dědění a předání odvozené třídy základní třídě. Jde o přístup typu „všechno nebo nic“: buď budou předány všechny konstruktory dané základní třídy nebo žádný z nich. Také zděděný konstruktor bude <a href="/wiki/Rezoluce_jmen#Zastiňování_jmen" title="Rezoluce jmen">zastíněn</a>, pokud se shoduje se signaturou konstruktoru odvozené třídy, a existují omezení pro vícenásobnou dědičnost: konstruktory třídy nelze <a href="/wiki/V%C3%ADcen%C3%A1sobn%C3%A1_d%C4%9Bdi%C4%8Dnost" title="Vícenásobná dědičnost">dědit ze dvou tříd</a>, které používají konstruktory se stejnou signaturou. </p><p>Syntaxe je následující: </p> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="k">class</span><span class="w"> </span><span class="nc">BaseClass</span> <span class="p">{</span> <span class="k">public</span><span class="o">:</span> <span class="w"> </span><span class="n">BaseClass</span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">value</span><span class="p">);</span> <span class="p">};</span> <span class="k">class</span><span class="w"> </span><span class="nc">DerivedClass</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="k">public</span><span class="w"> </span><span class="n">BaseClass</span> <span class="p">{</span> <span class="k">public</span><span class="o">:</span> <span class="w"> </span><span class="k">using</span><span class="w"> </span><span class="n">BaseClass</span><span class="o">::</span><span class="n">BaseClass</span><span class="p">;</span> <span class="p">};</span> </pre></div> <p>C++11 dovoluje tuto syntaxi pro inicializaci členů: </p> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="k">class</span><span class="w"> </span><span class="nc">SomeClass</span> <span class="p">{</span> <span class="k">public</span><span class="o">:</span> <span class="w"> </span><span class="n">SomeClass</span><span class="p">()</span><span class="w"> </span><span class="p">{}</span> <span class="w"> </span><span class="k">explicit</span><span class="w"> </span><span class="n">SomeClass</span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">new_value</span><span class="p">)</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="n">value</span><span class="p">(</span><span class="n">new_value</span><span class="p">)</span><span class="w"> </span><span class="p">{}</span> <span class="k">private</span><span class="o">:</span> <span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">value</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">5</span><span class="p">;</span> <span class="p">};</span> </pre></div> <p>Libovolný konstruktor této třídy bude inicializovat <code>value</code> na 5, pokud konstruktor sám nepředefinuje inicializaci. Proto výše uvedený prázdný konstruktor bude inicializovat <code>value</code> jak uvádí definice třídy, ale konstruktor s parametrem typu <code>int</code> bude inicializovat <code>value</code> na hodnotu tohoto parametru. </p><p>Může také místo inicializace přiřazením uvedené výše použít konstruktor nebo uniformní inicializaci. </p> <div class="mw-heading mw-heading4"><h4 id="Explicitní_předefinování_a_final"><span id="Explicitn.C3.AD_p.C5.99edefinov.C3.A1n.C3.AD_a_final"></span>Explicitní předefinování a final</h4><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B11&amp;veaction=edit&amp;section=18" title="Editace sekce: Explicitní předefinování a final" class="mw-editsection-visualeditor"><span>editovat</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=C%2B%2B11&amp;action=edit&amp;section=18" title="Editovat zdrojový kód sekce Explicitní předefinování a final"><span>editovat zdroj</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>V C++03 může programátor omylem vytvořit novou virtuální funkci, když chtěl předefinovat funkci základní třídy. Například: </p> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="k">struct</span><span class="w"> </span><span class="nc">Base</span> <span class="p">{</span> <span class="w"> </span><span class="k">virtual</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">some_func</span><span class="p">(</span><span class="kt">float</span><span class="p">);</span> <span class="p">};</span> <span class="k">struct</span><span class="w"> </span><span class="nc">Derived</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="n">Base</span> <span class="p">{</span> <span class="w"> </span><span class="k">virtual</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">some_func</span><span class="p">(</span><span class="kt">int</span><span class="p">);</span> <span class="p">};</span> </pre></div> <p>Předpokládáme, že &lt;code Derived::some_func měla nahradit metodu základní třídy. Ale protože má jinou <a href="/w/index.php?title=Typov%C3%A1_signatura&amp;action=edit&amp;redlink=1" class="new" title="Typová signatura (stránka neexistuje)">signaturu</a>, vytvoří další virtuální funkci. To je častý problém, ke kterému dochází zvláště tehdy, když uživatel chce modifikovat základní třídu. </p><p>C++11 umožňuje tento problém řešit takto: </p> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="k">struct</span><span class="w"> </span><span class="nc">Base</span> <span class="p">{</span> <span class="w"> </span><span class="k">virtual</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">some_func</span><span class="p">(</span><span class="kt">float</span><span class="p">);</span> <span class="p">};</span> <span class="k">struct</span><span class="w"> </span><span class="nc">Derived</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="n">Base</span> <span class="p">{</span> <span class="w"> </span><span class="k">virtual</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">some_func</span><span class="p">(</span><span class="kt">int</span><span class="p">)</span><span class="w"> </span><span class="k">override</span><span class="p">;</span><span class="w"> </span><span class="c1">// chyba - nepředefinovává metodu základní třídy</span> <span class="p">};</span> </pre></div> <p>Speciální identifikátor <code>override</code> znamená, že překladač bude kontrolovat základní třídu nebo třídy, zda existuje virtuální funkce přesně s touto signaturou. A pokud neexistuje, překladač oznámí chybu. </p><p>C++11 také umožňuje zabránit dědění z třídy nebo jednoduše zabránit předefinování metody v odvozených třídách. K tomuto účelu slouží speciální identifikátor <code>final</code>. Například: </p> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="k">struct</span><span class="w"> </span><span class="nc">Base1</span><span class="w"> </span><span class="k">final</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="p">};</span> <span class="k">struct</span><span class="w"> </span><span class="nc">Derived1</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="n">Base1</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="p">};</span><span class="w"> </span><span class="c1">// chybné, protože třída Base1 byla označena jako final</span> </pre></div> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="k">struct</span><span class="w"> </span><span class="nc">Base2</span> <span class="p">{</span> <span class="w"> </span><span class="k">virtual</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">f</span><span class="p">()</span><span class="w"> </span><span class="k">final</span><span class="p">;</span> <span class="p">};</span> <span class="k">struct</span><span class="w"> </span><span class="nc">Derived2</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="n">Base2</span> <span class="p">{</span> <span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">f</span><span class="p">();</span><span class="w"> </span><span class="c1">// chybné, protože virtuální funkce Base2::f byla označena jako final</span> <span class="p">};</span> </pre></div> <p>V tomto příkladě příkaz <code>virtual void f() final;</code> deklaruje novou virtuální funkci, a zároveň brání tomu, aby ji odvozená třída předefinovala. Také způsobuje, že odvozené třídy nemohou používat funkce s tímto jménem a kombinací parametrů. </p><p>Ani <code>override</code> ani <code>final</code> nejsou klíčová slova. Technicky to jsou identifikátory atributů deklarátorů: </p> <ul><li>speciální význam jako atributy mají pouze v těchto specifických koncových kontextech (po všech specifikátorech typu, přístupu, deklaracích členů (typů struktura, třída nebo výčet) a specifikátorech deklarátorů, ale před inicializací nebo implementací kódu každého deklarátoru v seznamu deklarátorů oddělených čárkou);</li> <li>nemění deklarovanou typovou signaturu a nedeklarují ani nepředefinovávají žádný nový identifikátor v jakémkoli rozsahu platnosti;</li> <li>rozpoznané a přijaté atributy deklarátorů mohou být v budoucí verzi C++ rozšířeny (některá rozšíření pro konkrétní překladače již rozpoznávají další atributy deklarátorů pro volby generování kódu nebo optimalizační nápovědy pro překladač nebo pro generování dodatečných dat do přeloženého kódu, která jsou určena pro debuggery, linkery, a nasazení přeloženého kódu nebo pro poskytování přídavných atributů datové bezpečnosti specifických pro daný systém nebo pro zlepšení schopností <a href="/wiki/Reflexe_(programov%C3%A1n%C3%AD)" title="Reflexe (programování)">reflexí</a> v době běhu nebo pro poskytnutí dalších informací pro vázání pro interoperabilitu s jiný programovacími jazyky a běhovými systémy; tato rozšíření mohou využívat parametry zapsané v závorkách po identifikátoru atributu deklarátoru; aby tato rozšíření specifická pro určitý překladač vyhovovala normě ANSI, musí jejich jména začínat dvojitým podtržítkem).</li> <li>na libovolném jiném místě mohou být tyto identifikátory použity pro nové deklarace (a pozdější použití, pokud jsou dostupné).</li></ul> <div class="mw-heading mw-heading4"><h4 id="Konstanta_a_typ_nulového_ukazatele"><span id="Konstanta_a_typ_nulov.C3.A9ho_ukazatele"></span>Konstanta a typ nulového ukazatele</h4><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B11&amp;veaction=edit&amp;section=19" title="Editace sekce: Konstanta a typ nulového ukazatele" class="mw-editsection-visualeditor"><span>editovat</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=C%2B%2B11&amp;action=edit&amp;section=19" title="Editovat zdrojový kód sekce Konstanta a typ nulového ukazatele"><span>editovat zdroj</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>V této části každý výskyt <code>0</code> je míněn jako „konstantní výraz, který je typu int, a vyhodnotí se na hodnotu <code>0</code>“. Ve skutečnosti tento konstantní výraz může být libovolného celočíselného typu. </p><p>Od počátků jazyka C v roce 1972 měla konstanta <code><a href="/wiki/Nula" title="Nula">0</a></code> dvojí roli celého číslo a <a href="/wiki/Nulov%C3%BD_ukazatel" title="Nulový ukazatel">nulového ukazatele</a>. Nejednoznačnost spjatá s dvojím významem hodnoty <code>0</code> se v jazyce C řešila makrem preprocesoru <code>NULL</code>, které se obvykle expanduje buď na <code>((void*)0)</code> nebo na <code>0</code>. C++ zakazuje implicitní konverze hodnot typu <code>void *</code> na jiné typy ukazatelů, čímž odstraňuje výhodu změny typu <code>0</code> na <code>void *</code>. V důsledku toho je pouze <code>0</code> povolena jako konstanta nulového ukazatele. To jde špatně dohromady s <a href="/wiki/P%C5%99et%C4%9B%C5%BEov%C3%A1n%C3%AD" title="Přetěžování">přetěžováním</a>: </p> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="kt">void</span><span class="w"> </span><span class="nf">foo</span><span class="p">(</span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="p">);</span> <span class="kt">void</span><span class="w"> </span><span class="nf">foo</span><span class="p">(</span><span class="kt">int</span><span class="p">);</span> </pre></div> <p>Pokud <code>NULL</code> je definované jako <code>0</code> (což v C++ obvykle je), příkaz <code>foo(NULL);</code> vyvolá <code>foo(int)</code>, což je téměř určitě něco, co programátor nechtěl, a co naznačuje povrchní čtení kódu. </p><p>C++11 opravuje tento problém definováním nového klíčového slova <code>nullptr</code>, které slouží jako konstanta pro nulový ukazatel. Tato konstanta je typu <code>nullptr_t</code>, který lze implicitně zkonvertovat na libovolný typ ukazatele nebo ukazatele na člen, a porovnávat s libovolným ukazatelem. <code>nullptr</code> nelze implicitně zkonvertovat na celočíselný typ ani jej s celočíselnými typy porovnávat, kromě typu <code>bool</code>. Zatímco původní návrh uváděl, že rvalue typu <code>nullptr_t</code> nesmí být možné zkonvertovat na <code>bool</code>, pracovní skupina pro jádro jazyka rozhodla, že takové konverze jsou žádoucí pro konzistenci s normálními typy ukazatel. Navrhované změny znění byly v červnu 2008 jednomyslně odhlasovány do pracovního dokumentu.<sup class="reference plainlinks nourlexpansion" id="ref_n2697"><a class="external autonumber" href="https://cs.wikipedia.org/wiki/C%2B%2B11#endnote_n2697">[1]</a></sup><span title="Chyba v použití šablony!" class="error" style="font-weight:bold;display:none;">Je zde použita šablona <code>{&#x7b;<a href="/wiki/%C5%A0ablona:Ref" title="Šablona:Ref">Ref</a>}}</code> označená jako k „pouze dočasnému použití“.</span> Podobný návrh byl předložen také pracovní skupině pro normu jazyka C a byl přijat pro začlenění do <a href="/w/index.php?title=C23_(C_standardn%C3%AD_revize)&amp;action=edit&amp;redlink=1" class="new" title="C23 (C standardní revize) (stránka neexistuje)">normy C23</a>.<sup id="cite_ref-8" class="reference"><a href="#cite_note-8"><span class="cite-bracket">&#91;</span>8<span class="cite-bracket">&#93;</span></a></sup> </p><p>Kvůli zpětné kompatibilitě zůstává <code>0</code> platnou konstantou pro nulový ukazatel. </p> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">pc</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">nullptr</span><span class="p">;</span><span class="w"> </span><span class="c1">// OK</span> <span class="kt">int</span><span class="w"> </span><span class="o">*</span><span class="n">pi</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">nullptr</span><span class="p">;</span><span class="w"> </span><span class="c1">// OK</span> <span class="kt">bool</span><span class="w"> </span><span class="n">b</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">nullptr</span><span class="p">;</span><span class="w"> </span><span class="c1">// OK. b je nepravdivé.</span> <span class="kt">int</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">nullptr</span><span class="p">;</span><span class="w"> </span><span class="c1">// chyba</span> <span class="n">foo</span><span class="p">(</span><span class="k">nullptr</span><span class="p">);</span><span class="w"> </span><span class="c1">// volá foo(nullptr_t), ne foo(int);</span> <span class="cm">/*</span> <span class="cm"> Všimněte si, že foo(nullptr_t) skutečně volá foo(char *) ve výše uvedeném příkladě použitím implicitní konverze,</span> <span class="cm"> pouze pokud žádné jiné funkce nepřetěžují kompatibilní typy ukazatele v rozsahu platnosti.</span> <span class="cm"> Pokud existuje více přetížení, rezoluce selže kvůli nejednoznačnosti,</span> <span class="cm"> pokud neexistuje explicitní deklarace foo(nullptr_t).</span> <span class="cm"> V hlavičkových souborech pro standardní typy pro C++11 musí typ nullptr_t být deklarován jako:</span> <span class="cm"> typedef decltype(nullptr) nullptr_t;</span> <span class="cm"> ne jako:</span> <span class="cm"> typedef int nullptr_t; // předchozí verze C++, ve kterých musí být NULL být definováno jako 0</span> <span class="cm"> typedef void *nullptr_t; // ANSI C, které definuje NULL jako ((void*)0)</span> <span class="cm">* /</span> </pre></div> <div class="mw-heading mw-heading4"><h4 id="Silně_typované_výčtové_typy"><span id="Siln.C4.9B_typovan.C3.A9_v.C3.BD.C4.8Dtov.C3.A9_typy"></span>Silně typované výčtové typy</h4><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B11&amp;veaction=edit&amp;section=20" title="Editace sekce: Silně typované výčtové typy" class="mw-editsection-visualeditor"><span>editovat</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=C%2B%2B11&amp;action=edit&amp;section=20" title="Editovat zdrojový kód sekce Silně typované výčtové typy"><span>editovat zdroj</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>V C++03 nejsou výčtové typy typově bezpečné. Efektivně to jsou celá čísla, i když jsou výčtové typy různé. To umožňuje porovnávat výčtové hodnoty různých výčtových typů. Jedinou bezpečností, kterou C++03 poskytuje, je, že celá čísla nebo hodnoty jednoho výčtového typu se implicitně nekonvertují na jiný výčtový typ. Podkladové celočíselné typy jsou implementačně závislé; proto je kód, které závisí na velikosti výčtových typů, nepřenositelný. Rozsah platnosti výčtových hodnot je obklopující rozsah platnosti. Proto dva různé výčtové typy ve stejném rozsahu platnosti nemohou mít stejná jména hodnot. </p><p>C++11 umožňuje speciální klasifikaci výčtových typů bez výše uvedených problémů. Používá deklaraci pomocí <code>enum class</code> (lze používat i <code>enum struct</code>): </p> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="k">enum</span><span class="w"> </span><span class="k">class</span><span class="w"> </span><span class="nc">Enumeration</span> <span class="p">{</span> <span class="w"> </span><span class="n">Val1</span><span class="p">,</span> <span class="w"> </span><span class="n">Val2</span><span class="p">,</span> <span class="w"> </span><span class="n">Val3</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">100</span><span class="p">,</span> <span class="w"> </span><span class="n">Val4</span><span class="w"> </span><span class="c1">// = 101</span> <span class="p">};</span> </pre></div> <p>Tento výčtový typ je typově bezpečný. Hodnoty enum class se implicitně nekonvertují na celá čísla. Proto je nelze porovnávat s celými čísly (výraz <code>Enumeration::Val4 == 101</code> způsobí chybu při překladu). </p><p>Podkladový typ těchto výčtových tříd je vždy známý. Implicitní typ je <code>int</code>, ale může být předefinován na jiný celočíselný typ, jak je vidět v tomto příkladě: </p> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="k">enum</span><span class="w"> </span><span class="k">class</span><span class="w"> </span><span class="nc">Enum2</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="kt">unsigned</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="p">{</span><span class="n">Val1</span><span class="p">,</span><span class="w"> </span><span class="n">Val2</span><span class="p">};</span> </pre></div> <p>Výčtové hodnoty starých výčtových typů mají rozsah platnosti rovný obklopujícímu rozsahu platnosti. Výčtové hodnoty nových výčtových typů mají rozsah platnosti daný výčtovou třídou. Ve výše uvedeném příkladě <code>Val1</code> není definováno, ale <code>Enum2::Val1</code> ano. </p><p>Existuje také přechodová syntaxe umožňující výčtovým hodnotám starého stylu poskytovat explicitní používání rozsahů platnosti a definice podkladového typu: </p> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="k">enum</span><span class="w"> </span><span class="nc">Enum3</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="kt">unsigned</span><span class="w"> </span><span class="kt">long</span><span class="w"> </span><span class="p">{</span><span class="n">Val1</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="n">Val2</span><span class="p">};</span> </pre></div> <p>V tomto případě jsou výčtová jména definována s rozsahem platnosti výčtu (<code>Enum3::Val1</code>), ale pro zpětnou kompatibilitu jsou také umístěna v obklopujícím rozsahu platnosti. </p><p>V C++11 jsou také možné dopředné deklarace výčtových typů. Dříve výčtové typy nemohly být deklarovány dopředně, protože jejich velikost závisí na definici jejich členů. Pokud je velikost výčtového typu stanovena explicitně nebo implicitně, mohou být deklarovány dopředně: </p> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="k">enum</span><span class="w"> </span><span class="nc">Enum1</span><span class="p">;</span><span class="w"> </span><span class="c1">// Nepovolené ani v C++03 ani v C++11; podkladový typ nelze určit.</span> <span class="k">enum</span><span class="w"> </span><span class="nc">Enum2</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="kt">unsigned</span><span class="w"> </span><span class="kt">int</span><span class="p">;</span><span class="w"> </span><span class="c1">// Povolené v C++11, podkladový typ je zadán explicitně.</span> <span class="k">enum</span><span class="w"> </span><span class="k">class</span><span class="w"> </span><span class="nc">Enum3</span><span class="p">;</span><span class="w"> </span><span class="c1">// Povolené v C++11, podkladový typ je int.</span> <span class="k">enum</span><span class="w"> </span><span class="k">class</span><span class="w"> </span><span class="nc">Enum4</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="kt">unsigned</span><span class="w"> </span><span class="kt">int</span><span class="p">;</span><span class="w"> </span><span class="c1">// Povolené v C++11.</span> <span class="k">enum</span><span class="w"> </span><span class="nc">Enum2</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="kt">unsigned</span><span class="w"> </span><span class="kt">short</span><span class="p">;</span><span class="w"> </span><span class="c1">// V C++11 nepovolené, protože Enum2 byl dříve deklarován s odlišným podkladovým typem.</span> </pre></div> <div class="mw-heading mw-heading4"><h4 id="Pravá_lomená_závorka"><span id="Prav.C3.A1_lomen.C3.A1_z.C3.A1vorka"></span>Pravá lomená závorka</h4><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B11&amp;veaction=edit&amp;section=21" title="Editace sekce: Pravá lomená závorka" class="mw-editsection-visualeditor"><span>editovat</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=C%2B%2B11&amp;action=edit&amp;section=21" title="Editovat zdrojový kód sekce Pravá lomená závorka"><span>editovat zdroj</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Syntaktický analyzátor C++03 definuje <code>&gt;&gt;</code> vždy jako operátor posunu doprava nebo jako operátor načtení z proudu. S vnořenými deklaracemi šablon se však objevují sklony programátorů vynechávat mezery mezi dvojitými lomenými závorkami, což způsobí syntaktickou chybu. </p><p>C++11 vylepšuje specifikaci analyzátoru, takže tam, kde to má význam, bude několik pravých lomených závorek interpretováno jako uzavření seznamu argumentů šablony. Toto chování lze předefinovat pomocí závorek okolo výrazů v parametrech s použitím binárních operátorů <code>&gt;</code>, <code>&gt;=</code> nebo <code>&gt;&gt;</code>: </p> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="k">template</span><span class="o">&lt;</span><span class="n">boolTest</span><span class="o">&gt;</span><span class="w"> </span><span class="n">třída</span><span class="w"> </span><span class="n">SomeType</span><span class="p">;</span> <span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o">&lt;</span><span class="n">sometype</span><span class="o">&lt;</span><span class="mi">1</span><span class="o">&gt;</span><span class="mi">2</span><span class="o">&gt;&gt;</span><span class="w"> </span><span class="n">x1</span><span class="p">;</span><span class="w"> </span><span class="c1">// Interpretováno jako std::vector položek typu SomeType&lt;true&gt;,</span> <span class="w"> </span><span class="c1">// za čímž je „2 &gt;&gt; x1“, což není syntakticky správný deklarátor. 1 je pravdivé.</span> <span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o">&lt;</span><span class="n">sometype</span><span class="o">&lt;</span><span class="p">(</span><span class="mi">1</span><span class="o">&gt;</span><span class="mi">2</span><span class="p">)</span><span class="o">&gt;&gt;</span><span class="w"> </span><span class="n">x1</span><span class="p">;</span><span class="w"> </span><span class="c1">// Interpretováno jako std::vector pro SomeType&lt;false&gt;,</span> <span class="w"> </span><span class="c1">// následovaný deklarátorem „x1“, což je v C++11 syntakticky správně. (1&gt;2) je nepravdivé.</span> </pre></div> <div class="mw-heading mw-heading4"><h4 id="Explicitní_operátory_konverze"><span id="Explicitn.C3.AD_oper.C3.A1tory_konverze"></span>Explicitní operátory konverze</h4><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B11&amp;veaction=edit&amp;section=22" title="Editace sekce: Explicitní operátory konverze" class="mw-editsection-visualeditor"><span>editovat</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=C%2B%2B11&amp;action=edit&amp;section=22" title="Editovat zdrojový kód sekce Explicitní operátory konverze"><span>editovat zdroj</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Od C++98 lze používat klíčové slovo <code>explicit</code> jako modifikátor konstruktorů, aby se zabránilo použití konstruktorů s jedním argumentem jako implicitním operátorům konverze typu. Pro skutečné konverzní operátory to však nic neznamená. Například třída smart pointery může mít <code>operator bool()</code>, který umožní, aby se chovala více jako primitivní ukazatele: pokud obsahuje tuto konverzi, lze ji testovat pomocí s <code>if (smart_ptr_variable)</code> (což je pravdivé,, pokud ukazatel je nenulový a nepravdivé jinak). To však umožňuje i jiné, nežádoucí konverze. Protože v C++ je typ <code>bool</code> definován jako aritmetický typ, lze je implicitně konvertovat na celočíselné typy nebo dokonce typy s pohyblivou řádovou čárkou, což umožňuje matematické operace, které uživatel nezamýšlel. </p><p>V C++11 lze klíčové slovo <code>explicit</code> použít i na konverzní operátory. Stejně jako v případě konstruktorů zabrání použití těchto konverzních funkcí při implicitních konverzích. Nicméně jazykové kontexty, které specificky potřebují logickou hodnotu (podmínky if-příkazů a smyček, a operandy logických operátorů), se počítají jako explicitní konverze, a mohou tedy použít konverzní operátor <code>bool</code>. </p><p>Čisté řešení problému bezpečného bool je popsáno na anglických <a href="https://en.wikibooks.org/wiki/More_C%2B%2B_Idioms/Safe_bool" class="extiw" title="wikibooks:More C++ Idioms/Safe bool">Wikibooks</a>. </p> <div class="mw-heading mw-heading4"><h4 id="Šablonové_aliasy"><span id=".C5.A0ablonov.C3.A9_aliasy"></span>Šablonové aliasy</h4><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B11&amp;veaction=edit&amp;section=23" title="Editace sekce: Šablonové aliasy" class="mw-editsection-visualeditor"><span>editovat</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=C%2B%2B11&amp;action=edit&amp;section=23" title="Editovat zdrojový kód sekce Šablonové aliasy"><span>editovat zdroj</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Typ definovaný pomocí <code>typedef</code> může být pouze přezdívkou (synonymem) pro jiný typ, včetně synonym pro specializaci šablon se zadanými všemi skutečnými argumenty šablony. Nové šablony pomocí <code>typedef</code> vytvářet nelze: </p> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="k">template</span><span class="w"> </span><span class="o">&lt;</span><span class="k">typename</span><span class="w"> </span><span class="nc">First</span><span class="p">,</span><span class="w"> </span><span class="k">typename</span><span class="w"> </span><span class="nc">Second</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">Third</span><span class="o">&gt;</span> <span class="k">class</span><span class="w"> </span><span class="nc">SomeType</span><span class="p">;</span> <span class="k">template</span><span class="w"> </span><span class="o">&lt;</span><span class="k">typename</span><span class="w"> </span><span class="nc">Second</span><span class="o">&gt;</span> <span class="k">typedef</span><span class="w"> </span><span class="n">SomeType</span><span class="o">&lt;</span><span class="n">othertype</span><span class="p">,</span><span class="w"> </span><span class="n">Second</span><span class="p">,</span><span class="w"> </span><span class="mi">5</span><span class="o">&gt;</span><span class="w"> </span><span class="n">TypedefName</span><span class="p">;</span><span class="w"> </span><span class="c1">// Chyba!</span> </pre></div> <p>Tuto konstrukci nelze přeložit. V C++11 je však možné použít šablonový alias: </p> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="k">template</span><span class="w"> </span><span class="o">&lt;</span><span class="k">typename</span><span class="w"> </span><span class="nc">First</span><span class="p">,</span><span class="w"> </span><span class="k">typename</span><span class="w"> </span><span class="nc">Second</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">Third</span><span class="o">&gt;</span> <span class="k">class</span><span class="w"> </span><span class="nc">SomeType</span><span class="p">;</span> <span class="k">template</span><span class="w"> </span><span class="o">&lt;</span><span class="k">typename</span><span class="w"> </span><span class="nc">Second</span><span class="o">&gt;</span> <span class="k">using</span><span class="w"> </span><span class="n">TypedefName</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">SomeType</span><span class="o">&lt;</span><span class="n">othertype</span><span class="p">,</span><span class="w"> </span><span class="n">Second</span><span class="p">,</span><span class="w"> </span><span class="mi">5</span><span class="o">&gt;</span><span class="p">;</span> </pre></div> <p>Klíčové slovo <code>using</code> lze v C++11 také použít pro typový aliasing: </p> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="k">typedef</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="p">(</span><span class="o">*</span><span class="n">FunctionType</span><span class="p">)(</span><span class="kt">double</span><span class="p">);</span><span class="w"> </span><span class="c1">// Starý styl</span> <span class="k">using</span><span class="w"> </span><span class="n">FunctionType</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="p">(</span><span class="o">*</span><span class="p">)(</span><span class="kt">double</span><span class="p">);</span><span class="w"> </span><span class="c1">// Nově zavedená syntaxe</span> </pre></div> <div class="mw-heading mw-heading4"><h4 id="Neomezené_uniony"><span id="Neomezen.C3.A9_uniony"></span>Neomezené uniony</h4><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B11&amp;veaction=edit&amp;section=24" title="Editace sekce: Neomezené uniony" class="mw-editsection-visualeditor"><span>editovat</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=C%2B%2B11&amp;action=edit&amp;section=24" title="Editovat zdrojový kód sekce Neomezené uniony"><span>editovat zdroj</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>V C++03 existují omezení, jaké typy objektů mohou být členy unionů; union například nemůže obsahovat žádný objekt, který definuje netriviální konstruktor nebo destruktor. C++11 některá z těchto omezení odstraňuje.<sup class="reference plainlinks nourlexpansion" id="ref_n2544"><a class="external autonumber" href="https://cs.wikipedia.org/wiki/C%2B%2B11#endnote_n2544">[2]</a></sup><span title="Chyba v použití šablony!" class="error" style="font-weight:bold;display:none;">Je zde použita šablona <code>{&#x7b;<a href="/wiki/%C5%A0ablona:Ref" title="Šablona:Ref">Ref</a>}}</code> označená jako k „pouze dočasnému použití“.</span> </p><p>Pokud má člen unionu netriviální <a href="/w/index.php?title=Speci%C3%A1ln%C3%AD_%C4%8Dlensk%C3%A1_funkc%C3%AD&amp;action=edit&amp;redlink=1" class="new" title="Speciální členská funkcí (stránka neexistuje)">speciální členskou funkci</a>, překladač nebude generovat ekvivalentní členskou funkci pro union, ale taková funkce musí být definována ručně. </p><p>Jednoduchý příklad použití unionu v C++11: </p> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="cp">#include</span><span class="w"> </span><span class="cpf">&lt;new&gt;</span><span class="c1"> // Pro operátor &#39;new&#39;.</span> <span class="k">struct</span><span class="w"> </span><span class="nc">Bod</span> <span class="p">{</span> <span class="w"> </span><span class="n">Bod</span><span class="p">()</span><span class="w"> </span><span class="p">{}</span> <span class="w"> </span><span class="n">Bod</span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">x</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">y</span><span class="p">)</span><span class="o">:</span><span class="w"> </span><span class="n">x_</span><span class="p">(</span><span class="n">x</span><span class="p">),</span><span class="w"> </span><span class="n">y_</span><span class="p">(</span><span class="n">y</span><span class="p">)</span><span class="w"> </span><span class="p">{}</span> <span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">x_</span><span class="p">,</span><span class="w"> </span><span class="n">y_</span><span class="p">;</span> <span class="p">};</span> <span class="k">union</span><span class="w"> </span><span class="nc">U</span> <span class="p">{</span> <span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">z</span><span class="p">;</span> <span class="w"> </span><span class="kt">double</span><span class="w"> </span><span class="n">w</span><span class="p">;</span> <span class="w"> </span><span class="n">Bod</span><span class="w"> </span><span class="n">b</span><span class="p">;</span><span class="w"> </span><span class="c1">// Chyba C++03; povoleno v C++11.</span> <span class="w"> </span><span class="n">U</span><span class="p">()</span><span class="w"> </span><span class="p">{}</span><span class="w"> </span><span class="c1">// Kvůli členu Bod je nutné konstruktor explicitně definovat.</span> <span class="w"> </span><span class="n">U</span><span class="p">(</span><span class="k">const</span><span class="w"> </span><span class="n">Bod</span><span class="o">&amp;</span><span class="w"> </span><span class="n">pt</span><span class="p">)</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="n">b</span><span class="p">(</span><span class="n">pt</span><span class="p">)</span><span class="w"> </span><span class="p">{}</span><span class="w"> </span><span class="c1">// Vytvoří objekt Bod pomocí seznamu inicializátorů.</span> <span class="w"> </span><span class="n">U</span><span class="o">&amp;</span><span class="w"> </span><span class="k">operator</span><span class="o">=</span><span class="p">(</span><span class="k">const</span><span class="w"> </span><span class="n">Bod</span><span class="o">&amp;</span><span class="w"> </span><span class="n">pt</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="k">new</span><span class="p">(</span><span class="o">&amp;</span><span class="n">p</span><span class="p">)</span><span class="w"> </span><span class="n">Bod</span><span class="p">(</span><span class="n">pt</span><span class="p">);</span><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="o">*</span><span class="k">this</span><span class="p">;</span><span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="c1">// Přiřadí objekt Bod použitím &#39;new&#39;.</span> <span class="p">};</span> </pre></div> <p>Změny neovlivní existující kód, protože pouze uvolňují původní pravidla. </p> <div class="mw-heading mw-heading3"><h3 id="Vylepšení_funkčnosti_jádra_jazyka"><span id="Vylep.C5.A1en.C3.AD_funk.C4.8Dnosti_j.C3.A1dra_jazyka"></span>Vylepšení funkčnosti jádra jazyka</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B11&amp;veaction=edit&amp;section=25" title="Editace sekce: Vylepšení funkčnosti jádra jazyka" class="mw-editsection-visualeditor"><span>editovat</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=C%2B%2B11&amp;action=edit&amp;section=25" title="Editovat zdrojový kód sekce Vylepšení funkčnosti jádra jazyka"><span>editovat zdroj</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Tyto vlastnosti umožňují dělat věci, které byly dříve nemožné, jejich zápis byl příliš složitý nebo vyžadovaly nepřenositelné knihovny. </p> <div class="mw-heading mw-heading4"><h4 id="Variadické_šablony"><span id="Variadick.C3.A9_.C5.A1ablony"></span>Variadické šablony</h4><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B11&amp;veaction=edit&amp;section=26" title="Editace sekce: Variadické šablony" class="mw-editsection-visualeditor"><span>editovat</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=C%2B%2B11&amp;action=edit&amp;section=26" title="Editovat zdrojový kód sekce Variadické šablony"><span>editovat zdroj</span></a><span class="mw-editsection-bracket">]</span></span></div> <div class="uvodni-upozorneni hatnote"> Podrobnější informace naleznete v článku&#32;<a href="/w/index.php?title=Variadick%C3%A1_%C5%A1ablona&amp;action=edit&amp;redlink=1" class="new" title="Variadická šablona (stránka neexistuje)">Variadická šablona</a>.</div> <p>V C++11 mohou mít šablony proměnný počet parametrů, což mj. umožňuje definovat typově bezpečné <a href="/w/index.php?title=Variadick%C3%A1_funkce&amp;action=edit&amp;redlink=1" class="new" title="Variadická funkce (stránka neexistuje)">variadické funkce</a>. </p> <div class="mw-heading mw-heading4"><h4 id="Nové_řetězcové_literály"><span id="Nov.C3.A9_.C5.99et.C4.9Bzcov.C3.A9_liter.C3.A1ly"></span>Nové řetězcové literály</h4><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B11&amp;veaction=edit&amp;section=27" title="Editace sekce: Nové řetězcové literály" class="mw-editsection-visualeditor"><span>editovat</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=C%2B%2B11&amp;action=edit&amp;section=27" title="Editovat zdrojový kód sekce Nové řetězcové literály"><span>editovat zdroj</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Možnosti <a href="/w/index.php?title=%C5%98et%C4%9Bzcov%C3%BD_liter%C3%A1l&amp;action=edit&amp;redlink=1" class="new" title="Řetězcový literál (stránka neexistuje)">řetězcových literálů</a> v C++03 byly značně omezené; kromě řetězců dostupných v jazyce C zapisovaných v uvozovkách, které vytvářejí pole typu <code>const char</code> zakončená znakem s kódem nula, poskytuje pouze řetězce vytvářející pole typu <code>const wchar_t</code> také zakončené znakem s kódem nula; tyto řetězce širokých znaků se zapisují pomocí <code>L""</code>. <code>wchar_t</code> je široký znak nedefinované velikosti a sémantiky. Žádný z těchto literálů nenabízí podporu řetězcových literálů v <a href="/wiki/UTF-8" title="UTF-8">UTF-8</a>, <a href="/wiki/UTF-16" title="UTF-16">UTF-16</a> nebo jiném <a href="/w/index.php?title=Porovn%C3%A1n%C3%AD_Unicode_k%C3%B3dov%C3%A1n%C3%AD&amp;action=edit&amp;redlink=1" class="new" title="Porovnání Unicode kódování (stránka neexistuje)">kódování</a> <a href="/wiki/Unicode" title="Unicode">Unicode</a>. </p><p>C++11 podporuje tři kódování Unicode: UTF-8, UTF-16 a <a href="/wiki/UTF-32" title="UTF-32">UTF-32</a>. Do definice typu <code>char</code> byla doplněno, že jeho velikost je minimálně taková, aby umožňovala ukládání osmibitového kódování UTF-8, a dostatečně velká, aby obsahovala všechny znaky základní znakové sady překladače. Původní norma C++ obsahovalo pouze druhou podmínku, u první se spoléhalo na normu jazyka C, která zaručuje velikost alespoň 8 bitů. C++11 navíc přidává dva nové znakové typy: <code>char16_t</code> pro UTF-16 a <code>char32_t</code> pro UTF-32. </p><p>Řetězcové literály pro uvedená kódování se píší takto: </p> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="sa">u8</span><span class="s">&quot;Toto je UTF-8 řetězec.&quot;</span> <span class="sa">u</span><span class="s">&quot;Toto je UTF-16 řetězec.&quot;</span> <span class="sa">U</span><span class="s">&quot;Toto je UTF-32 řetězec.&quot;</span> </pre></div> <p>Typ prvního řetězec je obvyklý <code>const char[]</code>. Typ druhého řetězce je <code>const char16_t[]</code> (předpona je malé 'u'). Typ třetího řetězce je <code>const char32_t[]</code> (předpona je velké 'U'). </p><p>Do řetězcových literálů v Unicode lze v C++11 snadno vkládat kódové body Unicode: </p> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="sa">u8</span><span class="s">&quot;Toto je znak Unicode: </span><span class="se">\u2018</span><span class="s">.&quot;</span> <span class="sa">u</span><span class="s">&quot;Toto je větší znak Unicode: </span><span class="se">\u2018</span><span class="s">.&quot;</span> <span class="sa">U</span><span class="s">&quot;Toto je znak Unicode: </span><span class="se">\U00002018</span><span class="s">.&quot;</span> </pre></div> <p>Číslo za <code>\u</code> je v šestnáctkově soustavě, a na rozdíl od celočíselných konstant neobsahuje předponu <code>0x</code>. Identifikátor <code>\u</code> reprezentuje 16bitový kódový bod Unicode; pro vložení 32bitového kódového bodu slouží <code>\U</code> následované 32bitovým šestnáctkovým číslem. Těmito zápisy lze zadávat pouze platné kódové body Unicode; jsou zakázané např. kódové body z rozsahu U+D800–U+DFFF, které jsou rezervované pro náhradní páry v kódování UTF-16. </p><p><br /> C++11 zavádí tzv. syrové řetězcové literály, ve kterých se před znaky uvozovky <code>"</code> a obrácené lomítko <code>\</code> nepíší obrácena lomítka, čímž lze zpřehlednit zápis literálů pro soubory <a href="/wiki/Extensible_Markup_Language" title="Extensible Markup Language">XML</a>, skriptovací jazyky nebo regulární výrazy. Existují 2 formy zápisu, v obou literál začíná znakem R: </p> <pre>R"(Řetězcová obsahující \ a " )" R"sep(Řetězcová obsahující \ a " )sep" </pre> <p>V prvním případě patří do řetězce vše mezi <code>"(</code> a <code>)"</code>. Znaky <code>"</code> a <code>\</code> nejsou escapovány. Ve druhém případě začíná řetězec <code>"sep(</code>, a končí <code>)sep"</code>. <code>sep</code> je posloupnost nejvýše 16 znaků, kterými nesmí být mezery, řídicí znaky, a znaky <code>(</code>, <code>)</code> nebo <code>\</code>. Zápis <code>R"oddel("(a-z)")oddel"</code> je ekvivalentní s <code>"\"(a-z)\""</code>. </p><p>Syrové řetězcové literály lze používat i pro řetězce Unicode nebo širokých znaků: </p> <pre>u8R"XXX(Toto je "syrový UTF-8" řetězec.)XXX" uR"*(Toto je "syrový UTF-16" řetězec.)*" UR"(Toto je "syrový UTF-32" řetězec.)" </pre> <div class="mw-heading mw-heading4"><h4 id="Uživatelem_definované_literály"><span id="U.C5.BEivatelem_definovan.C3.A9_liter.C3.A1ly"></span>Uživatelem definované literály</h4><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B11&amp;veaction=edit&amp;section=28" title="Editace sekce: Uživatelem definované literály" class="mw-editsection-visualeditor"><span>editovat</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=C%2B%2B11&amp;action=edit&amp;section=28" title="Editovat zdrojový kód sekce Uživatelem definované literály"><span>editovat zdroj</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>C++03 poskytuje různé literály. Zápis <code>12.5</code> je literál, který je vyhodnocen překladačem jako typ <code>double</code> s hodnotou 12,5. Přidáním sufixu <code>f</code> v <code>12.5f</code> dává hodnotu 12,5 typu <code>float</code>. Sufixové modifikátory literálů jsou opraveny podle C++ specifikace, a kód v C++03 nemůže vytvářet nové modifikátory literálů. </p><p>C++11 naproti tomu umožňuje uživateli definovat nové druhy modifikátorů literálů, které budou vytvářet objekty vycházející z řetězce znaků, které literál mění. </p><p>Transformace literálů je předefinována ve dvou různých fázích: syrové a vařené. Syrový literál je posloupnost znaků určitého typu, zatímco vařený literál má zvláštní typ. Literál <code>1234</code> v C++ je, protože jde o syrový literál, posloupností znaků <code>'1'</code>, <code>'2'</code>, <code>'3'</code>, <code>'4'</code>. Jako vařený literál, je to celé číslo 1234. C++ literál <code>0xA</code> je v syrovém tvaru <code>'0'</code>, <code>'x'</code>, <code>'A'</code>, zatímco ve vařeném tvaru je to celé číslo 10. </p><p>Literály mohou být rozšířeny v syrové i vařené formě, s výjimkou řetězcových literálů, které lze zpracovávat pouze ve vařené formě. Toto výjimka je způsobena faktem, že řetězce mají předpony, které ovlivňují určitý význam a typ příslušných znaků. </p><p>Všechny uživatelem definované literály se rozlišují příponami; definování předpon literálů není možné. Všechny přípony začínající libovolným znakem kromě podtržítka (<code>_</code>) jsou podle normy rezervované. Proto všechny uživatelem definované literály musí mít přípony začínající podtržítkem (<code>_</code>).<sup id="cite_ref-9" class="reference"><a href="#cite_note-9"><span class="cite-bracket">&#91;</span>9<span class="cite-bracket">&#93;</span></a></sup> </p><p>Jak mají být uživatelem definované literály zpracovány, se definuje operátorem literálu, zapisovaným <code>operator ""</code>. Příklad: </p> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="n">OutputType</span><span class="w"> </span><span class="k">operator</span><span class="w"> </span><span class="s">&quot;&quot;</span><span class="w"> </span><span class="n">_mysuffix</span><span class="p">(</span><span class="k">const</span><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">literal_string</span><span class="p">)</span> <span class="p">{</span> <span class="w"> </span><span class="c1">// předpokládá, že OutputType má konstruktor, který bere parametr const char *</span> <span class="w"> </span><span class="n">OutputType</span><span class="w"> </span><span class="nf">ret</span><span class="p">(</span><span class="n">literal_string</span><span class="p">);</span> <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">ret</span><span class="p">;</span> <span class="p">}</span> <span class="n">OutputType</span><span class="w"> </span><span class="n">some_variable</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1234</span><span class="n">_mysuffix</span><span class="p">;</span> <span class="c1">// předpokládá, že OutputType má metodu get_value(), která vrací double</span> <span class="n">assert</span><span class="p">(</span><span class="n">some_variable</span><span class="p">.</span><span class="n">get_value</span><span class="p">()</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mf">1234.0</span><span class="p">)</span> </pre></div> <p>Přiřazovací příkaz <code>OutputType some_variable = 1234_mysuffix;</code> provede kód definovaný uživatelem definovanou literálovou funkcí. Této funkci se předává parametr <code>"1234"</code> ve formě řetězce ve stylu jazyka C, tj. zakončeného znakem s kódem nula. </p><p>Druhý možný mechanismus pro zpracování celočíselných syrových literálů a syrových literálů s pohyblivou řádovou čárkou používá <a href="/w/index.php?title=Variadick%C3%A1_%C5%A1ablona&amp;action=edit&amp;redlink=1" class="new" title="Variadická šablona (stránka neexistuje)">variadické šablony</a>: </p> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="k">template</span><span class="o">&lt;</span><span class="kt">char</span><span class="p">...</span><span class="o">&gt;</span><span class="w"> </span><span class="n">OutputType</span><span class="w"> </span><span class="k">operator</span><span class="w"> </span><span class="s">&quot;&quot;</span><span class="w"> </span><span class="n">_tuffix</span><span class="p">();</span> <span class="n">OutputType</span><span class="w"> </span><span class="n">some_variable</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1234</span><span class="n">_tuffix</span><span class="p">;</span> <span class="n">OutputType</span><span class="w"> </span><span class="n">another_variable</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mf">2.17</span><span class="n">_tuffix</span><span class="p">;</span> </pre></div> <p>Toto instanciuje funkce na zpracování literálů, jako <code>operator "" _tuffix&lt;'1', '2', '3', '4'&gt;()</code>. V tomto tvaru není řetězec ukončen znakem s kódem nula. Hlavním účelem je umožnění použití klíčového slova <code>constexpr</code> v C++11 pro zajištění, že překladač bude transformovat literál v době překladu, předpokládá <code>OutputType</code> lze zkonstruovat pomocí constexpr a jde o kopírovatelný typ, a funkce na zpracování literálu je <code>constexpr</code> funkce. </p><p>Pro numerické literály je typ vařeného literálu buď <code>unsigned long long</code> pro celočíselné literály nebo <code>long double</code> pro literály s pohyblivou řádovou čárkou. (Poznámka: Nejsou třeba žádné celočíselné typy se znaménkem, protože literály se znaménkem jsou analyzovány jako výrazy, v nichž je znaménko prefixovým operátorem následovaným číslem bez znaménka.) Neexistuje žádná alternativní forma šablony: </p> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="n">OutputType</span><span class="w"> </span><span class="k">operator</span><span class="w"> </span><span class="s">&quot;&quot;</span><span class="w"> </span><span class="n">_suffix</span><span class="p">(</span><span class="kt">unsigned</span><span class="w"> </span><span class="kt">long</span><span class="w"> </span><span class="kt">long</span><span class="p">);</span> <span class="n">OutputType</span><span class="w"> </span><span class="k">operator</span><span class="w"> </span><span class="s">&quot;&quot;</span><span class="w"> </span><span class="n">_suffix</span><span class="p">(</span><span class="kt">long</span><span class="w"> </span><span class="kt">double</span><span class="p">);</span> <span class="n">OutputType</span><span class="w"> </span><span class="n">some_variable</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1234</span><span class="n">_suffix</span><span class="p">;</span><span class="w"> </span><span class="c1">// Používá přetížení &#39;unsigned long long&#39;.</span> <span class="n">OutputType</span><span class="w"> </span><span class="n">another_variable</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mf">3.1416</span><span class="n">_suffix</span><span class="p">;</span><span class="w"> </span><span class="c1">// Používá přetížení &#39;long double&#39;.</span> </pre></div> <p>V souladu s dříve zmíněnými novými předponami řetězců pro řetězcové literály lze použít: </p> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="n">OutputType</span><span class="w"> </span><span class="k">operator</span><span class="w"> </span><span class="s">&quot;&quot;</span><span class="w"> </span><span class="n">_ssuffix</span><span class="p">(</span><span class="k">const</span><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">string_values</span><span class="p">,</span><span class="w"> </span><span class="kt">size_t</span><span class="w"> </span><span class="n">num_chars</span><span class="p">);</span> <span class="n">OutputType</span><span class="w"> </span><span class="k">operator</span><span class="w"> </span><span class="s">&quot;&quot;</span><span class="w"> </span><span class="n">_ssuffix</span><span class="p">(</span><span class="k">const</span><span class="w"> </span><span class="kt">wchar_t</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">string_values</span><span class="p">,</span><span class="w"> </span><span class="kt">size_t</span><span class="w"> </span><span class="n">num_chars</span><span class="p">);</span> <span class="n">OutputType</span><span class="w"> </span><span class="k">operator</span><span class="w"> </span><span class="s">&quot;&quot;</span><span class="w"> </span><span class="n">_ssuffix</span><span class="p">(</span><span class="k">const</span><span class="w"> </span><span class="kt">char16_t</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">string_values</span><span class="p">,</span><span class="w"> </span><span class="kt">size_t</span><span class="w"> </span><span class="n">num_chars</span><span class="p">);</span> <span class="n">OutputType</span><span class="w"> </span><span class="k">operator</span><span class="w"> </span><span class="s">&quot;&quot;</span><span class="w"> </span><span class="n">_ssuffix</span><span class="p">(</span><span class="k">const</span><span class="w"> </span><span class="kt">char32_t</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">string_values</span><span class="p">,</span><span class="w"> </span><span class="kt">size_t</span><span class="w"> </span><span class="n">num_chars</span><span class="p">);</span> <span class="n">OutputType</span><span class="w"> </span><span class="n">some_variable</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">&quot;1234&quot;</span><span class="n">_ssuffix</span><span class="p">;</span><span class="w"> </span><span class="c1">// Používá přetížení &#39;const char *&#39;.</span> <span class="n">OutputType</span><span class="w"> </span><span class="n">some_variable</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="sa">u8</span><span class="s">&quot;1234&quot;</span><span class="n">_ssuffix</span><span class="p">;</span><span class="w"> </span><span class="c1">// Používá přetížení &#39;const char *&#39;.</span> <span class="n">OutputType</span><span class="w"> </span><span class="n">some_variable</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="sa">L</span><span class="s">&quot;1234&quot;</span><span class="n">_ssuffix</span><span class="p">;</span><span class="w"> </span><span class="c1">// Používá přetížení &#39;const wchar_t *&#39;.</span> <span class="n">OutputType</span><span class="w"> </span><span class="n">some_variable</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="sa">u</span><span class="s">&quot;1234&quot;</span><span class="n">_ssuffix</span><span class="p">;</span><span class="w"> </span><span class="c1">// Používá přetížení &#39;const char16_t *&#39;.</span> <span class="n">OutputType</span><span class="w"> </span><span class="n">some_variable</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="sa">U</span><span class="s">&quot;1234&quot;</span><span class="n">_ssuffix</span><span class="p">;</span><span class="w"> </span><span class="c1">// Používá přetížení &#39;const char32_t *&#39;.</span> </pre></div> <p>Neexistuje žádná alternativní forma šablony. Znakové literály jsou definovány podobně. </p> <div class="mw-heading mw-heading4"><h4 id="Paměťový_model_pro_multithreading"><span id="Pam.C4.9B.C5.A5ov.C3.BD_model_pro_multithreading"></span>Paměťový model pro multithreading</h4><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B11&amp;veaction=edit&amp;section=29" title="Editace sekce: Paměťový model pro multithreading" class="mw-editsection-visualeditor"><span>editovat</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=C%2B%2B11&amp;action=edit&amp;section=29" title="Editovat zdrojový kód sekce Paměťový model pro multithreading"><span>editovat zdroj</span></a><span class="mw-editsection-bracket">]</span></span></div> <div class="uvodni-upozorneni hatnote">Související informace naleznete také v&#160;článku&#32;<a href="/w/index.php?title=Memory_model_(computing)&amp;action=edit&amp;redlink=1" class="new" title="Memory model (computing) (stránka neexistuje)">Memory model (computing)</a>.</div> <p>C++11 standardizuje podporu <a href="/wiki/Vl%C3%A1kno_(informatika)" title="Vlákno (informatika)">vláken</a>. </p><p>Tato podpora má dvě složky: paměťový model, který umožňuje koexistenci několika vláken v programu a knihovna podpora pro interakce mezi vlákna. (Viz sekce <a href="#Nástroje_pro_threading">Nástroje pro threading</a>.) </p><p>Paměťový model definuje, když několik vlákna mohou přístup stejný paměťový umístění, a udává, když aktualizuje jedním vlákno se stane viditelný na jiný vlákna. </p> <div class="mw-heading mw-heading4"><h4 id="Vláknové_lokální_úložiště"><span id="Vl.C3.A1knov.C3.A9_lok.C3.A1ln.C3.AD_.C3.BAlo.C5.BEi.C5.A1t.C4.9B"></span>Vláknové lokální úložiště</h4><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B11&amp;veaction=edit&amp;section=30" title="Editace sekce: Vláknové lokální úložiště" class="mw-editsection-visualeditor"><span>editovat</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=C%2B%2B11&amp;action=edit&amp;section=30" title="Editovat zdrojový kód sekce Vláknové lokální úložiště"><span>editovat zdroj</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Ve vícevláknovém prostředí je běžné, že každé vlákno má některé jedinečné <a href="/wiki/Prom%C4%9Bnn%C3%A1_(programov%C3%A1n%C3%AD)" title="Proměnná (programování)">proměnné</a>. To se děje pro lokální proměnné funkce, ale neděje se to pro globální a statické proměnné. </p><p><a href="/w/index.php?title=Vl%C3%A1knov%C3%A9_lok%C3%A1ln%C3%AD_%C3%BAlo%C5%BEi%C5%A1t%C4%9B&amp;action=edit&amp;redlink=1" class="new" title="Vláknové lokální úložiště (stránka neexistuje)">Vláknové lokální úložiště</a> s novým trváním (vedle existujících trvání <i>static</i>, <i>dynamic</i> a <i>automatic</i>) je indikováno specifikátorem úložiště <code>thread_local</code>. </p><p>Libovolný objekt, který by měl mít statickou dobu trvání (tj. životnost po celou dobu provádění programu), může mít místo toho dobu trvání <code>thread_local</code>. Záměrem je, aby stejně jako jakákoli jiná proměnná se statickým trváním mohl být objekt lokální ve vlákně inicializován pomocí konstruktoru a zrušen pomocí destruktoru. </p> <div class="mw-heading mw-heading4"><h4 id="Explicitně_implicitní_speciální_členské_funkce"><span id="Explicitn.C4.9B_implicitn.C3.AD_speci.C3.A1ln.C3.AD_.C4.8Dlensk.C3.A9_funkce"></span>Explicitně implicitní speciální členské funkce</h4><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B11&amp;veaction=edit&amp;section=31" title="Editace sekce: Explicitně implicitní speciální členské funkce" class="mw-editsection-visualeditor"><span>editovat</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=C%2B%2B11&amp;action=edit&amp;section=31" title="Editovat zdrojový kód sekce Explicitně implicitní speciální členské funkce"><span>editovat zdroj</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>V C++03 překladač pro třídy, které je samy neposkytují, poskytuje implicitní konstruktor, kopírovací konstruktor, kopírovací operátor přiřazení (<code>operator=</code>) a destruktor. Tyto implicitní funkce může programátor nahradit definováním vlastních verzí. C++ také definuje několik globálních operátorů (např. <code>operator new</code>), které fungují pro všechny třídy, a které programátor může předefinovat. </p><p>Nad vytvářením těchto implicitních funkcí však je velmi malá kontrola. Provedení třída ze své podstaty necopyable, například může být uděláno deklarováním privátního kopírovacího konstruktoru a kopírovacího operátoru přiřazení bez jejich definování. Snaha používat tyto funkce je narušením <a href="/w/index.php?title=Pravidlo_jedn%C3%A9_definice&amp;action=edit&amp;redlink=1" class="new" title="Pravidlo jedné definice (stránka neexistuje)">pravidla jedné definice</a> (ODR). Sice není vyžadována diagnostická zpráva normou<sup id="cite_ref-C++03_3.2/3_10-0" class="reference"><a href="#cite_note-C++03_3.2/3-10"><span class="cite-bracket">&#91;</span>10<span class="cite-bracket">&#93;</span></a></sup> porušení těchto pravidel mohou způsobit chybu při linkování kódu. </p><p>V případě implicitního konstruktoru nebude překladač generovat implicitní konstruktor pokud je třída definována s <i>libovolnými</i> konstruktory. To je užitečné v mnoha případech, ale je také užitečné umožnit, aby třídy měly jak specializované konstruktory tak překladačem generovaný implicitní konstruktor. </p><p>C++11 umožňuje specifikovat, že se pro třídu vytvořit implicitní speciální členská funkce, stejně jako implicitní speciální členskou funkci smazat.<sup id="cite_ref-openstd_default_delete_11-0" class="reference"><a href="#cite_note-openstd_default_delete-11"><span class="cite-bracket">&#91;</span>11<span class="cite-bracket">&#93;</span></a></sup> Následující třída explicitně vyžaduje, aby byl vytvořen implicitní konstruktor: </p> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="k">class</span><span class="w"> </span><span class="nc">SomeType</span> <span class="p">{</span> <span class="w"> </span><span class="n">SomeType</span><span class="p">()</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">default</span><span class="p">;</span><span class="w"> </span><span class="c1">// Implicitní konstruktor je explicitně uveden.</span> <span class="w"> </span><span class="n">SomeType</span><span class="p">(</span><span class="n">OtherType</span><span class="w"> </span><span class="n">hodnota</span><span class="p">);</span> <span class="p">};</span> </pre></div> <div class="mw-heading mw-heading4"><h4 id="Explicitně_smazané_funkce"><span id="Explicitn.C4.9B_smazan.C3.A9_funkce"></span>Explicitně smazané funkce</h4><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B11&amp;veaction=edit&amp;section=32" title="Editace sekce: Explicitně smazané funkce" class="mw-editsection-visualeditor"><span>editovat</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=C%2B%2B11&amp;action=edit&amp;section=32" title="Editovat zdrojový kód sekce Explicitně smazané funkce"><span>editovat zdroj</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>C++11 umožňuje explicitně zakázat (smazat) funkci. Toho lze použít pro zabránění implicitním typovým konverzím. Specifikátor <code>= delete</code> lze použít pro znemožnění volání funkce s určitými typy parametrů.<sup id="cite_ref-openstd_default_delete_11-1" class="reference"><a href="#cite_note-openstd_default_delete-11"><span class="cite-bracket">&#91;</span>11<span class="cite-bracket">&#93;</span></a></sup> Například: </p> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="kt">void</span><span class="w"> </span><span class="nf">noInt</span><span class="p">(</span><span class="kt">double</span><span class="w"> </span><span class="n">i</span><span class="p">);</span> <span class="kt">void</span><span class="w"> </span><span class="nf">noInt</span><span class="p">(</span><span class="kt">int</span><span class="p">)</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">delete</span><span class="p">;</span> </pre></div> <p>Pokus zavolat funkci <code>noInt()</code> s parametrem typu <code>int</code> překladač ohlásí jako chybu, místo toho aby provedl tichou konverzi na typ <code>double</code>. Volání funkce <code>noInt()</code> s parametrem typu <code>float</code> stále funguje. </p><p>Pomocí šablony je také možné zakázat volání funkce s libovolným jiným typem parametru než <code>double</code>: </p> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="kt">double</span><span class="w"> </span><span class="nf">onlyDouble</span><span class="p">(</span><span class="kt">double</span><span class="w"> </span><span class="n">d</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="k">return</span><span class="w"> </span><span class="n">d</span><span class="p">;}</span> <span class="k">template</span><span class="o">&lt;</span><span class="k">typename</span><span class="w"> </span><span class="nc">T</span><span class="o">&gt;</span><span class="w"> </span><span class="kt">double</span><span class="w"> </span><span class="n">onlyDouble</span><span class="p">(</span><span class="n">T</span><span class="p">)</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">delete</span><span class="p">;</span> </pre></div> <p>Volání <code>onlyDouble(1.0)</code> bude fungovat, ale pro <code>onlyDouble(1.0f)</code> překladač ohlásí chybu. </p><p>Členské funkce tříd a konstruktory mohou být také smazány. Je například možné zabránit kopírování objektů třídy smazáním kopírovacího konstruktoru a přiřazovacího operátoru <code>operator =</code>: </p> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="k">class</span><span class="w"> </span><span class="nc">NonCopyable</span> <span class="p">{</span> <span class="w"> </span><span class="n">NonCopyable</span><span class="p">();</span> <span class="w"> </span><span class="n">NonCopyable</span><span class="p">(</span><span class="k">const</span><span class="w"> </span><span class="n">NonCopyable</span><span class="o">&amp;</span><span class="p">)</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">delete</span><span class="p">;</span> <span class="w"> </span><span class="n">NonCopyable</span><span class="o">&amp;</span><span class="w"> </span><span class="k">operator</span><span class="o">=</span><span class="p">(</span><span class="k">const</span><span class="w"> </span><span class="n">NonCopyable</span><span class="o">&amp;</span><span class="p">)</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">delete</span><span class="p">;</span> <span class="p">};</span> </pre></div> <div class="mw-heading mw-heading4"><h4 id="Typ_long_long_int">Typ long long int</h4><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B11&amp;veaction=edit&amp;section=33" title="Editace sekce: Typ long long int" class="mw-editsection-visualeditor"><span>editovat</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=C%2B%2B11&amp;action=edit&amp;section=33" title="Editovat zdrojový kód sekce Typ long long int"><span>editovat zdroj</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>V C++03 je největším celočíselným typem <code>long int</code>. Co se týče jeho velikosti, je pouze zaručeno, že má alespoň tolik použitelných bitů jako <code>int</code>. V některých implementacích má <code>long int</code> velikost 64 bitů a v jiných 32 bitů. C++11 proto přidává nový celočíselný typ <code>long long int</code>, u něhož je zaručeno, že je alespoň stejně velký jako <code>long int</code>, a že má alespoň 64 bitů. Tento typ byl původně zaveden normou <a href="/wiki/C99" class="mw-redirect" title="C99">C99</a> jazyka C, a většina překladačů C++ jej již podporovala jako rozšíření.<sup id="cite_ref-12" class="reference"><a href="#cite_note-12"><span class="cite-bracket">&#91;</span>12<span class="cite-bracket">&#93;</span></a></sup><sup id="cite_ref-13" class="reference"><a href="#cite_note-13"><span class="cite-bracket">&#91;</span>13<span class="cite-bracket">&#93;</span></a></sup> </p> <div class="mw-heading mw-heading4"><h4 id="Statické_aserce"><span id="Statick.C3.A9_aserce"></span>Statické aserce</h4><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B11&amp;veaction=edit&amp;section=34" title="Editace sekce: Statické aserce" class="mw-editsection-visualeditor"><span>editovat</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=C%2B%2B11&amp;action=edit&amp;section=34" title="Editovat zdrojový kód sekce Statické aserce"><span>editovat zdroj</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>C++03 poskytuje dvě metody testování <a href="/wiki/Aserce" title="Aserce">asercí</a>: makro <code>assert</code> a direktivu preprocesoru <code>#error</code>. Žádná z nich však není vhodná pro použití v šablonách: makro testuje aserci v době provádění, a direktiva preprocesoru testuje aserci při zpracování preprocesorem, což je před instanciací šablony. Žádná není vhodná pro testování vlastností, které jsou závislé na parametrech šablony. </p><p>Nový nástroj přináší nový způsob testování aserce v době překladu s použitím nového klíčového slova <code>static_assert</code>. Deklarace předpokládá tento tvar: </p> <pre>static_assert (<i>konstantní-výraz</i>, <i>chybová-zpráva</i>); </pre> <p>Následující příklady ukazují použití <code>static_assert</code>: </p> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="k">static_assert</span><span class="p">((</span><span class="n">GREEKPI</span><span class="w"> </span><span class="o">&gt;</span><span class="w"> </span><span class="mf">3.14</span><span class="p">)</span><span class="w"> </span><span class="o">&amp;&amp;</span><span class="w"> </span><span class="p">(</span><span class="n">GREEKPI</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="mf">3.15</span><span class="p">),</span><span class="w"> </span><span class="s">&quot;GREEKPI je nepřesný!&quot;</span><span class="p">);</span> </pre></div> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="k">template</span><span class="o">&lt;</span><span class="n">classT</span><span class="o">&gt;</span> <span class="k">struct</span><span class="w"> </span><span class="nc">Check</span> <span class="p">{</span> <span class="w"> </span><span class="k">static_assert</span><span class="p">(</span><span class="k">sizeof</span><span class="p">(</span><span class="kt">int</span><span class="p">)</span><span class="w"> </span><span class="o">&lt;=</span><span class="w"> </span><span class="k">sizeof</span><span class="p">(</span><span class="n">T</span><span class="p">),</span><span class="w"> </span><span class="s">&quot;T není dostatečně velký!&quot;</span><span class="p">);</span> <span class="p">};</span> </pre></div> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="k">template</span><span class="o">&lt;</span><span class="n">classIntegrál</span><span class="o">&gt;</span> <span class="n">Integral</span><span class="w"> </span><span class="n">foo</span><span class="p">(</span><span class="n">Integral</span><span class="w"> </span><span class="n">x</span><span class="p">,</span><span class="w"> </span><span class="n">Integral</span><span class="w"> </span><span class="n">y</span><span class="p">)</span> <span class="p">{</span> <span class="w"> </span><span class="k">static_assert</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">is_integral</span><span class="o">&lt;</span><span class="n">integral</span><span class="o">&gt;::</span><span class="n">value</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;parametr foo() musí být celočíselného typu.&quot;</span><span class="p">);</span> <span class="p">}</span> </pre></div> <p>Když je konstantní výraz nepravdivý (<code>false</code>), překladač vyprodukuje chybovou zprávu. První příklad je podobný direktivě preprocesoru <code>#error</code>, i když preprocessor podporuje pouze celočíselné typy.<sup id="cite_ref-14" class="reference"><a href="#cite_note-14"><span class="cite-bracket">&#91;</span>14<span class="cite-bracket">&#93;</span></a></sup> Naproti tomu, v druhém příkladu je aserce zkontrolována v každé instanciaci šablonové třídy <code>Check</code>. </p><p>Statické aserce jsou užitečné také mimo šablony. Například určitá implementace algoritmu může záviset na tom, že velikost <code>long long</code> je větší než <code>int</code>, což standard nezaručuje. Takový předpoklad je platný na většině systémů a překladačů, ale ne na všech. </p> <div class="mw-heading mw-heading4"><h4 id="Umožnění_aplikace_sizeof_na_členy_třídy_bez_explicitního_objektu"><span id="Umo.C5.BEn.C4.9Bn.C3.AD_aplikace_sizeof_na_.C4.8Dleny_t.C5.99.C3.ADdy_bez_explicitn.C3.ADho_objektu"></span>Umožnění aplikace sizeof na členy třídy bez explicitního objektu</h4><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B11&amp;veaction=edit&amp;section=35" title="Editace sekce: Umožnění aplikace sizeof na členy třídy bez explicitního objektu" class="mw-editsection-visualeditor"><span>editovat</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=C%2B%2B11&amp;action=edit&amp;section=35" title="Editovat zdrojový kód sekce Umožnění aplikace sizeof na členy třídy bez explicitního objektu"><span>editovat zdroj</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>V C++03 je možné používat operátor <code><a href="/w/index.php?title=Sizeof&amp;action=edit&amp;redlink=1" class="new" title="Sizeof (stránka neexistuje)">sizeof</a></code> na typy a objekty. Toto však nelze provést: </p> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="k">struct</span><span class="w"> </span><span class="nc">SomeType</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="n">OtherType</span><span class="w"> </span><span class="n">clen</span><span class="p">;</span><span class="w"> </span><span class="p">};</span> <span class="k">sizeof</span><span class="p">(</span><span class="n">SomeType</span><span class="o">::</span><span class="n">clen</span><span class="p">);</span><span class="w"> </span><span class="c1">// Dostupné v C++11, nedostupné v C++03.</span> </pre></div> <p>Toto musí vracet velikost typu <code>OtherType</code>. V C++03 je to zakázané a způsobí to chybu při překladu. V C++11 je to dovolené. Totéž je možné pro operátor <code>alignof</code> zavedený v C++11. </p> <div class="mw-heading mw-heading4"><h4 id="Ovlivňování_zarovnání_objektu_a_dotaz_na_něj"><span id="Ovliv.C5.88ov.C3.A1n.C3.AD_zarovn.C3.A1n.C3.AD_objektu_a_dotaz_na_n.C4.9Bj"></span>Ovlivňování zarovnání objektu a dotaz na něj</h4><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B11&amp;veaction=edit&amp;section=36" title="Editace sekce: Ovlivňování zarovnání objektu a dotaz na něj" class="mw-editsection-visualeditor"><span>editovat</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=C%2B%2B11&amp;action=edit&amp;section=36" title="Editovat zdrojový kód sekce Ovlivňování zarovnání objektu a dotaz na něj"><span>editovat zdroj</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>C++11 umožňuje proměnná zarovnání být dotazovaný a řízený s <code>alignof</code> a <code>alignas</code>. </p><p>Operátor <code>alignof</code> bere typ a vrátí hranice mocninu 2 byte na který typ instancemi musí být přidělené (protože <code>std::size_t</code>). Když daný reference typ <code>alignof</code> vrátí zarovnání referencovaného typu; pro pole vrací zarovnání typu prvku. </p><p>Specifikátor <code>alignas</code> řídí zarovnání paměti pro proměnnou. Parametrem specifikátoru je konstanta nebo typ; je-li použit typ, je <code>alignas(T)</code> zkratkou za <code>alignas(alignof(T))</code>. Například pro zajištění, že pole typu char musí být správně zarovnané pro uložení hodnoty typu float: </p> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="k">alignas</span><span class="p">(</span><span class="kt">float</span><span class="p">)</span><span class="w"> </span><span class="kt">unsigned</span><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="n">c</span><span class="p">[</span><span class="k">sizeof</span><span class="p">(</span><span class="kt">float</span><span class="p">)]</span> </pre></div> <div class="mw-heading mw-heading4"><h4 id="Umožnění_implementace_garbage_collectoru"><span id="Umo.C5.BEn.C4.9Bn.C3.AD_implementace_garbage_collectoru"></span>Umožnění implementace garbage collectoru</h4><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B11&amp;veaction=edit&amp;section=37" title="Editace sekce: Umožnění implementace garbage collectoru" class="mw-editsection-visualeditor"><span>editovat</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=C%2B%2B11&amp;action=edit&amp;section=37" title="Editovat zdrojový kód sekce Umožnění implementace garbage collectoru"><span>editovat zdroj</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Předchozí normy C++ umožňovaly implementaci vlastního garbage collectoru pomocí <code>set_new_handler</code>, ale pro jeho použití nedefinovaly dosažitelnost objektu. C++11 definuje podmínku, za které jsou hodnoty ukazatele „bezpečně odvozeny“ z jiné hodnoty. Implementace může specifikovat, že vyžaduje <i>striktní bezpečnost ukazatelů</i>, aby ukazatele, které nejsou odvozeny podle těchto pravidel, se mohly stát neplatnými. </p> <div class="mw-heading mw-heading4"><h4 id="Atributy">Atributy</h4><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B11&amp;veaction=edit&amp;section=38" title="Editace sekce: Atributy" class="mw-editsection-visualeditor"><span>editovat</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=C%2B%2B11&amp;action=edit&amp;section=38" title="Editovat zdrojový kód sekce Atributy"><span>editovat zdroj</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>C++11 poskytuje standardizovanou syntaxi pro rozšiřování jazyka. Taková rozšíření se tradičně zadávala pomocí direktivy <code>#pragma</code> nebo pomocí proprietárních klíčových slov (jako <code>__attribute__</code> pro GNU překladač nebo <code>__declspec</code> pro překladač od Microsoftu). S novou syntaxí je možné přidané informace specifikovat ve formě atributu zapsaného ve dvojitých hranatých závorkách. Atribut lze aplikovat na různé části zdrojového kódu: </p> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="kt">int</span><span class="w"> </span><span class="p">[[</span><span class="n">attr1</span><span class="p">]]</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="p">[[</span><span class="n">attr2</span><span class="p">,</span><span class="w"> </span><span class="n">attr3</span><span class="p">]];</span> <span class="p">[[</span><span class="n">attr4</span><span class="p">(</span><span class="n">arg1</span><span class="p">,</span><span class="w"> </span><span class="n">arg2</span><span class="p">)]],</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">cond</span><span class="p">)</span> <span class="p">{</span> <span class="w"> </span><span class="p">[[</span><span class="n">vendor</span><span class="o">::</span><span class="n">attr5</span><span class="p">]]</span><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">i</span><span class="p">;</span> <span class="p">}</span> </pre></div> <p>Ve výše uvedeném příkladu se atribut <code>attr1</code> uplatní na typ proměnné <code>i</code>, <code>attr2</code> a <code>attr3</code> na samotnou proměnnou, <code>attr4</code> platí pro příkaz <code>if</code> a <code>vendor::attr5</code> se uplatní na příkaz <code>return</code>. Obecně (s několika výjimkami) atribut specifikovaný pro pojmenovanou entitu je umístěn po jméně, a před entitou, jinak, jak je ukázáno výše, může být několik atributů uvedeno v jedné dvojici dvojitých hranatých závorek, přidané argumenty mohou být poskytnuty pro atribut, a atributy mohou mít rozsah platnosti podle jmenných prostorů proprietárních atributů. </p><p>Doporučuje se, aby atributy neměly žádný sémantický význam v jazyce, a aby se neměnil smysl programu, pokud jsou ignorovány. Atributy mohou být užitečné pro poskytnutí informace, která například pomůže překladači vydat lepší diagnostiku nebo optimalizovat generovaný kód. </p><p>C++11 poskytuje dva standardní atributy: <code>noreturn</code>, který udává, že funkce nemá návratovou hodnotu, a <code>carries_dependency</code>, který pomáhá optimalizovat multithreadový kód uvedením, že argumenty funkce nebo její návratová hodnota přenášejí závislost.<sup>&#91;<a href="/wiki/Wikipedie:Vyhn%C4%9Bte_se_vyh%C3%BDbav%C3%BDm_slov%C5%AFm" title="Wikipedie:Vyhněte se vyhýbavým slovům"><span title="Tato formulace je nejasná, přeformulujte ji nebo ji rozveďte.">ujasnit</span></a>&#93;</sup> </p> <div class="mw-heading mw-heading2"><h2 id="Změny_standardní_knihovny_C++"><span id="Zm.C4.9Bny_standardn.C3.AD_knihovny_C.2B.2B"></span>Změny standardní knihovny C++</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B11&amp;veaction=edit&amp;section=39" title="Editace sekce: Změny standardní knihovny C++" class="mw-editsection-visualeditor"><span>editovat</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=C%2B%2B11&amp;action=edit&amp;section=39" title="Editovat zdrojový kód sekce Změny standardní knihovny C++"><span>editovat zdroj</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Ve standardní knihovně C++11 bylo zavedeno několik nových vlastností. Mnoho jich mohlo být implementováno i podle starší normy, ale některé spoléhají (ve větší či menší míře) na nové základní vlastnosti C++11. </p><p>Velká část nové <a href="/wiki/Knihovna_(programov%C3%A1n%C3%AD)" title="Knihovna (programování)">knihovny</a> byla definována v dokumentu <i><a href="/w/index.php?title=Technick%C3%A1_zpr%C3%A1va_1&amp;action=edit&amp;redlink=1" class="new" title="Technická zpráva 1 (stránka neexistuje)">C++ Standards Committee's Library Technical Report</a></i> (nazývaný TR1), který byl publikován v roce 2005. Různé plné a částečné implementace TR1 jsou aktuálně dostupné použitím jmenného prostoru <code>std::tr1</code>. Pro C++11 byly přesunuty do jmenného prostoru <code>std</code>. Protože však TR1 vlastnosti byly přeneseny do standardní knihovny C++11, byly nahrazeny příslušnými jazykovými vlastnostmi C++11, které v počáteční TR1 verzi nebyly dostupné. Také mohly být nahrazeny vlastnostmi, které byly dostupné v C++03, ale nebyly částí původní specifikace v TR1. </p> <div class="mw-heading mw-heading3"><h3 id="Rozšíření_standardní_knihovny"><span id="Roz.C5.A1.C3.AD.C5.99en.C3.AD_standardn.C3.AD_knihovny"></span>Rozšíření standardní knihovny</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B11&amp;veaction=edit&amp;section=40" title="Editace sekce: Rozšíření standardní knihovny" class="mw-editsection-visualeditor"><span>editovat</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=C%2B%2B11&amp;action=edit&amp;section=40" title="Editovat zdrojový kód sekce Rozšíření standardní knihovny"><span>editovat zdroj</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Nové hlavičkové soubory: </p> <ul><li>chrono: práce s časem</li> <li>codevct: konverze <a href="/wiki/Unicode" title="Unicode">Unicode</a> kódování</li> <li>random: pokročilé <a href="/wiki/Gener%C3%A1tor_pseudon%C3%A1hodn%C3%BDch_%C4%8D%C3%ADsel" title="Generátor pseudonáhodných čísel">generování pseudonáhodných čísel</a></li> <li>ratio: zlomky, vyhodnocené v době kompilace</li> <li>regex: podpora regulárních výrazů</li></ul> <div class="mw-heading mw-heading3"><h3 id="Vylepšení_komponent_standardní_knihovny"><span id="Vylep.C5.A1en.C3.AD_komponent_standardn.C3.AD_knihovny"></span>Vylepšení komponent standardní knihovny</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B11&amp;veaction=edit&amp;section=41" title="Editace sekce: Vylepšení komponent standardní knihovny" class="mw-editsection-visualeditor"><span>editovat</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=C%2B%2B11&amp;action=edit&amp;section=41" title="Editovat zdrojový kód sekce Vylepšení komponent standardní knihovny"><span>editovat zdroj</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>C++11 poskytuje několik nových vlastností, které mohou s výhodou využívat již existující komponenty standardní knihovny. Většina kontejnerů standardní knihovny může například využívat podporu přesunových konstruktorů používajících Rvalue reference, jak pro rychlé přesuny těžkých kontejnerů tak pro přesun obsahu těchto kontejnerů na jiné paměťové lokace. Tam, kde to bylo možné, byly komponenty standardní knihovny vylepšeny o nové jazykové vlastnosti definované v C++11, mimo jiné pro: </p> <ul><li>rvalue reference a s nimi související podporu přesunu</li> <li>podporu kódovacích jednotek UTF-16 a kódovacích jednotek UTF-32 pro znakové typy Unicode</li> <li><a href="/w/index.php?title=Variadick%C3%A1_%C5%A1ablona&amp;action=edit&amp;redlink=1" class="new" title="Variadická šablona (stránka neexistuje)">variadické šablony</a> (spolu s Rvalue referencemi pro umožnění dokonalého forwardingu)</li> <li>výrazy konstantní v době překladu</li> <li><code><a href="/w/index.php?title=Decltype&amp;action=edit&amp;redlink=1" class="new" title="Decltype (stránka neexistuje)">decltype</a></code></li> <li><code>explicit</code> konverzní operátory</li> <li>funkce deklarované defaulted nebo smazaný</li></ul> <p>Od předešlé normy C++ uplynulo hodně času, během něhož bylo vytvořeno množství kódu, který používá standardní knihovnu, při čemž byly odhaleny složky standardní knihovny, které bylo možné vylepšit. Příkladem je komponenta <a href="/w/index.php?title=Allocator_(C%2B%2B)&amp;action=edit&amp;redlink=1" class="new" title="Allocator (C++) (stránka neexistuje)">allocator</a>. Do jazyka C++11 byl začleněn nový model alokátorů založený na <a href="/wiki/Rozsah_platnosti" title="Rozsah platnosti">oblastech platnosti</a>, který doplňuje předchozí model. </p> <div class="mw-heading mw-heading3"><h3 id="Nástroje_pro_threading"><span id="N.C3.A1stroje_pro_threading"></span>Nástroje pro threading</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B11&amp;veaction=edit&amp;section=42" title="Editace sekce: Nástroje pro threading" class="mw-editsection-visualeditor"><span>editovat</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=C%2B%2B11&amp;action=edit&amp;section=42" title="Editovat zdrojový kód sekce Nástroje pro threading"><span>editovat zdroj</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>C++03 poskytuje paměťový model, který podporuje threading, ale primární podpora pro skutečné použití threadingu přišla až se standardní knihovnou C++11. </p><p>Knihovna definuje třídu (<code>std::thread</code>) s podporou vláken, která používá <a href="/w/index.php?title=Objekt_funkce&amp;action=edit&amp;redlink=1" class="new" title="Objekt funkce (stránka neexistuje)">objekt funkce</a> (s volitelnou řadou argumentů, které ji lze předat) pro jeho spuštění v novém vlákně. Vlákno je možné pozastavit, dokud neskončí jiné běžící vlákno s využitím členské funkce <code>std::thread::join()</code> pro spojování vláken. Tam, kde je to možné, je poskytnut přístup k podkladovému nativnímu objektu nebo objektům vlákna pro operace podporované použitou <a href="/wiki/Po%C4%8D%C3%ADta%C4%8Dov%C3%A1_platforma" title="Počítačová platforma">výpočetní platformou</a> pomocí členské funkce <code>std::thread::native_handle()</code>. </p><p>Pro synchronizaci vláken byly do knihovny přidány příslušné <a href="/wiki/Vz%C3%A1jemn%C3%A9_vylou%C4%8Den%C3%AD" title="Vzájemné vyloučení">mutexy</a> (<code>std::mutex</code>, <code>std::recursive_mutex</code>, atd.) a <a href="/wiki/Monitor_(synchronizace)" title="Monitor (synchronizace)">podmínkové proměnné</a> (<code>std::condition_variable</code> a <code>std::condition_variable_any</code>), které jsou dostupné prostřednictvím zámků RAII (Resource Acquisition Is Initialization) (<code>std::lock_guard</code> a <code>std::unique_lock</code>) a zamykacích algoritmů pro snadné použití. </p><p>Pro vysokou výkonnost při nízkoúrovňové práci je někdy potřebná komunikace mezi vlákna bez režie mutexů. K tomu se používají <a href="/wiki/Atomick%C3%A1_operace" class="mw-redirect" title="Atomická operace">atomické operace</a> nad paměťovými místy. Ty mohou volitelně specifikovat minimální omezení viditelnosti paměti potřebná pro danou operaci. K tomuto účelu lze také použít explicitní <a href="/wiki/Pam%C4%9B%C5%A5ov%C3%A1_bari%C3%A9ra" title="Paměťová bariéra">paměťové bariéry</a>. </p><p>Vláknová knihovna C++11 obsahuje také <a href="/w/index.php?title=Futures_a_promises&amp;action=edit&amp;redlink=1" class="new" title="Futures a promises (stránka neexistuje)">futures a promises</a> pro předávání asynchronních výsledků mezi vlákny a <code>std::packaged_task</code> pro zabalení volání funkcí, která mohou generovat takový asynchronní výsledek. Návrh futures byl kritizován, protože postrádá způsob, jak kombinovat futures a kontrolovat dokončení jednoho slibu uvnitř sady slibů.<sup id="cite_ref-15" class="reference"><a href="#cite_note-15"><span class="cite-bracket">&#91;</span>15<span class="cite-bracket">&#93;</span></a></sup> </p><p>Další vysokoúrovňové nástroje pro práci s vlákny, např. <a href="/w/index.php?title=Fond_vl%C3%A1ken&amp;action=edit&amp;redlink=1" class="new" title="Fond vláken (stránka neexistuje)">fondy vláken</a> byly odloženy do budoucí <a href="/w/index.php?title=Technick%C3%A1_zpr%C3%A1va_1&amp;action=edit&amp;redlink=1" class="new" title="Technická zpráva 1 (stránka neexistuje)">technické zprávy</a> o C++. Nejsou součástí C++11, ale očekává se, že jejich výsledná implementace bude postavena zcela nad vlastnostmi vláknové knihovny. </p><p>Nový prostředek <code>std::async</code> poskytuje pohodlnou metoda spouštění úloh a jejich navázání na <code>std::future</code>. Uživatel si může vybrat, zda má být úloha spuštěna asynchronně na samostatném vlákně nebo synchronně na vlákně, které čeká na hodnotu. Implicitně si implementace může vybrat, což poskytuje snadný způsob, jak využít výhodu hardwarové souběžnosti bez oversubscription, a poskytuje některé výhody fondu vláken pro jednoduchá použití. </p> <div class="mw-heading mw-heading3"><h3 id="N-tice">N-tice</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B11&amp;veaction=edit&amp;section=43" title="Editace sekce: N-tice" class="mw-editsection-visualeditor"><span>editovat</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=C%2B%2B11&amp;action=edit&amp;section=43" title="Editovat zdrojový kód sekce N-tice"><span>editovat zdroj</span></a><span class="mw-editsection-bracket">]</span></span></div> <p><a href="/wiki/Uspo%C5%99%C3%A1dan%C3%A1_n-tice" title="Uspořádaná n-tice">Uspořádaná n-tice</a> (<a href="/wiki/Angli%C4%8Dtina" title="Angličtina">anglicky</a> <span class="cizojazycne" lang="en" title="angličtina"><i>tuple</i></span>) je kolekce předem daných rozměrů složená z heterogenních objektů. N-tice lze považovat za zobecnění členských proměnných struktur. </p><p>C++11 verze TR1 typu n-tic využívají C++11 vlastností jako <a href="#Variadické_šablony">variadické šablony</a>. Pro rozumnou implementaci TR1 verze vyžadovaly implementací definovaný maximální počet obsažených typů, a značné použití triků s makry. Oproti tomu, implementace verze C++11 nevyžaduje žádný explicitní implementací definovaný maximální počet typů. I když překladače budou mít interní maximální hloubku rekurze pro instanciaci šablon (což je normální), n-tice podle C++11 nebudou tuto hodnotu ukazovat uživateli. </p><p>S použitím <a href="/w/index.php?title=Variadick%C3%A1_%C5%A1ablona&amp;action=edit&amp;redlink=1" class="new" title="Variadická šablona (stránka neexistuje)">variadických šablon</a> vypadá deklarace třídy n-tic takto: </p> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="k">template</span><span class="w"> </span><span class="o">&lt;</span><span class="k">class</span><span class="p">...</span><span class="n">Types</span><span class="o">&gt;</span><span class="w"> </span><span class="k">class</span><span class="w"> </span><span class="nc">tuple</span><span class="p">;</span> </pre></div> <p>Příklad definice a použití typu n-tice: </p> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="k">typedef</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">tuple</span><span class="w"> </span><span class="o">&lt;</span><span class="kt">int</span><span class="p">,</span><span class="w"> </span><span class="kt">double</span><span class="p">,</span><span class="w"> </span><span class="kt">long</span><span class="w"> </span><span class="o">&amp;</span><span class="p">,</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*&gt;</span><span class="w"> </span><span class="n">test_tuple</span><span class="p">;</span> <span class="kt">long</span><span class="w"> </span><span class="n">lengthy</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">12</span><span class="p">;</span> <span class="n">test_tuple</span><span class="w"> </span><span class="nf">proof</span><span class="w"> </span><span class="p">(</span><span class="mi">18</span><span class="p">,</span><span class="w"> </span><span class="mf">6.5</span><span class="p">,</span><span class="w"> </span><span class="n">lengthy</span><span class="p">,</span><span class="w"> </span><span class="err">„</span><span class="n">Ciao</span><span class="o">!</span><span class="err">“</span><span class="p">);</span> <span class="n">lengthy</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">get</span><span class="o">&lt;</span><span class="mi">0</span><span class="o">&gt;</span><span class="p">(</span><span class="n">proof</span><span class="p">);</span><span class="w"> </span><span class="c1">// Přiřadí do &#39;lengthy&#39; hodnotu 18.</span> <span class="n">std</span><span class="o">::</span><span class="n">get</span><span class="o">&lt;</span><span class="mi">3</span><span class="o">&gt;</span><span class="p">(</span><span class="n">proof</span><span class="p">)</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="err">„</span><span class="w"> </span><span class="n">Krásný</span><span class="o">!</span><span class="err">“</span><span class="p">;</span><span class="w"> </span><span class="c1">// Změní čtvrtý prvek n-tice.</span> </pre></div> <p>Je možné vytvořit n-tici <code>proof</code> bez definování jejího obsahu, ale pouze pokud typy prvků n-tice mají implicitní konstruktory. Navíc je možné přiřadit n-tici do jiné n-tice; pokud dva typy n-tic jsou stejné, každý typ prvku musí mít kopírovací konstruktor; jinak, každý typ prvku n-tice na pravé straně operátoru přiřazení musí být zkonvertovatelný na typ odpovídajícího prvku na levé straně n-tice nebo odpovídající typ prvku v n-tici na levé straně musí mít vhodný konstruktor. </p> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="k">typedef</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">tuple</span><span class="w"> </span><span class="o">&lt;</span><span class="kt">int</span><span class="w"> </span><span class="p">,</span><span class="w"> </span><span class="kt">double</span><span class="p">,</span><span class="w"> </span><span class="n">string</span><span class="w"> </span><span class="o">&gt;</span><span class="w"> </span><span class="n">tuple_1</span><span class="w"> </span><span class="n">t1</span><span class="p">;</span> <span class="k">typedef</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">tuple</span><span class="w"> </span><span class="o">&lt;</span><span class="kt">char</span><span class="p">,</span><span class="w"> </span><span class="kt">short</span><span class="w"> </span><span class="p">,</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="o">&gt;</span><span class="w"> </span><span class="n">tuple_2</span><span class="w"> </span><span class="n">t2</span><span class="w"> </span><span class="p">(</span><span class="sc">&#39;X&#39;</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="err">„</span><span class="n">Hola</span><span class="o">!</span><span class="err">“</span><span class="p">);</span> <span class="n">t1</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">t2</span><span class="p">;</span><span class="w"> </span><span class="c1">// Ok, první dva prvky mohou být zkonvertovány,</span> <span class="w"> </span><span class="c1">// třetí prvek lze vytvořit z &#39;const char *&#39;.</span> </pre></div> <p>Stejně jako <code>std::make_pair</code> pro <code>std::pair</code> existuje <code>std::make_tuple</code> pro automatické vytváření <code>std::tuple</code> s použití vyvozování typů; pro deklarování takových n-tic lze použít <code>auto</code>. <code>std::tie</code> vytváří n-tice lvalue reference pro usnadnění rozbalování n-tic. Přitom také může pomoci <code>std::ignore</code>. Příklad: </p> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="k">auto</span><span class="w"> </span><span class="n">zaznam</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">make_tuple</span><span class="p">(</span><span class="err">“</span><span class="n">Hari</span><span class="w"> </span><span class="n">Ram</span><span class="err">“</span><span class="p">,</span><span class="w"> </span><span class="err">„</span><span class="n">New</span><span class="w"> </span><span class="n">Delhi</span><span class="err">“</span><span class="p">,</span><span class="w"> </span><span class="mf">3.5</span><span class="p">,</span><span class="w"> </span><span class="sc">&#39;A&#39;</span><span class="p">);</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="w"> </span><span class="n">name</span><span class="w"> </span><span class="p">;</span><span class="w"> </span><span class="kt">float</span><span class="w"> </span><span class="n">gpa</span><span class="w"> </span><span class="p">;</span><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="n">grade</span><span class="w"> </span><span class="p">;</span> <span class="n">std</span><span class="o">::</span><span class="n">tie</span><span class="p">(</span><span class="n">jmeno</span><span class="p">,</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">ignore</span><span class="p">,</span><span class="w"> </span><span class="n">gpa</span><span class="p">,</span><span class="w"> </span><span class="n">grade</span><span class="p">)</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">zaznam</span><span class="w"> </span><span class="p">;</span><span class="w"> </span><span class="c1">// std::ignore umožňuje vypustit jméno města</span> <span class="n">std</span><span class="o">::</span><span class="n">cout</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">jmeno</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="sc">&#39; &#39;</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">gpa</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="sc">&#39; &#39;</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">grade</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="w"> </span><span class="p">;</span> </pre></div> <p>Jsou dostupné relační operátory (mezi n-ticemi se stejným počtem prvků), a jsou dostupné dva výrazy pro zjištění charakteristik n-tice (pouze během překladu): </p> <ul><li><code>std::tuple_size&lt;t&gt;::value</code> vrátí počet prvků v n-tice <code>T</code>,</li> <li><code>std::tuple_element&lt;i, T&gt;:: typ</code> vrátí typ objektu s číslem <code>I</code> v n-tici <code>T</code>.</li></ul> <div class="mw-heading mw-heading3"><h3 id="Hašovací_tabulky"><span id="Ha.C5.A1ovac.C3.AD_tabulky"></span>Hašovací tabulky</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B11&amp;veaction=edit&amp;section=44" title="Editace sekce: Hašovací tabulky" class="mw-editsection-visualeditor"><span>editovat</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=C%2B%2B11&amp;action=edit&amp;section=44" title="Editovat zdrojový kód sekce Hašovací tabulky"><span>editovat zdroj</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Zahrnutí <a href="/wiki/Ha%C5%A1ovac%C3%AD_tabulka" title="Hašovací tabulka">hašovacích tabulek</a> (neuspořádaných asociativních kontejnerů) do standardní knihovny C++ bylo jedním z nejčastěji se opakujících požadavků, který nebyl obsažen v C++03 pouze z časových důvodů. I když jsou v nejhorším případě (při existenci mnoha kolizí) hašovací tabulky méně efektivní než <a href="/w/index.php?title=Vyv%C3%A1%C5%BEen%C3%BD_strom&amp;action=edit&amp;redlink=1" class="new" title="Vyvážený strom (stránka neexistuje)">vyvážené stromy</a>, v mnoha reálných aplikacích fungují lépe. </p><p>Kolize jsou řešené pouze pomocí <i><a href="/wiki/Ha%C5%A1ovac%C3%AD_tabulka" title="Hašovací tabulka">lineárního řetězení</a></i>, protože komise nepovažovala za vhodné standardizovat řešení <i><a href="/w/index.php?title=Otev%C5%99en%C3%BD_adresov%C3%A1n%C3%AD&amp;action=edit&amp;redlink=1" class="new" title="Otevřený adresování (stránka neexistuje)">otevřeného adresování</a></i>, které přináší množství vnitřních problémů (především když je povoleno mazání položek). Aby se zabránilo kolizím jmen s nestandardními knihovnami, které vyvinuly vlastní implementace hašovacích tabulek, byla místo “hash” použita předpona “unordered”. </p><p>Nová knihovna má čtyři typy hašovacích tabulek, které se liší podle toho, zda dovolují prvky se stejným klíčem (jedinečné klíče nebo ekvivalentní klíče), a zda mapují každý klíč na přidruženou hodnotu. Odpovídají čtyřem existujícím asociativním kontejnerům založeným na <a href="/wiki/Bin%C3%A1rn%C3%AD_vyhled%C3%A1vac%C3%AD_strom" title="Binární vyhledávací strom">binárních vyhledávacích stromech</a> s předponou <code>unordered_</code>. </p> <table class="wikitable" style="text-align: center"> <tbody><tr> <th>Typ hašovací tabulky</th> <th>Přidružené hodnoty</th> <th>Ekvivalentní klíče </th></tr> <tr> <td style="text-align: left"><code><a href="/w/index.php?title=Neuspo%C5%99%C3%A1dan%C3%BD_asociativn%C3%AD_kontejner_(C%2B%2B)&amp;action=edit&amp;redlink=1" class="new" title="Neuspořádaný asociativní kontejner (C++) (stránka neexistuje)">std::unordered_set</a></code></td> <td>ne</td> <td>ne </td></tr> <tr> <td style="text-align: left"><code><a href="/w/index.php?title=Neuspo%C5%99%C3%A1dan%C3%BD_asociativn%C3%AD_kontejner_(C%2B%2B)&amp;action=edit&amp;redlink=1" class="new" title="Neuspořádaný asociativní kontejner (C++) (stránka neexistuje)">std::unordered_multiset</a></code></td> <td>ne</td> <td>ano </td></tr> <tr> <td style="text-align: left"><code><a href="/w/index.php?title=Neuspo%C5%99%C3%A1dan%C3%BD_asociativn%C3%AD_kontejner_(C%2B%2B)&amp;action=edit&amp;redlink=1" class="new" title="Neuspořádaný asociativní kontejner (C++) (stránka neexistuje)">std::unordered_map</a></code></td> <td>ano</td> <td>ne </td></tr> <tr> <td style="text-align: left"><code><a href="/w/index.php?title=Neuspo%C5%99%C3%A1dan%C3%BD_asociativn%C3%AD_kontejner_(C%2B%2B)&amp;action=edit&amp;redlink=1" class="new" title="Neuspořádaný asociativní kontejner (C++) (stránka neexistuje)">std::unordered_multimap</a></code></td> <td>ano</td> <td>ano </td></tr></tbody></table> <p>Nové třídy splňují všechny požadavky kladené na <a href="/wiki/Standard_Template_Library" title="Standard Template Library">kontejnervou třídu</a>, a mají všechny metody potřebné pro přístup k prvkům: <code>insert</code>, <code>erase</code>, <code>begin</code>, <code>end</code>. </p><p>Hašovací tabulky nevyžadovaly žádné rozšíření jádra jazyka C++ (i když implementace budou využívat různé vlastnosti jazyka C++11), pouze malé rozšíření hlavičkového souboru <code>&lt;functional&gt;</code> a zavedení hlavičkových souborů <code>&lt;unordered_set&gt;</code> a <code>&lt;unordered_map&gt;</code>. Žádné další změny v existujících standardních třídách nebyly potřebné, a nové rysy nezávisejí na jiných rozšířeních standardní knihovny. </p> <div class="mw-heading mw-heading3"><h3 id="std::array_a_std::forward_list">std::array a std::forward_list</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B11&amp;veaction=edit&amp;section=45" title="Editace sekce: std::array a std::forward_list" class="mw-editsection-visualeditor"><span>editovat</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=C%2B%2B11&amp;action=edit&amp;section=45" title="Editovat zdrojový kód sekce std::array a std::forward_list"><span>editovat zdroj</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Kromě hašovací tabulek byly do standardní knihovny přidány dva další kontejnery. <code>std::array</code> je kontejner pevné velikosti, který je efektivnější než <code>std::vector</code>, ale bezpečnější a snáze použitelný než pole ve stylu jazyka C. <code>std::forward_list</code> je jednoduchý spojový seznam, který poskytuje prostorově efektivnější ukládání než obousměrný spojový seznam <code>std::list</code>, když není potřeba obousměrné procházení. </p> <div class="mw-heading mw-heading3"><h3 id="Regulární_výrazy"><span id="Regul.C3.A1rn.C3.AD_v.C3.BDrazy"></span><span id="regex"></span> Regulární výrazy</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B11&amp;veaction=edit&amp;section=46" title="Editace sekce: Regulární výrazy" class="mw-editsection-visualeditor"><span>editovat</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=C%2B%2B11&amp;action=edit&amp;section=46" title="Editovat zdrojový kód sekce Regulární výrazy"><span>editovat zdroj</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Nová knihovna definovaná v novém hlavičkovém souboru <code>&lt;regex&gt;</code>, je tvořena několika novými třídami: </p> <ul><li><a href="/wiki/Regul%C3%A1rn%C3%AD_v%C3%BDraz" title="Regulární výraz">regulární výrazy</a> jsou reprezentovány instancí šablonové třídy <code>std::regex</code>;</li> <li>výskyty jsou reprezentovány instancí šablonové třídy <code>std::match_results</code>,</li> <li>pro iteraci přes všechny možnosti, jak napasovat regulární výraz na řetězec, se používá <code>std::regex_iterator</code></li></ul> <p>Funkce <code>std::regex_search</code> se používá pro samotné vyhledávání, zatímco pro ‘vyhledání a nahrazení’ se používá funkce <code>std::regex_replace</code>, která vrací upravený řetězec.<sup id="cite_ref-16" class="reference"><a href="#cite_note-16"><span class="cite-bracket">&#91;</span>16<span class="cite-bracket">&#93;</span></a></sup> </p><p>Příklad použití <code>std::regex_iterator</code>: </p> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="cp">#include</span><span class="w"> </span><span class="cpf">&lt;regex&gt;</span> <span class="k">const</span><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">vzorek</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">R</span><span class="err">“</span><span class="p">([</span><span class="o">^</span><span class="w"> </span><span class="p">,.</span><span class="err">\</span><span class="n">t</span><span class="err">\</span><span class="n">n</span><span class="p">]</span><span class="o">+</span><span class="p">)</span><span class="err">“</span><span class="p">;</span><span class="w"> </span><span class="c1">// najde slova oddělená mezerou, čárkou, tečkou, tabelátorem, znakem konce řádku</span> <span class="n">std</span><span class="o">::</span><span class="n">regex</span><span class="w"> </span><span class="nf">rgx</span><span class="p">(</span><span class="n">vzorek</span><span class="p">);</span><span class="w"> </span><span class="c1">// pro neplatný vzorek vyhodí výjimku</span> <span class="k">const</span><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">target</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="err">„</span><span class="n">Unseen</span><span class="w"> </span><span class="n">University</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="n">Ankh</span><span class="o">-</span><span class="n">Morpork</span><span class="err">“</span><span class="p">;</span> <span class="c1">// Použij regex_iterator pro identifikaci všech slov s &#39;target&#39; odděleným znaky &#39;vzorku&#39;.</span> <span class="k">auto</span><span class="w"> </span><span class="n">iter</span><span class="w"> </span><span class="o">=</span> <span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">cregex_iterator</span><span class="p">(</span><span class="n">target</span><span class="p">,</span><span class="w"> </span><span class="n">target</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">strlen</span><span class="p">(</span><span class="n">target</span><span class="p">),</span><span class="w"> </span><span class="n">rgx</span><span class="p">);</span> <span class="c1">// ukončí iterátor posloupnosti</span> <span class="k">auto</span><span class="w"> </span><span class="n">end</span><span class="w"> </span><span class="o">=</span> <span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">cregex_iterator</span><span class="p">();</span> <span class="k">for</span><span class="w"> </span><span class="p">(;</span><span class="w"> </span><span class="n">iter</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="n">end</span><span class="p">;</span><span class="w"> </span><span class="o">++</span><span class="n">iter</span><span class="p">)</span> <span class="p">{</span> <span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="w"> </span><span class="n">match_str</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">iter</span><span class="o">-&gt;</span><span class="n">str</span><span class="p">();</span> <span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">cout</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">match_str</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="sc">&#39;\n&#39;</span><span class="p">;</span> <span class="p">}</span> </pre></div> <p>Knihovna <code>&lt;regex&gt;</code> nevyžaduje žádné úpravy libovolné existující hlavičkových souborů (i když bude používat jim kde je to vhodné) ani rozšíření jádra jazyka. V <a href="/wiki/POSIX" title="POSIX">POSIX</a> iverzi jazyka C jsou regulární výrazy také dostupné pomocí <a href="/w/index.php?title=C_POSIX_knihovna&amp;action=edit&amp;redlink=1" class="new" title="C POSIX knihovna (stránka neexistuje)">C POSIX knihovna#regex.h</a>. </p> <div class="mw-heading mw-heading3"><h3 id="Univerzální_smart_pointery"><span id="Univerz.C3.A1ln.C3.AD_smart_pointery"></span>Univerzální smart pointery</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B11&amp;veaction=edit&amp;section=47" title="Editace sekce: Univerzální smart pointery" class="mw-editsection-visualeditor"><span>editovat</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=C%2B%2B11&amp;action=edit&amp;section=47" title="Editovat zdrojový kód sekce Univerzální smart pointery"><span>editovat zdroj</span></a><span class="mw-editsection-bracket">]</span></span></div> <div class="uvodni-upozorneni hatnote"> Podrobnější informace naleznete v článku&#32;<a href="/wiki/Smart_pointer#C++_smart_pointers" title="Smart pointer">Smart_pointer#C++ smart pointers</a>.</div> <p>C++11 poskytuje <code>std::unique_ptr</code>, a vylepšení na <code>std::shared_ptr</code> a <code>std::weak_ptr</code> z TR1. <code>std::auto_ptr</code> je nedoporučovaný. </p> <div class="mw-heading mw-heading3"><h3 id="Rozšiřitelné_nástroje_pro_generování_náhodných_čísel"><span id="Roz.C5.A1i.C5.99iteln.C3.A9_n.C3.A1stroje_pro_generov.C3.A1n.C3.AD_n.C3.A1hodn.C3.BDch_.C4.8D.C3.ADsel"></span>Rozšiřitelné nástroje pro generování náhodných čísel</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B11&amp;veaction=edit&amp;section=48" title="Editace sekce: Rozšiřitelné nástroje pro generování náhodných čísel" class="mw-editsection-visualeditor"><span>editovat</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=C%2B%2B11&amp;action=edit&amp;section=48" title="Editovat zdrojový kód sekce Rozšiřitelné nástroje pro generování náhodných čísel"><span>editovat zdroj</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Standardní knihovna jazyka C umožňuje generovat <a href="/w/index.php?title=Pseudon%C3%A1hodn%C3%BD_%C4%8D%C3%ADslo&amp;action=edit&amp;redlink=1" class="new" title="Pseudonáhodný číslo (stránka neexistuje)">pseudonáhodná čísla</a> pomocí funkce <code>rand</code>. Algoritmus je plně delegován na knihovnu dodavatele. C++ zdědil toto funkčnost beze změn, ale C++11 poskytuje novou metodu pro generování pseudonáhodných čísel. </p><p>Vytváření náhodných čísel v C++11 je rozděleno na dvě části: generátor, který obsahuje generátor stavu náhodných čísel a produkuje pseudonáhodná čísla; a rozdělení, které určuje rozsah a <a href="/wiki/Distribuce_(matematika)" title="Distribuce (matematika)">matematické rozdělení</a> výsledku. Tyto dvě části jsou zkombinovány pro vytvoření objektu generátoru náhodných čísel. </p><p>Kromě standardní funkce <code>rand</code> z jazyka C, C++11 mechanismus přichází se třemi základními strojovými algoritmy generátoru: </p> <ul><li><a href="/wiki/Line%C3%A1rn%C3%AD_kongruentn%C3%AD_gener%C3%A1tor" title="Lineární kongruentní generátor">Lineární kongruentní generátor</a>: <code>linear_congruential_engine</code>,</li> <li><a href="/w/index.php?title=Ode%C4%8Dten%C3%AD_s_p%C5%99enosem&amp;action=edit&amp;redlink=1" class="new" title="Odečtení s přenosem (stránka neexistuje)">Odečtení s přenosem</a>: <code>subtract_with_carry_engine</code>, a</li> <li><a href="/w/index.php?title=Mersenne_twister&amp;action=edit&amp;redlink=1" class="new" title="Mersenne twister (stránka neexistuje)">Mersenne twister</a>: <code>mersenne_twister_engine</code>.</li></ul> <p>C++11 také poskytuje několik nejpoužívanějších rozdělení: </p> <ul><li><a href="/wiki/Rovnom%C4%9Brn%C3%A9_rozd%C4%9Blen%C3%AD_(diskr%C3%A9tn%C3%AD)" class="mw-redirect" title="Rovnoměrné rozdělení (diskrétní)">Rovnoměrné rozdělení (diskrétní)</a>: <code>uniform_int_distribution</code>,</li> <li><a href="/wiki/Rovnom%C4%9Brn%C3%A9_rozd%C4%9Blen%C3%AD" title="Rovnoměrné rozdělení">Rovnoměrné rozdělení</a>: <code>uniform_real_distribution</code>,</li> <li><a href="/wiki/Alternativn%C3%AD_rozd%C4%9Blen%C3%AD" title="Alternativní rozdělení">Alternativní rozdělení</a>: <code>bernoulli_distribution</code>,</li> <li><a href="/wiki/Binomick%C3%A9_rozd%C4%9Blen%C3%AD" title="Binomické rozdělení">Binomické rozdělení</a>: <code>binomial_distribution</code>,</li> <li><a href="/wiki/Geometrick%C3%A9_rozd%C4%9Blen%C3%AD" title="Geometrické rozdělení">Geometrické rozdělení</a>: <code>geometric_distribution</code>,</li> <li><a href="/w/index.php?title=Negativn%C4%9B_binomick%C3%A9_rozd%C4%9Blen%C3%AD&amp;action=edit&amp;redlink=1" class="new" title="Negativně binomické rozdělení (stránka neexistuje)">Negativně binomické rozdělení</a>: <code>negative_binomial_distribution</code>,</li> <li><a href="/wiki/Poissonovo_rozd%C4%9Blen%C3%AD" title="Poissonovo rozdělení">Poissonovo rozdělení</a>: <code>poisson_distribution</code>,</li> <li><a href="/wiki/Exponenci%C3%A1ln%C3%AD_rozd%C4%9Blen%C3%AD" title="Exponenciální rozdělení">Exponenciální rozdělení</a>: <code>exponential_distribution</code>,</li> <li><a href="/wiki/Rozd%C4%9Blen%C3%AD_gama" title="Rozdělení gama">Rozdělení gama</a>: <code>gamma_distribution</code>,</li> <li><a href="/wiki/Weibullovo_rozd%C4%9Blen%C3%AD" title="Weibullovo rozdělení">Weibullovo rozdělení</a>: <code>weibull_distribution</code>,</li> <li><a href="/w/index.php?title=Zobecn%C4%9Bn%C3%BD_extr%C3%A9mn%C3%AD_hodnota_rozd%C4%9Blen%C3%AD&amp;action=edit&amp;redlink=1" class="new" title="Zobecněný extrémní hodnota rozdělení (stránka neexistuje)">Zobecněný extrémní hodnota rozdělení</a>: <code>extreme_value_distribution</code>,</li> <li><a href="/wiki/Norm%C3%A1ln%C3%AD_rozd%C4%9Blen%C3%AD" title="Normální rozdělení">Normální rozdělení</a>: <code>normal_distribution</code>,</li> <li><a href="/wiki/Logaritmicko-norm%C3%A1ln%C3%AD_rozd%C4%9Blen%C3%AD" title="Logaritmicko-normální rozdělení">Logaritmicko-normální rozdělení</a>: <code>lognormal_distribution</code>,</li> <li><a href="/wiki/Rozd%C4%9Blen%C3%AD_ch%C3%AD_kvadr%C3%A1t" title="Rozdělení chí kvadrát">Rozdělení chí kvadrát</a>: <code>chi_squared_distribution</code>,</li> <li><a href="/wiki/Cauchyho_rozd%C4%9Blen%C3%AD" title="Cauchyho rozdělení">Cauchyho rozdělení</a>: <code>cauchy_distribution</code>,</li> <li><a href="/wiki/Rozd%C4%9Blen%C3%AD_F" title="Rozdělení F">Rozdělení F</a>: <code>fisher_f_distribution</code>,</li> <li><a href="/wiki/Studentovo_rozd%C4%9Blen%C3%AD" title="Studentovo rozdělení">Studentovo rozdělení</a>: <code>student_t_distribution</code>,</li> <li><a href="/wiki/Rozd%C4%9Blen%C3%AD_pravd%C4%9Bpodobnosti" title="Rozdělení pravděpodobnosti">Rozdělení pravděpodobnosti</a>: <code>discrete_distribution</code>,</li> <li><a href="/w/index.php?title=Schodovit%C3%A1_funkce&amp;action=edit&amp;redlink=1" class="new" title="Schodovitá funkce (stránka neexistuje)">Schodovitá funkce</a>: <code>piecewise_constant_distribution</code> a</li> <li><a href="/w/index.php?title=Po_%C4%8D%C3%A1stech_line%C3%A1rn%C3%AD_funkce&amp;action=edit&amp;redlink=1" class="new" title="Po částech lineární funkce (stránka neexistuje)">Po částech lineární funkce</a>: <code>piecewise_linear_distribution</code>.</li></ul> <p>Generátor a distribuci lze kombinovat jako v tomto příkladě: </p> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="cp">#include</span><span class="w"> </span><span class="cpf">&lt;random&gt;</span> <span class="cp">#include</span><span class="w"> </span><span class="cpf">&lt;functional&gt;</span> <span class="n">std</span><span class="o">::</span><span class="n">uniform_int_distribution</span><span class="o">&lt;</span><span class="kt">int</span><span class="o">&gt;</span><span class="w"> </span><span class="n">rozdeleni</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="mi">99</span><span class="p">);</span> <span class="n">std</span><span class="o">::</span><span class="n">mt19937</span><span class="w"> </span><span class="n">stroj</span><span class="p">;</span><span class="w"> </span><span class="c1">// Mersenneho twister MT19937</span> <span class="k">auto</span><span class="w"> </span><span class="n">generator</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">bind</span><span class="p">(</span><span class="n">rozdeleni</span><span class="p">,</span><span class="w"> </span><span class="n">stroj</span><span class="p">);</span> <span class="kt">int</span><span class="w"> </span><span class="n">random</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">generator</span><span class="p">();</span><span class="w"> </span><span class="c1">// Generuje rovnoměrně rozdělená celá čísla mezi 0 a 99.</span> <span class="kt">int</span><span class="w"> </span><span class="n">random2</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">distribution</span><span class="p">(</span><span class="n">stroj</span><span class="p">);</span><span class="w"> </span><span class="c1">// Generují jiný vzorek přímo pomocí objektů rozdělení a stroj.</span> </pre></div> <div class="mw-heading mw-heading3"><h3 id="Adaptér"><span id="Adapt.C3.A9r"></span>Adaptér</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B11&amp;veaction=edit&amp;section=49" title="Editace sekce: Adaptér" class="mw-editsection-visualeditor"><span>editovat</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=C%2B%2B11&amp;action=edit&amp;section=49" title="Editovat zdrojový kód sekce Adaptér"><span>editovat zdroj</span></a><span class="mw-editsection-bracket">]</span></span></div> <p><a href="/wiki/Adapt%C3%A9r_(n%C3%A1vrhov%C3%BD_vzor)" title="Adaptér (návrhový vzor)">Adaptér</a> (<a href="/wiki/Angli%C4%8Dtina" title="Angličtina">anglicky</a> <span class="cizojazycne" lang="en" title="angličtina"><i>wrapper</i></span>) se získá z instance šablony třídy <code>reference_wrapper</code>. Adaptéry jsou podobné normálním referencím (<code>&amp;</code>) v jazyce C++. Pro získání adaptéru z libovolného objektu se používá funkční šablona <code>ref</code> (pro konstantní reference <code>cref</code>). </p><p>Adaptéry jsou užitečné především pro funkční šablony, kde jsou potřeba reference na parametry, nikoli kopie: </p> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="c1">// Tato funkce dostane odkaz na parametr &#39;r&#39; a inkrementuje jej.</span> <span class="kt">void</span><span class="w"> </span><span class="nf">func</span><span class="w"> </span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="o">&amp;</span><span class="n">r</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="n">r</span><span class="o">++</span><span class="p">;</span><span class="w"> </span><span class="p">}</span> <span class="c1">// Funkční šablona.</span> <span class="k">template</span><span class="o">&lt;</span><span class="k">class</span><span class="w"> </span><span class="nc">F</span><span class="p">,</span><span class="w"> </span><span class="k">class</span><span class="w"> </span><span class="nc">P</span><span class="o">&gt;</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="n">g</span><span class="w"> </span><span class="p">(</span><span class="n">F</span><span class="w"> </span><span class="n">f</span><span class="p">,</span><span class="w"> </span><span class="n">P</span><span class="w"> </span><span class="n">t</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="n">f</span><span class="p">(</span><span class="n">t</span><span class="p">);</span><span class="w"> </span><span class="p">}</span> <span class="kt">int</span><span class="w"> </span><span class="n">main</span><span class="p">()</span> <span class="p">{</span> <span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span> <span class="w"> </span><span class="n">g</span><span class="w"> </span><span class="p">(</span><span class="n">func</span><span class="p">,</span><span class="w"> </span><span class="n">i</span><span class="p">);</span><span class="w"> </span><span class="c1">// &#39;g&lt;void(int &amp;r), int&gt;&#39; je instanciováno</span> <span class="w"> </span><span class="c1">// pak &#39;i&#39; nebude změněno.</span> <span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">cout</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span><span class="w"> </span><span class="c1">// Vypíše -&gt; 0</span> <span class="w"> </span><span class="n">g</span><span class="w"> </span><span class="p">(</span><span class="n">func</span><span class="p">,</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">ref</span><span class="p">(</span><span class="n">i</span><span class="p">));</span><span class="w"> </span><span class="c1">// &#39;g&lt;void(int &amp;r),reference_wrapper&lt;int&gt;&gt;&#39; je instanciováno</span> <span class="w"> </span><span class="c1">// pak &#39;i&#39; bude změněno.</span> <span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">cout</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span><span class="w"> </span><span class="c1">// Vypíše -&gt; 1</span> <span class="p">}</span> </pre></div> <p>Tento nový nástroj byl přidán k existujícímu hlavičkovému souboru <code>&lt;functional&gt;</code> a nevyžaduje další rozšíření jazyka C++. </p> <div class="mw-heading mw-heading3"><h3 id="Polymorfní_adaptéry_pro_objekty_funkcí"><span id="Polymorfn.C3.AD_adapt.C3.A9ry_pro_objekty_funkc.C3.AD"></span>Polymorfní adaptéry pro objekty funkcí</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B11&amp;veaction=edit&amp;section=50" title="Editace sekce: Polymorfní adaptéry pro objekty funkcí" class="mw-editsection-visualeditor"><span>editovat</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=C%2B%2B11&amp;action=edit&amp;section=50" title="Editovat zdrojový kód sekce Polymorfní adaptéry pro objekty funkcí"><span>editovat zdroj</span></a><span class="mw-editsection-bracket">]</span></span></div> <p><a href="/wiki/Polymorfismus_(programov%C3%A1n%C3%AD)" title="Polymorfismus (programování)">Polymorfní</a> <a href="/wiki/Adapt%C3%A9r_(n%C3%A1vrhov%C3%BD_vzor)" title="Adaptér (návrhový vzor)">adaptéry</a> pro <a href="/w/index.php?title=Funk%C4%8Dn%C3%AD_objekt&amp;action=edit&amp;redlink=1" class="new" title="Funkční objekt (stránka neexistuje)">objekty funkcí</a> se sémanticky a syntakticky podobají <a href="/w/index.php?title=Ukazatel_na_funkci&amp;action=edit&amp;redlink=1" class="new" title="Ukazatel na funkci (stránka neexistuje)">ukazatelům na funkce</a>, ale jsou méně striktně vázaný a mohou se bez rozdílů odkazovat na cokoli, co lze volat (ukazatele na funkce, ukazatele na členské funkce nebo funktory), jejichž argumenty jsou kompatibilní s argumenty adaptéru. </p><p>Příklad může vyjasnit jeho charakteristiky: </p> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="n">std</span><span class="o">::</span><span class="n">function</span><span class="o">&lt;</span><span class="kt">int</span><span class="p">(</span><span class="kt">int</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="p">)</span><span class="o">&gt;</span><span class="w"> </span><span class="n">func</span><span class="p">;</span><span class="w"> </span><span class="c1">// Vytvoření adaptéru použitím</span> <span class="w"> </span><span class="c1">// šablonové třídy &#39;function&#39;.</span> <span class="n">std</span><span class="o">::</span><span class="n">plus</span><span class="o">&lt;</span><span class="kt">int</span><span class="o">&gt;</span><span class="w"> </span><span class="n">add</span><span class="p">;</span><span class="w"> </span><span class="c1">// &#39;plus&#39; je deklarováno jako &#39;šablona&lt;classT&gt; T plus( T, T )&#160;;&#39;</span> <span class="w"> </span><span class="c1">// pak &#39;add&#39; je typu &#39;int add( int x, int y )&#39;.</span> <span class="n">func</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">add</span><span class="p">;</span><span class="w"> </span><span class="c1">// OK - Parametry a návratové typy jsou stejné.</span> <span class="kt">int</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">func</span><span class="w"> </span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">);</span><span class="w"> </span><span class="c1">// POZNÁMKA: pokud se adaptér &#39;func&#39; neodkazuje na žádnou funkce,</span> <span class="w"> </span><span class="c1">// bude vyhozena výjimka &#39;std::bad_function_call&#39;.</span> <span class="n">std</span><span class="o">::</span><span class="n">function</span><span class="o">&lt;</span><span class="kt">bool</span><span class="p">(</span><span class="kt">short</span><span class="p">,</span><span class="w"> </span><span class="kt">short</span><span class="p">)</span><span class="o">&gt;</span><span class="w"> </span><span class="n">func2</span><span class="w"> </span><span class="p">;</span> <span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">func2</span><span class="p">)</span> <span class="p">{</span> <span class="w"> </span><span class="c1">// Pravdivé, protože do &#39;func2&#39; ještě nebyla přiřazena funkce.</span> <span class="w"> </span><span class="kt">bool</span><span class="w"> </span><span class="nf">adjacent</span><span class="p">(</span><span class="kt">long</span><span class="w"> </span><span class="n">x</span><span class="p">,</span><span class="w"> </span><span class="kt">long</span><span class="w"> </span><span class="n">y</span><span class="p">);</span> <span class="w"> </span><span class="n">func2</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="o">&amp;</span><span class="n">adjacent</span><span class="p">;</span><span class="w"> </span><span class="c1">// OK - Parametry a návratové typy jsou konvertovatelné.</span> <span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">Test</span> <span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="kt">bool</span><span class="w"> </span><span class="nf">operator</span><span class="p">()(</span><span class="kt">short</span><span class="w"> </span><span class="n">x</span><span class="p">,</span><span class="w"> </span><span class="kt">short</span><span class="w"> </span><span class="n">y</span><span class="p">);</span> <span class="w"> </span><span class="p">};</span> <span class="w"> </span><span class="n">Test</span><span class="w"> </span><span class="n">vozidlo</span><span class="p">;</span> <span class="w"> </span><span class="n">func</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">ref</span><span class="p">(</span><span class="n">vozidlo</span><span class="p">);</span><span class="w"> </span><span class="c1">// &#39;std::ref&#39; je šablona funkce, které vrací adaptér</span> <span class="w"> </span><span class="c1">// členské funkce &#39;operator()&#39; struktury &#39;vozidlo&#39;.</span> <span class="p">}</span> <span class="n">func</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">func2</span><span class="p">;</span><span class="w"> </span><span class="c1">// OK - Parametry a návratové typy jsou konvertovatelné.</span> </pre></div> <p>Šablonová třída <code>function</code> je definována v hlavičkovém souboru <code>&lt;functional&gt;</code> bez potřeby měnit jazyk C++. </p> <div class="mw-heading mw-heading3"><h3 id="Typ_rysy_pro_metaprogramování"><span id="Typ_rysy_pro_metaprogramov.C3.A1n.C3.AD"></span>Typ rysy pro metaprogramování</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B11&amp;veaction=edit&amp;section=51" title="Editace sekce: Typ rysy pro metaprogramování" class="mw-editsection-visualeditor"><span>editovat</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=C%2B%2B11&amp;action=edit&amp;section=51" title="Editovat zdrojový kód sekce Typ rysy pro metaprogramování"><span>editovat zdroj</span></a><span class="mw-editsection-bracket">]</span></span></div> <p><a href="/wiki/Metaprogramov%C3%A1n%C3%AD" title="Metaprogramování">Metaprogramování</a> je vytváření programů, které vytvářejí nebo mění jiný program (nebo sebe sama). K tomu může docházet při překladu nebo při provádění. <a href="/w/index.php?title=ISO/IEC_JTC_1/SC_22&amp;action=edit&amp;redlink=1" class="new" title="ISO/IEC JTC 1/SC 22 (stránka neexistuje)">Standardizační komise C++</a> se rozhodla zavést knihovnu pro metaprogramování během překladu se šablonami. </p><p>Následující metaprogram používá <a href="/wiki/Rekurze" title="Rekurze">rekurzi</a> instancí šablon pro výpočet celočíselných mocnin podle normy C++03: </p> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="k">template</span><span class="o">&lt;</span><span class="n">intB</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">N</span><span class="o">&gt;</span> <span class="k">struct</span><span class="w"> </span><span class="nc">Pow</span> <span class="p">{</span> <span class="w"> </span><span class="c1">// rekurzivní volání a rekombinace.</span> <span class="w"> </span><span class="k">enum</span><span class="p">{</span><span class="w"> </span><span class="n">hodnota</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">B</span><span class="o">*</span><span class="n">Pow</span><span class="o">&lt;</span><span class="n">b</span><span class="p">,</span><span class="w"> </span><span class="n">N</span><span class="mi">-1</span><span class="o">&gt;::</span><span class="n">value</span><span class="w"> </span><span class="p">};</span> <span class="p">};</span> <span class="k">template</span><span class="o">&lt;</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">B</span><span class="w"> </span><span class="o">&gt;</span> <span class="k">struct</span><span class="w"> </span><span class="nc">Pow</span><span class="o">&lt;</span><span class="n">b</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="o">&gt;</span> <span class="p">{</span> <span class="w"> </span><span class="c1">// &#39;&#39;N == 0&#39;&#39; podmínka pro ukončení.</span> <span class="w"> </span><span class="k">enum</span><span class="p">{</span><span class="w"> </span><span class="n">hodnota</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="p">};</span> <span class="p">};</span> <span class="kt">int</span><span class="w"> </span><span class="n">tri_na_ctvrtou</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">Pow</span><span class="o">&lt;</span><span class="mi">3</span><span class="p">,</span><span class="w"> </span><span class="mi">4</span><span class="o">&gt;::</span><span class="n">value</span><span class="p">;</span> </pre></div> <p>Mnoho algoritmů může pracovat s různými typy dat; <a href="/wiki/%C5%A0ablona_(programov%C3%A1n%C3%AD)" class="mw-redirect" title="Šablona (programování)">šablony</a> v C++ podporují <a href="/wiki/Generick%C3%A9_programov%C3%A1n%C3%AD" title="Generické programování">generické programování</a> a činí kód kompaktnější a užitečnější. Často však algoritmy potřebují informace o typech dat, které používají. Tyto informace lze získat při instanciaci šablony třídy pomocí <i>typových rysů</i>. </p><p><i>Typové rysy</i> mohou identifikovat kategorii objektu a všechny charakteristiky třídy (nebo struktury). Jsou definovány v novém hlavičkovém souboru <code>&lt;type_traits&gt;</code>. </p><p>V dalším příkladě existuje šablonová funkce ‘elaborate’, který v závislosti na daný datové typy, bude instanciovat jeden ze dvou navržený algoritmy (<code>Algoritmus::do_it</code>). </p> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="c1">// Poprvé způsob of fungující.</span> <span class="k">template</span><span class="o">&lt;</span><span class="w"> </span><span class="kt">bool</span><span class="w"> </span><span class="n">B</span><span class="w"> </span><span class="o">&gt;</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">Algoritmus</span> <span class="p">{</span> <span class="w"> </span><span class="k">template</span><span class="o">&lt;</span><span class="n">classT1</span><span class="p">,</span><span class="w"> </span><span class="k">class</span><span class="w"> </span><span class="nc">T2</span><span class="o">&gt;</span><span class="w"> </span><span class="k">static</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">do_it</span><span class="w"> </span><span class="p">(</span><span class="n">T1</span><span class="w"> </span><span class="o">&amp;</span><span class="p">,</span><span class="w"> </span><span class="n">T2</span><span class="w"> </span><span class="o">&amp;</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="cm">/*...*/</span><span class="w"> </span><span class="p">}</span> <span class="p">};</span> <span class="c1">// Druhý způsob of fungující.</span> <span class="k">template</span><span class="o">&lt;&gt;</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">Algoritmus</span><span class="o">&lt;</span><span class="nb">true</span><span class="o">&gt;</span> <span class="p">{</span> <span class="w"> </span><span class="k">template</span><span class="o">&lt;</span><span class="n">classT1</span><span class="p">,</span><span class="w"> </span><span class="k">class</span><span class="w"> </span><span class="nc">T2</span><span class="o">&gt;</span><span class="w"> </span><span class="k">static</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">do_it</span><span class="w"> </span><span class="p">(</span><span class="n">T1</span><span class="p">,</span><span class="w"> </span><span class="n">T2</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="cm">/*...*/</span><span class="w"> </span><span class="p">}</span> <span class="p">};</span> <span class="c1">// Instanciace &#39;elaborate&#39; bude automaticky instanciovat správný způsob jak pracovat.</span> <span class="k">template</span><span class="o">&lt;</span><span class="n">classT1</span><span class="p">,</span><span class="w"> </span><span class="k">class</span><span class="w"> </span><span class="nc">T2</span><span class="o">&gt;</span> <span class="kt">int</span><span class="w"> </span><span class="n">elaborate</span><span class="w"> </span><span class="p">(</span><span class="n">T1</span><span class="w"> </span><span class="n">A</span><span class="p">,</span><span class="w"> </span><span class="n">T2</span><span class="w"> </span><span class="n">B</span><span class="p">)</span> <span class="p">{</span> <span class="w"> </span><span class="c1">// Druhý způsob použít, pouze pokud &#39;T1&#39; je celé číslo a &#39;T2&#39; číslo</span> <span class="w"> </span><span class="c1">// s pohyblivou řádovou čárkou, jinak použít první způsob.</span> <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">Algorithm</span><span class="o">&lt;</span><span class="n">std</span><span class="o">::</span><span class="n">is_integral</span><span class="o">&lt;</span><span class="n">t1</span><span class="o">&gt;::</span><span class="n">value</span><span class="w"> </span><span class="o">&amp;&amp;</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">is_floating_point</span><span class="o">&lt;</span><span class="n">t2</span><span class="o">&gt;::</span><span class="n">value</span><span class="o">&gt;::</span><span class="n">do_it</span><span class="p">(</span><span class="w"> </span><span class="n">A</span><span class="p">,</span><span class="w"> </span><span class="n">B</span><span class="w"> </span><span class="p">)</span><span class="w"> </span><span class="p">;</span> <span class="p">}</span> </pre></div> <p>Pomocí <i>typových rysů</i> definovaných v hlavičkovém souboru <code>&lt;type_traits&gt;</code> je také možné vytvářet operace pro transformace typů (<code>static_cast</code> a <code>const_cast</code> jsou uvnitř šablony nedostatečné). </p><p>Tento typ programování vytváří elegantní a stručný kód; slabinou těchto techniky však je ladění: je nepříjemné při překladu a velmi obtížné při provádění programu. </p> <div class="mw-heading mw-heading3"><h3 id="Uniformní_metoda_výpočtu_návratového_typu_funkčních_objektů"><span id="Uniformn.C3.AD_metoda_v.C3.BDpo.C4.8Dtu_n.C3.A1vratov.C3.A9ho_typu_funk.C4.8Dn.C3.ADch_objekt.C5.AF"></span>Uniformní metoda výpočtu návratového typu funkčních objektů</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B11&amp;veaction=edit&amp;section=52" title="Editace sekce: Uniformní metoda výpočtu návratového typu funkčních objektů" class="mw-editsection-visualeditor"><span>editovat</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=C%2B%2B11&amp;action=edit&amp;section=52" title="Editovat zdrojový kód sekce Uniformní metoda výpočtu návratového typu funkčních objektů"><span>editovat zdroj</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Určování návratového typu objektu šablony funkce v době překladu není intuitivní. Zejména pokud návratová hodnota závisí na parametrech funkce. Jako příklad: </p> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="k">struct</span><span class="w"> </span><span class="nc">Clear</span> <span class="p">{</span> <span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="nf">operator</span><span class="p">()(</span><span class="kt">int</span><span class="p">)</span><span class="w"> </span><span class="k">const</span><span class="p">;</span><span class="w"> </span><span class="c1">// Typ parametru je</span> <span class="w"> </span><span class="kt">double</span><span class="w"> </span><span class="nf">operator</span><span class="p">()(</span><span class="kt">double</span><span class="p">)</span><span class="w"> </span><span class="k">const</span><span class="p">;</span><span class="w"> </span><span class="c1">// stejný jako návratový typ.</span> <span class="p">};</span> <span class="k">template</span><span class="w"> </span><span class="o">&lt;</span><span class="n">classObj</span><span class="o">&gt;</span> <span class="k">class</span><span class="w"> </span><span class="nc">Calculus</span> <span class="p">{</span> <span class="k">public</span><span class="o">:</span> <span class="w"> </span><span class="k">template</span><span class="o">&lt;</span><span class="k">class</span><span class="w"> </span><span class="nc">Arg</span><span class="o">&gt;</span><span class="w"> </span><span class="n">Arg</span><span class="w"> </span><span class="k">operator</span><span class="p">()(</span><span class="n">Arg</span><span class="o">&amp;</span><span class="w"> </span><span class="n">a</span><span class="p">)</span><span class="w"> </span><span class="k">const</span> <span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">member</span><span class="p">(</span><span class="n">a</span><span class="p">);</span> <span class="w"> </span><span class="p">}</span> <span class="k">private</span><span class="o">:</span> <span class="w"> </span><span class="n">Obj</span><span class="w"> </span><span class="n">member</span><span class="p">;</span> <span class="p">};</span> </pre></div> <p>Instanciací šablony třídy <code>Calculus&lt;clear&gt;</code>, funkce objekt of <code>calculus</code> bude mít vždy stejný návratový typ jako funkční objekt struktury <code>Clear</code>. Je-li však dána třída <code>Confused</code> níže: </p> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="k">struct</span><span class="w"> </span><span class="nc">Confused</span> <span class="p">{</span> <span class="w"> </span><span class="kt">double</span><span class="w"> </span><span class="nf">operator</span><span class="p">()(</span><span class="kt">int</span><span class="p">)</span><span class="w"> </span><span class="k">const</span><span class="p">;</span><span class="w"> </span><span class="c1">// Typ parametru není</span> <span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="nf">operator</span><span class="p">()(</span><span class="kt">double</span><span class="p">)</span><span class="w"> </span><span class="k">const</span><span class="p">;</span><span class="w"> </span><span class="c1">// roven návratovému typu.</span> <span class="p">};</span> </pre></div> <p>Snaha instanciovat <code>Calculus&lt;confused&gt;</code> způsobí, že návratový typ struktury <code>Calculus</code> nebude stejný jako typ třídy <code>Confused</code>. Překladač může generovat varování o konverzi z <code>int</code> na <code>double</code> a naopak. </p><p>TR1 představilo a C++11 přejalo, šablonovou třídu <code>std::result_of</code>, která umožňuje určit a používat návratový typ objektu funkce v deklaracích. Objekt <code>CalculusVer2</code> používá objekt <code>std::result_of</code> pro zjištění návratového typu objektu funkce: </p> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="k">template</span><span class="o">&lt;</span><span class="w"> </span><span class="k">class</span><span class="w"> </span><span class="nc">Obj</span><span class="w"> </span><span class="o">&gt;</span> <span class="k">class</span><span class="w"> </span><span class="nc">CalculusVer2</span> <span class="p">{</span> <span class="k">public</span><span class="o">:</span> <span class="w"> </span><span class="k">template</span><span class="o">&lt;</span><span class="k">class</span><span class="w"> </span><span class="nc">Arg</span><span class="o">&gt;</span> <span class="w"> </span><span class="k">typename</span><span class="w"> </span><span class="nc">std</span><span class="o">::</span><span class="n">result_of</span><span class="o">&lt;</span><span class="n">obj</span><span class="p">(</span><span class="n">Arg</span><span class="p">)</span><span class="o">&gt;::</span><span class="n">type</span><span class="w"> </span><span class="k">operator</span><span class="p">()(</span><span class="n">Arg</span><span class="o">&amp;</span><span class="w"> </span><span class="n">a</span><span class="p">)</span><span class="w"> </span><span class="k">const</span> <span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">member</span><span class="p">(</span><span class="n">a</span><span class="p">);</span> <span class="w"> </span><span class="p">}</span> <span class="k">private</span><span class="o">:</span> <span class="w"> </span><span class="n">Obj</span><span class="w"> </span><span class="n">member</span><span class="p">;</span> <span class="p">};</span> </pre></div> <p>Díky tomu v instancích funkčního objektu <code>CalculusVer2&lt;confused&gt;</code> nejsou žádné konverze, varování ani chyby. </p><p>Jedinou změnou oproti verzi <code>std::result_of</code> z TR1 je, že TR1 verze umožňovala, aby implementace selhala při určování typu výsledku volání funkce. Kvůli změnám v C++ pro podporu <code><a href="#Typová_inference">decltype</a></code>, <code>std::result_of</code> v C++11 již tyto speciální případy nepotřebuje; implementace musí být schopny odvodit typ ve všech případech. </p> <div class="mw-heading mw-heading2"><h2 id="Vylepšení_kompatibility_s_jazykem_C"><span id="Vylep.C5.A1en.C3.AD_kompatibility_s_jazykem_C"></span>Vylepšení kompatibility s jazykem C</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B11&amp;veaction=edit&amp;section=53" title="Editace sekce: Vylepšení kompatibility s jazykem C" class="mw-editsection-visualeditor"><span>editovat</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=C%2B%2B11&amp;action=edit&amp;section=53" title="Editovat zdrojový kód sekce Vylepšení kompatibility s jazykem C"><span>editovat zdroj</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Pro kompatibilitu s <a href="/wiki/C_(programovac%C3%AD_jazyk)" title="C (programovací jazyk)">jazykem C</a> podle normy C99 byly přidány tyto vlastnosti:<sup id="cite_ref-17" class="reference"><a href="#cite_note-17"><span class="cite-bracket">&#91;</span>17<span class="cite-bracket">&#93;</span></a></sup> </p> <ul><li>Preprocessor:<sup id="cite_ref-18" class="reference"><a href="#cite_note-18"><span class="cite-bracket">&#91;</span>18<span class="cite-bracket">&#93;</span></a></sup> <ul><li><a href="/w/index.php?title=Variadick%C3%A9_makro&amp;action=edit&amp;redlink=1" class="new" title="Variadické makro (stránka neexistuje)">variadická makra</a>,</li> <li>zřetězení sousedících úzkých nebo širokých řetězcových literálů,</li> <li><code>_Pragma()</code> – ekvivalent direktivy <code>#pragma</code>.</li></ul></li> <li><code>long long</code> – celočíselný typ s velikostí nejméně 64 bitů</li> <li><code>__func__</code> – makro, které se vyhodnocuje na jméno funkce, ve které je použito.</li> <li>Hlavičkové soubory: <ul><li><code>cstdbool</code> (<code>stdbool.h</code>),</li> <li><code>cstdint</code> (<code>stdint.h</code>),</li> <li><code>cinttypes</code> (<code>inttypes.h</code>).</li></ul></li></ul> <div class="mw-heading mw-heading2"><h2 id="Vlastnosti_původně_plánované,_ale_odstraněné_nebo_nezahrnuté"><span id="Vlastnosti_p.C5.AFvodn.C4.9B_pl.C3.A1novan.C3.A9.2C_ale_odstran.C4.9Bn.C3.A9_nebo_nezahrnut.C3.A9"></span>Vlastnosti původně plánované, ale odstraněné nebo nezahrnuté</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B11&amp;veaction=edit&amp;section=54" title="Editace sekce: Vlastnosti původně plánované, ale odstraněné nebo nezahrnuté" class="mw-editsection-visualeditor"><span>editovat</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=C%2B%2B11&amp;action=edit&amp;section=54" title="Editovat zdrojový kód sekce Vlastnosti původně plánované, ale odstraněné nebo nezahrnuté"><span>editovat zdroj</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Hlavičky pro zvláštní TR: </p> <ul><li><a rel="nofollow" class="external text" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3347.pdf">Moduly</a></li> <li>Desítkové typy</li> <li>Speciální matematické funkce</li></ul> <p>Odloženo: </p> <ul><li><a href="/wiki/Koncepty_(C%2B%2B)" title="Koncepty (C++)">Koncepty</a></li> <li>Úplnější nebo vyžadované podpora garbage kolektoru</li> <li>Reflexe</li> <li>Oblasti platnosti maker</li></ul> <div class="mw-heading mw-heading2"><h2 id="Odstraněné_a_nedoporučované_vlastnosti"><span id="Odstran.C4.9Bn.C3.A9_a_nedoporu.C4.8Dovan.C3.A9_vlastnosti"></span>Odstraněné a nedoporučované vlastnosti</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B11&amp;veaction=edit&amp;section=55" title="Editace sekce: Odstraněné a nedoporučované vlastnosti" class="mw-editsection-visualeditor"><span>editovat</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=C%2B%2B11&amp;action=edit&amp;section=55" title="Editovat zdrojový kód sekce Odstraněné a nedoporučované vlastnosti"><span>editovat zdroj</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Termín <a href="/w/index.php?title=Sekven%C4%8Dn%C3%AD_bod&amp;action=edit&amp;redlink=1" class="new" title="Sekvenční bod (stránka neexistuje)">sekvenční bod</a> byl odstraněn. Je nahrazen stanovením, že jedna operace je sekvencována před jinou nebo že dvě operace nejsou sekvencované.<sup id="cite_ref-19" class="reference"><a href="#cite_note-19"><span class="cite-bracket">&#91;</span>19<span class="cite-bracket">&#93;</span></a></sup> </p><p>Původní použití klíčového slova <code><a href="/w/index.php?title=Export_(C%2B%2B)&amp;action=edit&amp;redlink=1" class="new" title="Export (C++) (stránka neexistuje)">export</a></code> bylo odstraněno.<sup id="cite_ref-sutter0310_20-0" class="reference"><a href="#cite_note-sutter0310-20"><span class="cite-bracket">&#91;</span>20<span class="cite-bracket">&#93;</span></a></sup> Slovo <code>export</code> však zůstává klíčovým slovem, je rezervované pro případné další použití. </p><p>Dynamická <a href="/wiki/V%C3%BDjimka_(programov%C3%A1n%C3%AD)" title="Výjimka (programování)">specifikace výjimek</a> je nedoporučovaná.<sup id="cite_ref-sutter0310_20-1" class="reference"><a href="#cite_note-sutter0310-20"><span class="cite-bracket">&#91;</span>20<span class="cite-bracket">&#93;</span></a></sup> Specifikace funkcí, které nevyhazují výjimky, je v době překladu dostupná pomocí klíčového slova <code>noexcept</code>, které je užitečné pro optimalizaci. </p><p><code><a href="/w/index.php?title=Auto_ptr&amp;action=edit&amp;redlink=1" class="new" title="Auto ptr (stránka neexistuje)">std::auto_ptr</a></code> je není nedoporučované, bylo nahrazeno <code>std::unique_ptr</code>. </p><p>Základní třídy funkčních objektů (<code>std::unary_function</code>, <code>std::binary_function</code>), adaptéry na ukazatele na funkce, adaptéry na ukazatele na členy a binder třídy jsou nyní nedoporučované. </p> <div class="mw-heading mw-heading2"><h2 id="Odkazy">Odkazy</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B11&amp;veaction=edit&amp;section=56" title="Editace sekce: Odkazy" class="mw-editsection-visualeditor"><span>editovat</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=C%2B%2B11&amp;action=edit&amp;section=56" title="Editovat zdrojový kód sekce Odkazy"><span>editovat zdroj</span></a><span class="mw-editsection-bracket">]</span></span></div> <div class="mw-heading mw-heading3"><h3 id="Reference">Reference</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B11&amp;veaction=edit&amp;section=57" title="Editace sekce: Reference" class="mw-editsection-visualeditor"><span>editovat</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=C%2B%2B11&amp;action=edit&amp;section=57" title="Editovat zdrojový kód sekce Reference"><span>editovat zdroj</span></a><span class="mw-editsection-bracket">]</span></span></div> <p><span class="plainlinks"><i>V tomto článku byl použit <a href="/wiki/Wikipedie:WikiProjekt_P%C5%99eklad/Rady" title="Wikipedie:WikiProjekt Překlad/Rady">překlad</a> textu z článku <a class="external text" href="https://en.wikipedia.org/wiki/C%2B%2B11?oldid=1232295810"><span class="cizojazycne" lang="en" title="angličtina">C++11</span></a> na anglické Wikipedii.</i></span></p><div class="mw-references-wrap mw-references-columns"><ol class="references"> <li id="cite_note-:0-1"><span class="mw-cite-backlink">↑ <a href="#cite_ref-:0_1-0"><sup style="font-style: italic; font-weight: bold; vertical-align: top">a</sup></a> <a href="#cite_ref-:0_1-1"><sup style="font-style: italic; font-weight: bold; vertical-align: top">b</sup></a></span> <span class="reference-text"><cite class="book" style="font-style:normal;" id="CITEREFStroustrup">STROUSTRUP, Bjarne. <i>C++11 FAQ</i> [online]. stroustrup.com [cit. 2014-10-15]. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20181006014513/http://www.stroustrup.com/C++11FAQ.html">Dostupné v&#160;archivu</a> pořízeném z&#160;<a rel="nofollow" class="external text" href="http://www.stroustrup.com/C++11FAQ.html">originálu</a> dne&#160;2018-10-06.</cite><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rfr_id=info:sid/cs.wikipedia.org:templatecitaceelmonografie&amp;rft.btitle=C%2B%2B11+FAQ&amp;rft_id=http%3A%2F%2Fwww.stroustrup.com%2FC%2B%2B11FAQ.html&amp;rft.aulast=Stroustrup&amp;rft.aufirst=Bjarne&amp;rft.pub=stroustrup.com"><span style="display:none">&#160;</span></span></span> </li> <li id="cite_note-2"><span class="mw-cite-backlink"><a href="#cite_ref-2">↑</a></span> <span class="reference-text"><cite class="book" style="font-style:normal;"> <i>ISO/IEC 14882:2011</i> [online]. [cit. 2011-09-03]. <a rel="nofollow" class="external text" href="http://www.iso.org/iso/iso_catalogue/catalogue_ics/catalogue_detail_ics.htm?ics1=35&amp;ics2=60&amp;ics3=&amp;csnumber=50372">Dostupné online</a>.</cite><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rfr_id=info:sid/cs.wikipedia.org:templatecitaceelmonografie&amp;rft.btitle=ISO%2FIEC+14882%3A2011&amp;rft_id=http%3A%2F%2Fwww.iso.org%2Fiso%2Fiso_catalogue%2Fcatalogue_ics%2Fcatalogue_detail_ics.htm%3Fics1%3D35%26ics2%3D60%26ics3%3D%26csnumber%3D50372"><span style="display:none">&#160;</span></span></span> </li> <li id="cite_note-3"><span class="mw-cite-backlink"><a href="#cite_ref-3">↑</a></span> <span class="reference-text"><cite style="font-style:normal;"> cppreference.com. <i>en.cppreference.com</i> [online]. [cit. 2021-09-15]. <a rel="nofollow" class="external text" href="https://en.cppreference.com/w/">Dostupné online</a>.</cite><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&amp;rfr_id=info:sid/cs.wikipedia.org:templatecitaceelperiodika&amp;rft.jtitle=en.cppreference.com&amp;rft_id=https%3A%2F%2Fen.cppreference.com%2Fw%2F&amp;rft.atitle=cppreference.com"><span style="display:none">&#160;</span></span></span> </li> <li id="cite_note-4"><span class="mw-cite-backlink"><a href="#cite_ref-4">↑</a></span> <span class="reference-text"><cite style="font-style:normal;"> Recent milestones: C++17 published, C++20 underway. <i>isocpp.org</i> [online]. [cit. 2018-07-20]. <a rel="nofollow" class="external text" href="https://isocpp.org/std/status">Dostupné online</a>. (anglicky)</cite><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&amp;rfr_id=info:sid/cs.wikipedia.org:templatecitaceelperiodika&amp;rft.jtitle=isocpp.org&amp;rft_id=https%3A%2F%2Fisocpp.org%2Fstd%2Fstatus&amp;rft.atitle=Recent+milestones%3A+C%2B%2B17+published%2C+C%2B%2B20+underway"><span style="display:none">&#160;</span></span></span> </li> <li id="cite_note-:1-5"><span class="mw-cite-backlink">↑ <a href="#cite_ref-:1_5-0"><sup style="font-style: italic; font-weight: bold; vertical-align: top">a</sup></a> <a href="#cite_ref-:1_5-1"><sup style="font-style: italic; font-weight: bold; vertical-align: top">b</sup></a></span> <span class="reference-text"><cite class="book" style="font-style:normal;" id="CITEREF"> <i>C++11 Overview: What specific design goals guided the committee?</i> [online]. Standard C++ [cit. 2015-09-04]. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20190131050050/https://isocpp.org/wiki/faq/cpp11#cpp11-specific-goals">Dostupné v&#160;archivu</a> pořízeném z&#160;<a rel="nofollow" class="external text" href="https://isocpp.org/wiki/faq/cpp11#cpp11-specific-goals">originálu</a> dne&#160;2019-01-31.</cite><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rfr_id=info:sid/cs.wikipedia.org:templatecitaceelmonografie&amp;rft.btitle=C%2B%2B11+Overview%3A+What+specific+design+goals+guided+the+committee%3F&amp;rft_id=https%3A%2F%2Fisocpp.org%2Fwiki%2Ffaq%2Fcpp11%23cpp11-specific-goals&amp;rft.pub=Standard+C%2B%2B"><span style="display:none">&#160;</span></span></span> </li> <li id="cite_note-6"><span class="mw-cite-backlink"><a href="#cite_ref-6">↑</a></span> <span class="reference-text"><cite class="book" style="font-style:normal;" id="CITEREF"> <i>Decltype (revision 5)</i> [online]. [cit. 2022-02-16]. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20220214133743/http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2006/n1978.pdf">Dostupné v&#160;archivu</a> pořízeném z&#160;<a rel="nofollow" class="external text" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1978.pdf">originálu</a> dne&#160;2022-02-14.</cite><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rfr_id=info:sid/cs.wikipedia.org:templatecitaceelmonografie&amp;rft.btitle=Decltype+%28revision+5%29&amp;rft_id=http%3A%2F%2Fwww.open-std.org%2Fjtc1%2Fsc22%2Fwg21%2Fdocs%2Fpapers%2F2006%2Fn1978.pdf"><span style="display:none">&#160;</span></span></span> </li> <li id="cite_note-7"><span class="mw-cite-backlink"><a href="#cite_ref-7">↑</a></span> <span class="reference-text"><cite class="book" style="font-style:normal;" id="CITEREF"> <i>auto specifier (since C++11) - cppreference.com</i> [online]. en.cppreference.com [cit. 2016-10-18]. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20161020050910/http://en.cppreference.com/w/cpp/language/auto">Dostupné v&#160;archivu</a> pořízeném z&#160;<a rel="nofollow" class="external text" href="http://en.cppreference.com/w/cpp/language/auto">originálu</a> dne&#160;2016-10-20.</cite><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rfr_id=info:sid/cs.wikipedia.org:templatecitaceelmonografie&amp;rft.btitle=auto+specifier+%28since+C%2B%2B11%29+-+cppreference.com&amp;rft_id=http%3A%2F%2Fen.cppreference.com%2Fw%2Fcpp%2Flanguage%2Fauto&amp;rft.pub=en.cppreference.com"><span style="display:none">&#160;</span></span></span> </li> <li id="cite_note-8"><span class="mw-cite-backlink"><a href="#cite_ref-8">↑</a></span> <span class="reference-text"><cite style="font-style:normal;" id="CITEREFGustedt">GUSTEDT, Jens. Introduce the nullptr constant - v1. <i>ISO JTC1/SC22/WG14 Document Register</i>. International Organization for Standardization, 2019-07-09. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20200727055706/http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2394.pdf">Dostupné v&#160;archivu</a> pořízeném z&#160;<a rel="nofollow" class="external text" href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2394.pdf">originálu</a> dne&#160;2020-07-27.</cite><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&amp;rfr_id=info:sid/cs.wikipedia.org:templatecitaceperiodika&amp;rft.jtitle=ISO+JTC1%2FSC22%2FWG14+Document+Register&amp;rft_id=http%3A%2F%2Fwww.open-std.org%2Fjtc1%2Fsc22%2Fwg14%2Fwww%2Fdocs%2Fn2394.pdf&amp;rft.atitle=Introduce+the+nullptr+constant+-+v1&amp;rft.date=2019-07-09&amp;rft.aulast=Gustedt&amp;rft.aufirst=Jens&amp;rft.pub=International+Organization+for+Standardization"><span style="display:none">&#160;</span></span></span> </li> <li id="cite_note-9"><span class="mw-cite-backlink"><a href="#cite_ref-9">↑</a></span> <span class="reference-text">Tímto vznikl konflikt s navrhovaným použitím (obvyklým v ostatních jazycích) podtržítka pro <a href="/wiki/Desetinn%C3%A1_zna%C4%8Dka" title="Desetinná značka">seskupování číslic</a> v numerických literálech jako <a href="/w/index.php?title=Celo%C4%8D%C3%ADseln%C3%BD_liter%C3%A1l&amp;action=edit&amp;redlink=1" class="new" title="Celočíselný literál (stránka neexistuje)">celočíselných literálech</a>, takže <a href="/wiki/C%2B%2B14" title="C++14">C++14</a> pro tento účel používá apostrof (jako <a href="/wiki/Desetinn%C3%A1_zna%C4%8Dka" title="Desetinná značka">horní čárku</a>) pro seskupování.<cite class="book" style="font-style:normal;" id="CITEREF">Daveed Vandevoorde. <i>N3448: Painless Digit Separation</i> [online]. 2012-09-21 [cit. 2015-08-13]. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20150811140211/http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3448.pdf">Dostupné v&#160;archivu</a> pořízeném z&#160;<a rel="nofollow" class="external text" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3448.pdf">originálu</a> dne&#160;2015-08-11.</cite><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rfr_id=info:sid/cs.wikipedia.org:templatecitaceelmonografie&amp;rft.btitle=N3448%3A+Painless+Digit+Separation&amp;rft_id=http%3A%2F%2Fwww.open-std.org%2Fjtc1%2Fsc22%2Fwg21%2Fdocs%2Fpapers%2F2012%2Fn3448.pdf&amp;rft.au=Daveed+Vandevoorde"><span style="display:none">&#160;</span></span>, <cite class="book" style="font-style:normal;" id="CITEREF">Lawrence Crowl. <i>N3499: Digit Separators</i> [online]. 2012-12-19 [cit. 2015-08-13]. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20150811114700/http://open-std.org/JTC1/SC22/WG21/docs/papers/2013/n3499.html">Dostupné v&#160;archivu</a> pořízeném z&#160;<a rel="nofollow" class="external text" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3499.html">originálu</a> dne&#160;2015-08-11.</cite><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rfr_id=info:sid/cs.wikipedia.org:templatecitaceelmonografie&amp;rft.btitle=N3499%3A+Digit+Separators&amp;rft_id=http%3A%2F%2Fwww.open-std.org%2Fjtc1%2Fsc22%2Fwg21%2Fdocs%2Fpapers%2F2013%2Fn3499.html&amp;rft.au=Lawrence+Crowl"><span style="display:none">&#160;</span></span></span> </li> <li id="cite_note-C++03_3.2/3-10"><span class="mw-cite-backlink"><a href="#cite_ref-C++03_3.2/3_10-0">↑</a></span> <span class="reference-text"><a href="/wiki/Mezin%C3%A1rodn%C3%AD_organizace_pro_normalizaci" title="Mezinárodní organizace pro normalizaci">ISO</a>/<a href="/wiki/Mezin%C3%A1rodn%C3%AD_elektrotechnick%C3%A1_komise" title="Mezinárodní elektrotechnická komise">IEC</a> (2003). <i><a href="/wiki/C%2B%2B" title="C++">ISO/IEC 14882</a>:2003(E): Programming Languages – C++ §3.2 One definition rule [basic.def.odr]</i> para. 3</span> </li> <li id="cite_note-openstd_default_delete-11"><span class="mw-cite-backlink">↑ <a href="#cite_ref-openstd_default_delete_11-0"><sup style="font-style: italic; font-weight: bold; vertical-align: top">a</sup></a> <a href="#cite_ref-openstd_default_delete_11-1"><sup style="font-style: italic; font-weight: bold; vertical-align: top">b</sup></a></span> <span class="reference-text"><cite class="book" style="font-style:normal;" id="CITEREF"> <i>Defaulted and Deleted Functions – ISO/IEC JTC1 SC22 WG21 N2210 = 07-0070 – 2007-03-11</i> [online]. [cit. 2012-12-20]. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20120819182910/http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2210.html#%22default%22">Dostupné v&#160;archivu</a> pořízeném z&#160;<a rel="nofollow" class="external text" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2210.html#%22default%22">originálu</a> dne&#160;2012-08-19.</cite><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rfr_id=info:sid/cs.wikipedia.org:templatecitaceelmonografie&amp;rft.btitle=Defaulted+and+Deleted+Functions+%E2%80%93+ISO%2FIEC+JTC1+SC22+WG21+N2210+%3D+07-0070+%E2%80%93+2007-03-11&amp;rft_id=http%3A%2F%2Fwww.open-std.org%2Fjtc1%2Fsc22%2Fwg21%2Fdocs%2Fpapers%2F2007%2Fn2210.html%23%2522default%2522"><span style="display:none">&#160;</span></span></span> </li> <li id="cite_note-12"><span class="mw-cite-backlink"><a href="#cite_ref-12">↑</a></span> <span class="reference-text"><cite class="book" style="font-style:normal;" id="CITEREF"> <i>Using the GNU Compiler Collection (GCC): Long Long</i> [online]. gcc.gnu.org [cit. 2016-07-25]. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20160821113233/http://gcc.gnu.org/onlinedocs/gcc/Long-Long.html">Dostupné v&#160;archivu</a> pořízeném z&#160;<a rel="nofollow" class="external text" href="https://gcc.gnu.org/onlinedocs/gcc/Long-Long.html">originálu</a> dne&#160;2016-08-21.</cite><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rfr_id=info:sid/cs.wikipedia.org:templatecitaceelmonografie&amp;rft.btitle=Using+the+GNU+Compiler+Collection+%28GCC%29%3A+Long+Long&amp;rft_id=https%3A%2F%2Fgcc.gnu.org%2Fonlinedocs%2Fgcc%2FLong-Long.html&amp;rft.pub=gcc.gnu.org"><span style="display:none">&#160;</span></span></span> </li> <li id="cite_note-13"><span class="mw-cite-backlink"><a href="#cite_ref-13">↑</a></span> <span class="reference-text"><cite class="book" style="font-style:normal;" id="CITEREF"> <i>Data Type Ranges (C++)</i> [online]. [cit. 2009-04-23]. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20090221114127/http://msdn.microsoft.com/en-us/library/s3f49ktz(VS.80).aspx">Dostupné v&#160;archivu</a> pořízeném z&#160;<a rel="nofollow" class="external text" href="http://msdn.microsoft.com/en-us/library/s3f49ktz(VS.80).aspx">originálu</a> dne&#160;2009-02-21.</cite><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rfr_id=info:sid/cs.wikipedia.org:templatecitaceelmonografie&amp;rft.btitle=Data+Type+Ranges+%28C%2B%2B%29&amp;rft_id=http%3A%2F%2Fmsdn.microsoft.com%2Fen-us%2Flibrary%2Fs3f49ktz%28VS.80%29.aspx"><span style="display:none">&#160;</span></span></span> </li> <li id="cite_note-14"><span class="mw-cite-backlink"><a href="#cite_ref-14">↑</a></span> <span class="reference-text">Samuel P. Harbison III, Guy L. Steele Jr.: "C – A Reference Manual", 5th edition, p.251</span> </li> <li id="cite_note-15"><span class="mw-cite-backlink"><a href="#cite_ref-15">↑</a></span> <span class="reference-text"><cite class="book" style="font-style:normal;" id="CITEREFMilewski">MILEWSKI, Bartosz. <i>Broken promises–C++0x futures</i> [online]. 2009-03-03 [cit. 2010-01-24]. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20110916155404/http://bartoszmilewski.wordpress.com/2009/03/03/broken-promises-c0x-futures/">Dostupné v&#160;archivu</a> pořízeném z&#160;<a rel="nofollow" class="external text" href="http://bartoszmilewski.wordpress.com/2009/03/03/broken-promises-c0x-futures/">originálu</a> dne&#160;2011-09-16.</cite><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rfr_id=info:sid/cs.wikipedia.org:templatecitaceelmonografie&amp;rft.btitle=Broken+promises%E2%80%93C%2B%2B0x+futures&amp;rft_id=http%3A%2F%2Fbartoszmilewski.wordpress.com%2F2009%2F03%2F03%2Fbroken-promises-c0x-futures%2F&amp;rft.aulast=Milewski&amp;rft.aufirst=Bartosz"><span style="display:none">&#160;</span></span></span> </li> <li id="cite_note-16"><span class="mw-cite-backlink"><a href="#cite_ref-16">↑</a></span> <span class="reference-text"><cite class="book" style="font-style:normal;" id="CITEREF"> <i>C++ Regular expressions library</i> [online]. cppreference.com [cit. 2022-12-10]. <a rel="nofollow" class="external text" href="https://en.cppreference.com/w/cpp/regex">Dostupné online</a>.</cite><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rfr_id=info:sid/cs.wikipedia.org:templatecitaceelmonografie&amp;rft.btitle=C%2B%2B+Regular+expressions+library&amp;rft_id=https%3A%2F%2Fen.cppreference.com%2Fw%2Fcpp%2Fregex&amp;rft.pub=cppreference.com"><span style="display:none">&#160;</span></span></span> </li> <li id="cite_note-17"><span class="mw-cite-backlink"><a href="#cite_ref-17">↑</a></span> <span class="reference-text"><cite class="book" style="font-style:normal;" id="CITEREF"> <i>Clang - C++98, C++11, and C++14 Status</i> [online]. Clang.llvm.org, 2013-05-12 [cit. 2013-06-10]. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20190528214038/http://clang.llvm.org/cxx_status.html">Dostupné v&#160;archivu</a> pořízeném z&#160;<a rel="nofollow" class="external text" href="http://clang.llvm.org/cxx_status.html">originálu</a> dne&#160;2019-05-28.</cite><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rfr_id=info:sid/cs.wikipedia.org:templatecitaceelmonografie&amp;rft.btitle=Clang+-+C%2B%2B98%2C+C%2B%2B11%2C+and+C%2B%2B14+Status&amp;rft_id=http%3A%2F%2Fclang.llvm.org%2Fcxx_status.html&amp;rft.pub=Clang.llvm.org"><span style="display:none">&#160;</span></span></span> </li> <li id="cite_note-18"><span class="mw-cite-backlink"><a href="#cite_ref-18">↑</a></span> <span class="reference-text"><cite class="book" style="font-style:normal;" id="CITEREF"> <i>Working draft changes for C99 preprocessor synchronization</i> [online]. www.open-std.org [cit. 2014-05-26]. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20200731222757/http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1653.htm">Dostupné v&#160;archivu</a> pořízeném z&#160;<a rel="nofollow" class="external text" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1653.htm">originálu</a> dne&#160;2020-07-31.</cite><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rfr_id=info:sid/cs.wikipedia.org:templatecitaceelmonografie&amp;rft.btitle=Working+draft+changes+for+C99+preprocessor+synchronization&amp;rft_id=http%3A%2F%2Fwww.open-std.org%2Fjtc1%2Fsc22%2Fwg21%2Fdocs%2Fpapers%2F2004%2Fn1653.htm&amp;rft.pub=www.open-std.org"><span style="display:none">&#160;</span></span></span> </li> <li id="cite_note-19"><span class="mw-cite-backlink"><a href="#cite_ref-19">↑</a></span> <span class="reference-text"><cite class="book" style="font-style:normal;" id="CITEREFCaves">CAVES, Jonathan. <i>Update on the C++-0x Language Standard</i> [online]. 2007-06-04 [cit. 2010-05-25]. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20110909141628/http://blogs.msdn.com/b/vcblog/archive/2007/06/04/update-on-the-c-0x-language-standard.aspx">Dostupné v&#160;archivu</a> pořízeném z&#160;<a rel="nofollow" class="external text" href="http://blogs.msdn.com/b/vcblog/archive/2007/06/04/update-on-the-c-0x-language-standard.aspx">originálu</a> dne&#160;2011-09-09.</cite><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rfr_id=info:sid/cs.wikipedia.org:templatecitaceelmonografie&amp;rft.btitle=Update+on+the+C%2B%2B-0x+Language+Standard&amp;rft_id=http%3A%2F%2Fblogs.msdn.com%2Fb%2Fvcblog%2Farchive%2F2007%2F06%2F04%2Fupdate-on-the-c-0x-language-standard.aspx&amp;rft.aulast=Caves&amp;rft.aufirst=Jonathan"><span style="display:none">&#160;</span></span></span> </li> <li id="cite_note-sutter0310-20"><span class="mw-cite-backlink">↑ <a href="#cite_ref-sutter0310_20-0"><sup style="font-style: italic; font-weight: bold; vertical-align: top">a</sup></a> <a href="#cite_ref-sutter0310_20-1"><sup style="font-style: italic; font-weight: bold; vertical-align: top">b</sup></a></span> <span class="reference-text"><cite class="book" style="font-style:normal;" id="CITEREFSutter"><a href="/w/index.php?title=Herb_Sutter&amp;action=edit&amp;redlink=1" class="new" title="Herb Sutter (stránka neexistuje)">SUTTER, Herb</a>. <i>Trip Report: March 2010 ISO C++ Standards Meeting</i> [online]. 2010-03-03 [cit. 2010-03-24]. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20180711064254/https://herbsutter.com/2010/03/13/trip-report-march-2010-iso-c-standards-meeting/">Dostupné v&#160;archivu</a> pořízeném z&#160;<a rel="nofollow" class="external text" href="http://herbsutter.com/2010/03/13/trip-report-march-2010-iso-c-standards-meeting/">originálu</a> dne&#160;2018-07-11.</cite><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rfr_id=info:sid/cs.wikipedia.org:templatecitaceelmonografie&amp;rft.btitle=Trip+Report%3A+March+2010+ISO+C%2B%2B+Standards+Meeting&amp;rft_id=http%3A%2F%2Fherbsutter.com%2F2010%2F03%2F13%2Ftrip-report-march-2010-iso-c-standards-meeting%2F&amp;rft.aulast=Sutter&amp;rft.aufirst=Herb"><span style="display:none">&#160;</span></span></span> </li> </ol></div> <div class="mw-heading mw-heading3"><h3 id="Související_články"><span id="Souvisej.C3.ADc.C3.AD_.C4.8Dl.C3.A1nky"></span>Související články</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B11&amp;veaction=edit&amp;section=58" title="Editace sekce: Související články" class="mw-editsection-visualeditor"><span>editovat</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=C%2B%2B11&amp;action=edit&amp;section=58" title="Editovat zdrojový kód sekce Související články"><span>editovat zdroj</span></a><span class="mw-editsection-bracket">]</span></span></div> <ul><li><a href="/w/index.php?title=C11_(C_standardn%C3%AD_revize)&amp;action=edit&amp;redlink=1" class="new" title="C11 (C standardní revize) (stránka neexistuje)">C11</a></li></ul> <div class="mw-heading mw-heading3"><h3 id="Externí_odkazy"><span id="Extern.C3.AD_odkazy"></span>Externí odkazy</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B11&amp;veaction=edit&amp;section=59" title="Editace sekce: Externí odkazy" class="mw-editsection-visualeditor"><span>editovat</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=C%2B%2B11&amp;action=edit&amp;section=59" title="Editovat zdrojový kód sekce Externí odkazy"><span>editovat zdroj</span></a><span class="mw-editsection-bracket">]</span></span></div> <ul><li><a rel="nofollow" class="external text" href="http://www.open-std.org/jtc1/sc22/wg21/">The C++ Standards Committee</a></li> <li><a rel="nofollow" class="external text" href="https://web.archive.org/web/20080221185141/http://www.informit.com/guides/content.aspx?g=cplusplus&amp;seqNum=216">C++0X: The New Face of Standard C++</a></li> <li><a rel="nofollow" class="external text" href="http://herbsutter.wordpress.com/">Herb Sutter's blog coverage of C++11</a></li> <li><a rel="nofollow" class="external text" href="http://www.justsoftwaresolutions.co.uk/cplusplus/">Anthony Williams' blog coverage of C++11</a></li> <li><a rel="nofollow" class="external text" href="http://www.csclub.uwaterloo.ca/media/C++0x%20-%20An%20Overview.html">A talk on C++0x given by Bjarne Stroustrup at the University of Waterloo</a> <a rel="nofollow" class="external text" href="https://web.archive.org/web/20210625165037/http://www.csclub.uwaterloo.ca/media/C++0x%20-%20An%20Overview.html">Archivováno</a> 25. 6. 2021 na <a href="/wiki/Internet_Archive" title="Internet Archive">Wayback Machine</a>.</li> <li><a rel="nofollow" class="external text" href="http://www.devx.com/SpecialReports/Article/38813/0/page/1">The State of the Language: An Interview with Bjarne Stroustrup (15 August 2008)</a> <a rel="nofollow" class="external text" href="https://web.archive.org/web/20120728144552/http://www.devx.com/SpecialReports/Article/38813/0/page/1">Archivováno</a> 28. 7. 2012 na <a href="/wiki/Internet_Archive" title="Internet Archive">Wayback Machine</a>.</li> <li><a rel="nofollow" class="external text" href="https://web.archive.org/web/20120520004525/http://wiki.apache.org/stdcxx/C++0xCompilerSupport">Wiki page to help keep track of C++ 0x core language features and their availability in compilers</a></li> <li><a rel="nofollow" class="external text" href="http://en.cppreference.com">Online C++11 standard library reference</a></li> <li><a rel="nofollow" class="external text" href="http://stacked-crooked.com/">Online C++11 compiler</a></li> <li>Bjarne Stroustrup's <a rel="nofollow" class="external text" href="http://www.stroustrup.com/C++11FAQ.html">C++11 FAQ</a></li> <li><a rel="nofollow" class="external text" href="https://corecplusplustutorial.com">More information on C++11 features:range-based for loop,why auto_ptr is deprecated,etc. </a></li> <li><cite class="book" style="font-style:normal;" id="CITEREFZemek">ZEMEK, Petr. <i>Co je nového v C++11</i> [online]. 2012-12-04 [cit. 2024-09-14]. <a rel="nofollow" class="external text" href="https://cs-blog.petrzemek.net/2012-12-04-co-je-noveho-v-cpp11">Dostupné online</a>.</cite><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rfr_id=info:sid/cs.wikipedia.org:templatecitaceelmonografie&amp;rft.btitle=Co+je+nov%C3%A9ho+v+C%2B%2B11&amp;rft_id=https%3A%2F%2Fcs-blog.petrzemek.net%2F2012-12-04-co-je-noveho-v-cpp11&amp;rft.aulast=Zemek&amp;rft.aufirst=Petr"><span style="display:none">&#160;</span></span></li></ul> <!-- NewPP limit report Parsed by mw‐api‐int.codfw.main‐6d49cf5db8‐2bjlf Cached time: 20241027143749 Cache expiry: 2592000 Reduced expiry: false Complications: [show‐toc] CPU time usage: 0.436 seconds Real time usage: 0.534 seconds Preprocessor visited node count: 3996/1000000 Post‐expand include size: 47784/2097152 bytes Template argument size: 10744/2097152 bytes Highest expansion depth: 22/100 Expensive parser function count: 67/500 Unstrip recursion depth: 0/20 Unstrip post‐expand size: 135103/5000000 bytes Lua time usage: 0.040/10.000 seconds Lua memory usage: 1679176/52428800 bytes Number of Wikibase entities loaded: 0/400 --> <!-- Transclusion expansion time report (%,ms,calls,template) 100.00% 316.243 1 -total 18.20% 57.543 1 Šablona:Překlad 17.38% 54.953 1 Šablona:Verze_jazyka_C++ 16.58% 52.432 1 Šablona:Soubox 12.79% 40.459 1 Šablona:Překlad/core 10.99% 34.753 1 Šablona:Vseznam 9.92% 31.377 1 Šablona:Překlad/článek 9.51% 30.073 17 Šablona:Citace_elektronické_monografie 7.65% 24.187 2 Šablona:Ref 7.63% 24.144 2 Šablona:Vjazyce2 --> <!-- Saved in parser cache with key cswiki:pcache:idhash:936283-0!canonical and timestamp 20241027143749 and revision id 24251798. Rendering was triggered because: api-parse --> </div><!--esi <esi:include src="/esitest-fa8a495983347898/content" /> --><noscript><img src="https://login.wikimedia.org/wiki/Special:CentralAutoLogin/start?type=1x1" alt="" width="1" height="1" style="border: none; position: absolute;"></noscript> <div class="printfooter" data-nosnippet="">Citováno z „<a dir="ltr" href="https://cs.wikipedia.org/w/index.php?title=C%2B%2B11&amp;oldid=24251798">https://cs.wikipedia.org/w/index.php?title=C%2B%2B11&amp;oldid=24251798</a>“</div></div> <div id="catlinks" class="catlinks" data-mw="interface"><div id="mw-normal-catlinks" class="mw-normal-catlinks"><a href="/wiki/N%C3%A1pov%C4%9Bda:Kategorie" title="Nápověda:Kategorie">Kategorie</a>: <ul><li><a href="/wiki/Kategorie:C%2B%2B" title="Kategorie:C++">C++</a></li><li><a href="/wiki/Kategorie:Standardy_IEC" title="Kategorie:Standardy IEC">Standardy IEC</a></li><li><a href="/wiki/Kategorie:Standardy_ISO" title="Kategorie:Standardy ISO">Standardy ISO</a></li></ul></div><div id="mw-hidden-catlinks" class="mw-hidden-catlinks mw-hidden-cats-hidden">Skryté kategorie: <ul><li><a href="/wiki/Kategorie:%C3%9Adr%C5%BEba:%C4%8Cl%C3%A1nky_s_do%C4%8Dasn%C4%9B_pou%C5%BEitou_%C5%A1ablonou" title="Kategorie:Údržba:Články s dočasně použitou šablonou">Údržba:Články s dočasně použitou šablonou</a></li><li><a href="/wiki/Kategorie:%C3%9Adr%C5%BEba:%C4%8Cl%C3%A1nky_s_nejasn%C3%BDmi_tvrzen%C3%ADmi" title="Kategorie:Údržba:Články s nejasnými tvrzeními">Údržba:Články s nejasnými tvrzeními</a></li><li><a href="/wiki/Kategorie:Monitoring:%C4%8Cl%C3%A1nky_p%C5%99elo%C5%BEen%C3%A9_z_enwiki" title="Kategorie:Monitoring:Články přeložené z enwiki">Monitoring:Články přeložené z enwiki</a></li></ul></div></div> </div> </main> </div> <div class="mw-footer-container"> <footer id="footer" class="mw-footer" > <ul id="footer-info"> <li id="footer-info-lastmod"> Stránka byla naposledy editována 19. 9. 2024 v 17:03.</li> <li id="footer-info-copyright">Text je dostupný pod <a rel="nofollow" class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.cs">licencí Creative Commons Uveďte původ&#160;– Zachovejte licenci</a>, případně za dalších podmínek. Podrobnosti naleznete na stránce <a class="external text" href="https://foundation.wikimedia.org/wiki/Policy:Terms_of_Use/cs">Podmínky užití</a>.</li> </ul> <ul id="footer-places"> <li id="footer-places-privacy"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Privacy_policy">Ochrana osobních údajů</a></li> <li id="footer-places-about"><a href="/wiki/Wikipedie">O Wikipedii</a></li> <li id="footer-places-disclaimers"><a href="/wiki/Wikipedie:Vylou%C4%8Den%C3%AD_odpov%C4%9Bdnosti">Vyloučení odpovědnosti</a></li> <li id="footer-places-contact"><a href="//cs.wikipedia.org/wiki/Wikipedie:Kontakt">Kontaktujte Wikipedii</a></li> <li id="footer-places-wm-codeofconduct"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Universal_Code_of_Conduct">Kodex chování</a></li> <li id="footer-places-developers"><a href="https://developer.wikimedia.org">Vývojáři</a></li> <li id="footer-places-statslink"><a href="https://stats.wikimedia.org/#/cs.wikipedia.org">Statistiky</a></li> <li id="footer-places-cookiestatement"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Cookie_statement">Prohlášení o cookies</a></li> <li id="footer-places-mobileview"><a href="//cs.m.wikipedia.org/w/index.php?title=C%2B%2B11&amp;mobileaction=toggle_view_mobile" class="noprint stopMobileRedirectToggle">Mobilní verze</a></li> </ul> <ul id="footer-icons" class="noprint"> <li id="footer-copyrightico"><a href="https://wikimediafoundation.org/" class="cdx-button cdx-button--fake-button cdx-button--size-large cdx-button--fake-button--enabled"><img src="/static/images/footer/wikimedia-button.svg" width="84" height="29" alt="Wikimedia Foundation" loading="lazy"></a></li> <li id="footer-poweredbyico"><a href="https://www.mediawiki.org/" class="cdx-button cdx-button--fake-button cdx-button--size-large cdx-button--fake-button--enabled"><img src="/w/resources/assets/poweredby_mediawiki.svg" alt="Powered by MediaWiki" width="88" height="31" loading="lazy"></a></li> </ul> </footer> </div> </div> </div> <div class="vector-settings" id="p-dock-bottom"> <ul></ul> </div><script>(RLQ=window.RLQ||[]).push(function(){mw.config.set({"wgHostname":"mw-web.codfw.canary-84779d6bf6-psplp","wgBackendResponseTime":203,"wgPageParseReport":{"limitreport":{"cputime":"0.436","walltime":"0.534","ppvisitednodes":{"value":3996,"limit":1000000},"postexpandincludesize":{"value":47784,"limit":2097152},"templateargumentsize":{"value":10744,"limit":2097152},"expansiondepth":{"value":22,"limit":100},"expensivefunctioncount":{"value":67,"limit":500},"unstrip-depth":{"value":0,"limit":20},"unstrip-size":{"value":135103,"limit":5000000},"entityaccesscount":{"value":0,"limit":400},"timingprofile":["100.00% 316.243 1 -total"," 18.20% 57.543 1 Šablona:Překlad"," 17.38% 54.953 1 Šablona:Verze_jazyka_C++"," 16.58% 52.432 1 Šablona:Soubox"," 12.79% 40.459 1 Šablona:Překlad/core"," 10.99% 34.753 1 Šablona:Vseznam"," 9.92% 31.377 1 Šablona:Překlad/článek"," 9.51% 30.073 17 Šablona:Citace_elektronické_monografie"," 7.65% 24.187 2 Šablona:Ref"," 7.63% 24.144 2 Šablona:Vjazyce2"]},"scribunto":{"limitreport-timeusage":{"value":"0.040","limit":"10.000"},"limitreport-memusage":{"value":1679176,"limit":52428800}},"cachereport":{"origin":"mw-api-int.codfw.main-6d49cf5db8-2bjlf","timestamp":"20241027143749","ttl":2592000,"transientcontent":false}}});});</script> <script type="application/ld+json">{"@context":"https:\/\/schema.org","@type":"Article","name":"C++11","url":"https:\/\/cs.wikipedia.org\/wiki\/C%2B%2B11","sameAs":"http:\/\/www.wikidata.org\/entity\/Q1061570","mainEntity":"http:\/\/www.wikidata.org\/entity\/Q1061570","author":{"@type":"Organization","name":"P\u0159isp\u011bvatel\u00e9 projekt\u016f Wikimedia"},"publisher":{"@type":"Organization","name":"nadace Wikimedia","logo":{"@type":"ImageObject","url":"https:\/\/www.wikimedia.org\/static\/images\/wmf-hor-googpub.png"}},"datePublished":"2013-09-12T07:02:02Z","dateModified":"2024-09-19T16:03:21Z","image":"https:\/\/upload.wikimedia.org\/wikipedia\/commons\/b\/bd\/Bjarne-stroustrup.jpg","headline":"standard programovac\u00edho jazyka C++"}</script> </body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10