{"id":5959,"date":"2022-08-31T16:55:55","date_gmt":"2022-08-31T11:25:55","guid":{"rendered":"https:\/\/jassweb.com\/solved\/solved-reasons-four-double-undescores-in-standard-library-implementations\/"},"modified":"2022-08-31T16:55:55","modified_gmt":"2022-08-31T11:25:55","slug":"solved-reasons-four-double-undescores-in-standard-library-implementations","status":"publish","type":"post","link":"https:\/\/jassweb.com\/solved\/solved-reasons-four-double-undescores-in-standard-library-implementations\/","title":{"rendered":"[Solved] Reasons four double undescores in standard library implementations"},"content":{"rendered":"<p> [ad_1]<br \/>\n<\/p>\n<div id=\"answer-32807875\" class=\"answer js-answer accepted-answer js-accepted-answer\" data-answerid=\"32807875\" data-parentid=\"32807815\" data-score=\"5\" data-position-on-page=\"1\" data-highest-scored=\"1\" data-question-has-accepted-highest-score=\"1\" itemprop=\"acceptedAnswer\" itemscope itemtype=\"https:\/\/schema.org\/Answer\">\n<div class=\"post-layout\">\n<div class=\"votecell post-layout--left\"><\/div>\n<div class=\"answercell post-layout--right\">\n<div class=\"s-prose js-post-body\" itemprop=\"text\">\n<p>There is a good reason for the standard library to start internal names with two underscores: Such names are reserved for the implementation.<\/p>\n<p>Imagine you write the following code:<\/p>\n<pre><code>#include &lt;iostream&gt;\n\nusing namespace std;\n\nlong square(long x)\n{\n  return x*x;\n}\n\nint main()\n{\n  cout &lt;&lt; square(3) &lt;&lt; endl;\n}\n<\/code><\/pre>\n<p>I guess you would not be happy if this ended up calling some internal function <code>square(int)<\/code> used in implementing the standard library and doing something completely different, because it&#8217;s a better match than your <code>square(long)<\/code> for <code>square(3)<\/code>.<\/p>\n<p>By prefixing all internal names with double underscores and at the same time the standard declaring that you are not allowed to do the same, the standard library authors ensure that something like this cannot happen.<\/p>\n<p>Now you may say that <code>&lt;iostream&gt;<\/code> is not part of the STL, but every standard library header may include any other standard library header, so <code>iostream<\/code> may well include an STL header for use in its implementation.<\/p>\n<p>Another reason why identifiers with double underscores make sense even in the case of local identifiers that are not seen externally is that you might have defined a macro of the same name. Consider:<\/p>\n<pre><code>#define value 15\n\n#include &lt;iostream&gt;\n\nint main()\n{\n  std::cout &lt;&lt; value;\n}\n<\/code><\/pre>\n<p>This is legal code and certainly should output 15. But now imagine what happened if some object in <code>iostream<\/code> declared a local variable names <code>value<\/code>. Your code obviously wouldn&#8217;t compile.<\/p>\n<p>Note that the standard library is part of the implementation (it&#8217;s described in the C++ standard, after all), so it can use reserved names however it likes.<\/p>\n<\/p><\/div>\n<div class=\"mt24\"><\/div>\n<\/div>\n<p>            <span class=\"d-none\" itemprop=\"commentCount\">9<\/span> <\/p><\/div>\n<\/div>\n<p>[ad_2]<\/p>\n<p>solved Reasons four double undescores in standard library implementations <\/p>\n","protected":false},"excerpt":{"rendered":"<p>[ad_1] There is a good reason for the standard library to start internal names with two underscores: Such names are reserved for the implementation. Imagine you write the following code: #include &lt;iostream&gt; using namespace std; long square(long x) { return x*x; } int main() { cout &lt;&lt; square(3) &lt;&lt; endl; } I guess you would &#8230; <a title=\"[Solved] Reasons four double undescores in standard library implementations\" class=\"read-more\" href=\"https:\/\/jassweb.com\/solved\/solved-reasons-four-double-undescores-in-standard-library-implementations\/\" aria-label=\"More on [Solved] Reasons four double undescores in standard library implementations\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[320],"tags":[324,1588],"class_list":["post-5959","post","type-post","status-publish","format-standard","hentry","category-solved","tag-c","tag-libc"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>[Solved] Reasons four double undescores in standard library implementations - JassWeb<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/jassweb.com\/solved\/solved-reasons-four-double-undescores-in-standard-library-implementations\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"[Solved] Reasons four double undescores in standard library implementations - JassWeb\" \/>\n<meta property=\"og:description\" content=\"[ad_1] There is a good reason for the standard library to start internal names with two underscores: Such names are reserved for the implementation. Imagine you write the following code: #include &lt;iostream&gt; using namespace std; long square(long x) { return x*x; } int main() { cout &lt;&lt; square(3) &lt;&lt; endl; } I guess you would ... Read more\" \/>\n<meta property=\"og:url\" content=\"https:\/\/jassweb.com\/solved\/solved-reasons-four-double-undescores-in-standard-library-implementations\/\" \/>\n<meta property=\"og:site_name\" content=\"JassWeb\" \/>\n<meta property=\"article:published_time\" content=\"2022-08-31T11:25:55+00:00\" \/>\n<meta name=\"author\" content=\"Kirat\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Kirat\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/jassweb.com\/solved\/solved-reasons-four-double-undescores-in-standard-library-implementations\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/jassweb.com\/solved\/solved-reasons-four-double-undescores-in-standard-library-implementations\/\"},\"author\":{\"name\":\"Kirat\",\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/person\/65c9c7b7958150c0dc8371fa35dd7c31\"},\"headline\":\"[Solved] Reasons four double undescores in standard library implementations\",\"datePublished\":\"2022-08-31T11:25:55+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/jassweb.com\/solved\/solved-reasons-four-double-undescores-in-standard-library-implementations\/\"},\"wordCount\":245,\"publisher\":{\"@id\":\"https:\/\/jassweb.com\/solved\/#organization\"},\"keywords\":[\"c++\",\"libc\"],\"articleSection\":[\"Solved\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/jassweb.com\/solved\/solved-reasons-four-double-undescores-in-standard-library-implementations\/\",\"url\":\"https:\/\/jassweb.com\/solved\/solved-reasons-four-double-undescores-in-standard-library-implementations\/\",\"name\":\"[Solved] Reasons four double undescores in standard library implementations - JassWeb\",\"isPartOf\":{\"@id\":\"https:\/\/jassweb.com\/solved\/#website\"},\"datePublished\":\"2022-08-31T11:25:55+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/jassweb.com\/solved\/solved-reasons-four-double-undescores-in-standard-library-implementations\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/jassweb.com\/solved\/solved-reasons-four-double-undescores-in-standard-library-implementations\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/jassweb.com\/solved\/solved-reasons-four-double-undescores-in-standard-library-implementations\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/jassweb.com\/solved\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"[Solved] Reasons four double undescores in standard library implementations\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/jassweb.com\/solved\/#website\",\"url\":\"https:\/\/jassweb.com\/solved\/\",\"name\":\"JassWeb\",\"description\":\"Build High-quality Websites\",\"publisher\":{\"@id\":\"https:\/\/jassweb.com\/solved\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/jassweb.com\/solved\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/jassweb.com\/solved\/#organization\",\"name\":\"Jass Web\",\"url\":\"https:\/\/jassweb.com\/solved\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/jassweb.com\/wp-content\/uploads\/2021\/02\/jass-website-logo-1.png\",\"contentUrl\":\"https:\/\/jassweb.com\/wp-content\/uploads\/2021\/02\/jass-website-logo-1.png\",\"width\":693,\"height\":132,\"caption\":\"Jass Web\"},\"image\":{\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/person\/65c9c7b7958150c0dc8371fa35dd7c31\",\"name\":\"Kirat\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1776403586\",\"contentUrl\":\"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1776403586\",\"caption\":\"Kirat\"},\"sameAs\":[\"http:\/\/jassweb.com\"],\"url\":\"https:\/\/jassweb.com\/solved\/author\/jaspritsinghghumangmail-com\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"[Solved] Reasons four double undescores in standard library implementations - JassWeb","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/jassweb.com\/solved\/solved-reasons-four-double-undescores-in-standard-library-implementations\/","og_locale":"en_US","og_type":"article","og_title":"[Solved] Reasons four double undescores in standard library implementations - JassWeb","og_description":"[ad_1] There is a good reason for the standard library to start internal names with two underscores: Such names are reserved for the implementation. Imagine you write the following code: #include &lt;iostream&gt; using namespace std; long square(long x) { return x*x; } int main() { cout &lt;&lt; square(3) &lt;&lt; endl; } I guess you would ... Read more","og_url":"https:\/\/jassweb.com\/solved\/solved-reasons-four-double-undescores-in-standard-library-implementations\/","og_site_name":"JassWeb","article_published_time":"2022-08-31T11:25:55+00:00","author":"Kirat","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Kirat","Est. reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/jassweb.com\/solved\/solved-reasons-four-double-undescores-in-standard-library-implementations\/#article","isPartOf":{"@id":"https:\/\/jassweb.com\/solved\/solved-reasons-four-double-undescores-in-standard-library-implementations\/"},"author":{"name":"Kirat","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/person\/65c9c7b7958150c0dc8371fa35dd7c31"},"headline":"[Solved] Reasons four double undescores in standard library implementations","datePublished":"2022-08-31T11:25:55+00:00","mainEntityOfPage":{"@id":"https:\/\/jassweb.com\/solved\/solved-reasons-four-double-undescores-in-standard-library-implementations\/"},"wordCount":245,"publisher":{"@id":"https:\/\/jassweb.com\/solved\/#organization"},"keywords":["c++","libc"],"articleSection":["Solved"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/jassweb.com\/solved\/solved-reasons-four-double-undescores-in-standard-library-implementations\/","url":"https:\/\/jassweb.com\/solved\/solved-reasons-four-double-undescores-in-standard-library-implementations\/","name":"[Solved] Reasons four double undescores in standard library implementations - JassWeb","isPartOf":{"@id":"https:\/\/jassweb.com\/solved\/#website"},"datePublished":"2022-08-31T11:25:55+00:00","breadcrumb":{"@id":"https:\/\/jassweb.com\/solved\/solved-reasons-four-double-undescores-in-standard-library-implementations\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/jassweb.com\/solved\/solved-reasons-four-double-undescores-in-standard-library-implementations\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/jassweb.com\/solved\/solved-reasons-four-double-undescores-in-standard-library-implementations\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/jassweb.com\/solved\/"},{"@type":"ListItem","position":2,"name":"[Solved] Reasons four double undescores in standard library implementations"}]},{"@type":"WebSite","@id":"https:\/\/jassweb.com\/solved\/#website","url":"https:\/\/jassweb.com\/solved\/","name":"JassWeb","description":"Build High-quality Websites","publisher":{"@id":"https:\/\/jassweb.com\/solved\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/jassweb.com\/solved\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/jassweb.com\/solved\/#organization","name":"Jass Web","url":"https:\/\/jassweb.com\/solved\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/logo\/image\/","url":"https:\/\/jassweb.com\/wp-content\/uploads\/2021\/02\/jass-website-logo-1.png","contentUrl":"https:\/\/jassweb.com\/wp-content\/uploads\/2021\/02\/jass-website-logo-1.png","width":693,"height":132,"caption":"Jass Web"},"image":{"@id":"https:\/\/jassweb.com\/solved\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/person\/65c9c7b7958150c0dc8371fa35dd7c31","name":"Kirat","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/person\/image\/","url":"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1776403586","contentUrl":"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1776403586","caption":"Kirat"},"sameAs":["http:\/\/jassweb.com"],"url":"https:\/\/jassweb.com\/solved\/author\/jaspritsinghghumangmail-com\/"}]}},"_links":{"self":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/posts\/5959","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/comments?post=5959"}],"version-history":[{"count":0,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/posts\/5959\/revisions"}],"wp:attachment":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/media?parent=5959"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/categories?post=5959"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/tags?post=5959"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}