{"id":6784,"date":"2024-01-02T16:48:45","date_gmt":"2024-01-02T22:48:45","guid":{"rendered":"https:\/\/www.logikalsolutions.com\/wordpress\/?p=6784"},"modified":"2024-01-02T16:48:47","modified_gmt":"2024-01-02T22:48:47","slug":"initialization","status":"publish","type":"post","link":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/initialization\/","title":{"rendered":"C++ Initialization and Constructors Explanation"},"content":{"rendered":"\n<p>While many of the tools I and other developers use making medical devices require C++17 much of the code we write is C++11. Usually this is mandated by the shop. There are good reasons for sticking with C++11. It is easier to change out a library, especially if another project has already vetted that version of the library with the FDA, than it is to change the coding standard of an existing device.<\/p>\n\n\n\n<p>Instead of a full program as many of the other Example\/Explanation posts on C++, I&#8217;m going to use snippets from my <a href=\"https:\/\/sourceforge.net\/projects\/reddiamond\/\">RedDiamond<\/a> OpenSource project. I have been loath to mentally train myself on many of the newer C++17 features because in my wold I cannot use most of them. That is beginning to change. While lambdas were and are still a damned dangerous C++11 &#8220;feature,&#8221; some of the other C++17 changes really will make code easier to maintain and safer.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Constructors<\/h2>\n\n\n\n<p>Please take a look at the top of this class.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#b392f0;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1f1f1f\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"class FileDetails\n{\npublic:\n    FileDetails();\n\n    FileDetails( const FileDetails &amp;other );\n    FileDetails( const QString fileName );\n    FileDetails( const QString fileName, const QString cacheFileName, const QString lexerName,\n                 const QString tabText, int eolMode, sptr_t pos );\n    FileDetails( const QString fileName, const QString cacheFileName, const QString lexerName,\n                 const QString tabText, int eolMode, sptr_t pos, sptr_t lineNumber );\n\n    static FileDetails fromString( const QString &amp;str );\n\n    FileDetails &amp;operator=( const FileDetails &amp;other );\n\" style=\"color:#b392f0;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki min-dark\" style=\"background-color: #1f1f1f\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F97583\">class<\/span><span style=\"color: #B392F0\"> FileDetails<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">public<\/span><span style=\"color: #BBBBBB\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    FileDetails();<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    FileDetails( <\/span><span style=\"color: #F97583\">const<\/span><span style=\"color: #B392F0\"> FileDetails <\/span><span style=\"color: #F97583\">&amp;<\/span><span style=\"color: #B392F0\">other );<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    FileDetails( <\/span><span style=\"color: #F97583\">const<\/span><span style=\"color: #B392F0\"> QString fileName );<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    FileDetails( <\/span><span style=\"color: #F97583\">const<\/span><span style=\"color: #B392F0\"> QString fileName<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">const<\/span><span style=\"color: #B392F0\"> QString cacheFileName<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">const<\/span><span style=\"color: #B392F0\"> QString lexerName<\/span><span style=\"color: #BBBBBB\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">                 <\/span><span style=\"color: #F97583\">const<\/span><span style=\"color: #B392F0\"> QString tabText<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">int<\/span><span style=\"color: #B392F0\"> eolMode<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #79B8FF\">sptr_t<\/span><span style=\"color: #B392F0\"> pos );<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    FileDetails( <\/span><span style=\"color: #F97583\">const<\/span><span style=\"color: #B392F0\"> QString fileName<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">const<\/span><span style=\"color: #B392F0\"> QString cacheFileName<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">const<\/span><span style=\"color: #B392F0\"> QString lexerName<\/span><span style=\"color: #BBBBBB\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">                 <\/span><span style=\"color: #F97583\">const<\/span><span style=\"color: #B392F0\"> QString tabText<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">int<\/span><span style=\"color: #B392F0\"> eolMode<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #79B8FF\">sptr_t<\/span><span style=\"color: #B392F0\"> pos<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #79B8FF\">sptr_t<\/span><span style=\"color: #B392F0\"> lineNumber );<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">static<\/span><span style=\"color: #B392F0\"> FileDetails fromString( <\/span><span style=\"color: #F97583\">const<\/span><span style=\"color: #B392F0\"> QString <\/span><span style=\"color: #F97583\">&amp;<\/span><span style=\"color: #B392F0\">str );<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    FileDetails <\/span><span style=\"color: #F97583\">&amp;operator<\/span><span style=\"color: #B392F0\">=( <\/span><span style=\"color: #F97583\">const<\/span><span style=\"color: #B392F0\"> FileDetails <\/span><span style=\"color: #F97583\">&amp;<\/span><span style=\"color: #B392F0\">other );<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p>This is forced on you when you are using a C++11 coding style. Yes, non-static native types like int and those which are synonyms for them like sptr_t <em>could<\/em> be initialized in the class declaration, but class types could not be. Initializing only some of the variables in the constructor and the rest in the class declaration caused a lot of confusion and coding errors.<\/p>\n\n\n\n<p>Default values are a blessing. Default values are a curse. Many of you would have condensed this down to <\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-Deja-Vu-Mono.ttf\" style=\"font-size:.875rem;font-family:Code-Pro-Deja-Vu-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#b392f0;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1f1f1f\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"class FileDetails\n{\npublic:\n    FileDetails();\n\n    FileDetails( const FileDetails &amp;other );\n    FileDetails( const QString fileName, const QString cacheFileName=&quot;&quot;, \n                 const QString lexerName=&quot;&quot;,\n                 const QString tabText=&quot;&quot;, int eolMode=0, sptr_t pos=0, \n                 sptr_t lineNumber = 1 );\n\n    static FileDetails fromString( const QString &amp;str );\n\n    FileDetails &amp;operator=( const FileDetails &amp;other );\" style=\"color:#b392f0;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki min-dark\" style=\"background-color: #1f1f1f\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F97583\">class<\/span><span style=\"color: #B392F0\"> FileDetails<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">public<\/span><span style=\"color: #BBBBBB\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    FileDetails();<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    FileDetails( <\/span><span style=\"color: #F97583\">const<\/span><span style=\"color: #B392F0\"> FileDetails <\/span><span style=\"color: #F97583\">&amp;<\/span><span style=\"color: #B392F0\">other );<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    FileDetails( <\/span><span style=\"color: #F97583\">const<\/span><span style=\"color: #B392F0\"> QString fileName<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">const<\/span><span style=\"color: #B392F0\"> QString cacheFileName<\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #FFAB70\">&quot;&quot;<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">                 <\/span><span style=\"color: #F97583\">const<\/span><span style=\"color: #B392F0\"> QString lexerName<\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #FFAB70\">&quot;&quot;<\/span><span style=\"color: #BBBBBB\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">                 <\/span><span style=\"color: #F97583\">const<\/span><span style=\"color: #B392F0\"> QString tabText<\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #FFAB70\">&quot;&quot;<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">int<\/span><span style=\"color: #B392F0\"> eolMode<\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #F8F8F8\">0<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #79B8FF\">sptr_t<\/span><span style=\"color: #B392F0\"> pos<\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #F8F8F8\">0<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">                 <\/span><span style=\"color: #79B8FF\">sptr_t<\/span><span style=\"color: #B392F0\"> lineNumber <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F8F8F8\">1<\/span><span style=\"color: #B392F0\"> );<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">static<\/span><span style=\"color: #B392F0\"> FileDetails fromString( <\/span><span style=\"color: #F97583\">const<\/span><span style=\"color: #B392F0\"> QString <\/span><span style=\"color: #F97583\">&amp;<\/span><span style=\"color: #B392F0\">str );<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    FileDetails <\/span><span style=\"color: #F97583\">&amp;operator<\/span><span style=\"color: #B392F0\">=( <\/span><span style=\"color: #F97583\">const<\/span><span style=\"color: #B392F0\"> FileDetails <\/span><span style=\"color: #F97583\">&amp;<\/span><span style=\"color: #B392F0\">other );<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>but that can get you into a world of hurt.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-Deja-Vu-Mono.ttf\" style=\"font-size:.875rem;font-family:Code-Pro-Deja-Vu-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#b392f0;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1f1f1f\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"FileDetails::FileDetails() :\n    m_lexerName( &quot;null&quot; )\n    , m_eolMode( SC_EOL_LF )\n    , m_pos( 0 )\n    , m_lineNumber( 0 )\n    , m_lineWrap( SC_WRAP_NONE )\n    , m_readOnly( false )\n    , m_isDirty( false )\n    , m_autoIndentEnabled( false )\n{\n    if ( Overlord::getInstance() != nullptr )\n    {\n        m_eolMode = Overlord::getInstance()-&gt;platformEOLType();\n        m_autoIndentEnabled = Overlord::getInstance()-&gt;autoIndentEnabled();\n    }\n}\n\nFileDetails::FileDetails( const FileDetails &amp;other ) :\n    m_fileName( other.m_fileName )\n    , m_cacheFileName( other.m_cacheFileName )\n    , m_lexerName( other.m_lexerName )\n    , m_tabText( other.m_tabText )\n    , m_eolMode( other.m_eolMode )\n    , m_pos( other.m_pos )\n    , m_lineNumber( other.m_lineNumber )\n    , m_lineWrap( other.m_lineWrap )\n    , m_readOnly( other.m_readOnly )\n    , m_isDirty( other.m_isDirty )\n    , m_autoIndentEnabled( other.m_autoIndentEnabled )\n{}\n\nFileDetails::FileDetails( const QString fileName ) :\n    m_fileName( fileName )\n    , m_pos( 0 )\n    , m_lineNumber( 0 )\n    , m_lineWrap( SC_WRAP_NONE  )\n    , m_readOnly( false )\n    , m_isDirty( false )\n{\n    m_lexerName = Overlord::getInstance()-&gt;getLexerNameForFile( fileName );\n    m_autoIndentEnabled = Overlord::getInstance()-&gt;autoIndentEnabled();\n    m_eolMode = Overlord::getInstance()-&gt;platformEOLType();\n}\n\nFileDetails::FileDetails( const QString fileName, const QString cacheFileName, const QString lexerName,\n                          const QString tabText, int eolMode, sptr_t pos ) :\n    m_fileName( fileName )\n    , m_cacheFileName( cacheFileName )\n    , m_lexerName( lexerName )\n    , m_tabText( tabText )\n    , m_eolMode( eolMode )\n    , m_pos( pos )\n    , m_lineNumber( 0 )\n    , m_lineWrap( SC_WRAP_NONE )\n    , m_readOnly( false )\n    , m_isDirty( false )\n{\n    m_autoIndentEnabled = Overlord::getInstance()-&gt;autoIndentEnabled();\n}\n\nFileDetails::FileDetails( const QString fileName, const QString cacheFileName, const QString lexerName,\n                          const QString tabText, int eolMode, sptr_t pos, sptr_t lineNumber ) :\n    m_fileName( fileName )\n    , m_cacheFileName( cacheFileName )\n    , m_lexerName( lexerName )\n    , m_tabText( tabText )\n    , m_eolMode( eolMode )\n    , m_pos( pos )\n    , m_lineNumber( lineNumber )\n    , m_lineWrap( SC_WRAP_NONE )\n    , m_readOnly( false )\n    , m_isDirty( false )\n{\n    m_autoIndentEnabled = Overlord::getInstance()-&gt;autoIndentEnabled();\n}\n\" style=\"color:#b392f0;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki min-dark\" style=\"background-color: #1f1f1f\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #B392F0\">FileDetails<\/span><span style=\"color: #BBBBBB\">::<\/span><span style=\"color: #B392F0\">FileDetails() :<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    m_lexerName( <\/span><span style=\"color: #FFAB70\">&quot;null&quot;<\/span><span style=\"color: #B392F0\"> )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> m_eolMode( SC_EOL_LF )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> m_pos( <\/span><span style=\"color: #F8F8F8\">0<\/span><span style=\"color: #B392F0\"> )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> m_lineNumber( <\/span><span style=\"color: #F8F8F8\">0<\/span><span style=\"color: #B392F0\"> )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> m_lineWrap( SC_WRAP_NONE )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> m_readOnly( <\/span><span style=\"color: #79B8FF\">false<\/span><span style=\"color: #B392F0\"> )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> m_isDirty( <\/span><span style=\"color: #79B8FF\">false<\/span><span style=\"color: #B392F0\"> )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> m_autoIndentEnabled( <\/span><span style=\"color: #79B8FF\">false<\/span><span style=\"color: #B392F0\"> )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #B392F0\"> ( Overlord<\/span><span style=\"color: #BBBBBB\">::<\/span><span style=\"color: #B392F0\">getInstance() <\/span><span style=\"color: #F97583\">!=<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #79B8FF\">nullptr<\/span><span style=\"color: #B392F0\"> )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        m_eolMode <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> Overlord<\/span><span style=\"color: #BBBBBB\">::<\/span><span style=\"color: #B392F0\">getInstance()<\/span><span style=\"color: #BBBBBB\">-&gt;<\/span><span style=\"color: #B392F0\">platformEOLType();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        m_autoIndentEnabled <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> Overlord<\/span><span style=\"color: #BBBBBB\">::<\/span><span style=\"color: #B392F0\">getInstance()<\/span><span style=\"color: #BBBBBB\">-&gt;<\/span><span style=\"color: #B392F0\">autoIndentEnabled();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">FileDetails<\/span><span style=\"color: #BBBBBB\">::<\/span><span style=\"color: #B392F0\">FileDetails( <\/span><span style=\"color: #F97583\">const<\/span><span style=\"color: #B392F0\"> FileDetails <\/span><span style=\"color: #F97583\">&amp;<\/span><span style=\"color: #B392F0\">other ) :<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    m_fileName( <\/span><span style=\"color: #79B8FF\">other<\/span><span style=\"color: #BBBBBB\">.<\/span><span style=\"color: #B392F0\">m_fileName )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> m_cacheFileName( <\/span><span style=\"color: #79B8FF\">other<\/span><span style=\"color: #BBBBBB\">.<\/span><span style=\"color: #B392F0\">m_cacheFileName )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> m_lexerName( <\/span><span style=\"color: #79B8FF\">other<\/span><span style=\"color: #BBBBBB\">.<\/span><span style=\"color: #B392F0\">m_lexerName )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> m_tabText( <\/span><span style=\"color: #79B8FF\">other<\/span><span style=\"color: #BBBBBB\">.<\/span><span style=\"color: #B392F0\">m_tabText )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> m_eolMode( <\/span><span style=\"color: #79B8FF\">other<\/span><span style=\"color: #BBBBBB\">.<\/span><span style=\"color: #B392F0\">m_eolMode )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> m_pos( <\/span><span style=\"color: #79B8FF\">other<\/span><span style=\"color: #BBBBBB\">.<\/span><span style=\"color: #B392F0\">m_pos )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> m_lineNumber( <\/span><span style=\"color: #79B8FF\">other<\/span><span style=\"color: #BBBBBB\">.<\/span><span style=\"color: #B392F0\">m_lineNumber )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> m_lineWrap( <\/span><span style=\"color: #79B8FF\">other<\/span><span style=\"color: #BBBBBB\">.<\/span><span style=\"color: #B392F0\">m_lineWrap )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> m_readOnly( <\/span><span style=\"color: #79B8FF\">other<\/span><span style=\"color: #BBBBBB\">.<\/span><span style=\"color: #B392F0\">m_readOnly )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> m_isDirty( <\/span><span style=\"color: #79B8FF\">other<\/span><span style=\"color: #BBBBBB\">.<\/span><span style=\"color: #B392F0\">m_isDirty )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> m_autoIndentEnabled( <\/span><span style=\"color: #79B8FF\">other<\/span><span style=\"color: #BBBBBB\">.<\/span><span style=\"color: #B392F0\">m_autoIndentEnabled )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">{}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">FileDetails<\/span><span style=\"color: #BBBBBB\">::<\/span><span style=\"color: #B392F0\">FileDetails( <\/span><span style=\"color: #F97583\">const<\/span><span style=\"color: #B392F0\"> QString fileName ) :<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    m_fileName( fileName )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> m_pos( <\/span><span style=\"color: #F8F8F8\">0<\/span><span style=\"color: #B392F0\"> )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> m_lineNumber( <\/span><span style=\"color: #F8F8F8\">0<\/span><span style=\"color: #B392F0\"> )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> m_lineWrap( SC_WRAP_NONE  )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> m_readOnly( <\/span><span style=\"color: #79B8FF\">false<\/span><span style=\"color: #B392F0\"> )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> m_isDirty( <\/span><span style=\"color: #79B8FF\">false<\/span><span style=\"color: #B392F0\"> )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    m_lexerName <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> Overlord<\/span><span style=\"color: #BBBBBB\">::<\/span><span style=\"color: #B392F0\">getInstance()<\/span><span style=\"color: #BBBBBB\">-&gt;<\/span><span style=\"color: #B392F0\">getLexerNameForFile( fileName );<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    m_autoIndentEnabled <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> Overlord<\/span><span style=\"color: #BBBBBB\">::<\/span><span style=\"color: #B392F0\">getInstance()<\/span><span style=\"color: #BBBBBB\">-&gt;<\/span><span style=\"color: #B392F0\">autoIndentEnabled();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    m_eolMode <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> Overlord<\/span><span style=\"color: #BBBBBB\">::<\/span><span style=\"color: #B392F0\">getInstance()<\/span><span style=\"color: #BBBBBB\">-&gt;<\/span><span style=\"color: #B392F0\">platformEOLType();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">FileDetails<\/span><span style=\"color: #BBBBBB\">::<\/span><span style=\"color: #B392F0\">FileDetails( <\/span><span style=\"color: #F97583\">const<\/span><span style=\"color: #B392F0\"> QString fileName<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">const<\/span><span style=\"color: #B392F0\"> QString cacheFileName<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">const<\/span><span style=\"color: #B392F0\"> QString lexerName<\/span><span style=\"color: #BBBBBB\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">                          <\/span><span style=\"color: #F97583\">const<\/span><span style=\"color: #B392F0\"> QString tabText<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">int<\/span><span style=\"color: #B392F0\"> eolMode<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #79B8FF\">sptr_t<\/span><span style=\"color: #B392F0\"> pos ) :<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    m_fileName( fileName )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> m_cacheFileName( cacheFileName )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> m_lexerName( lexerName )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> m_tabText( tabText )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> m_eolMode( eolMode )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> m_pos( pos )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> m_lineNumber( <\/span><span style=\"color: #F8F8F8\">0<\/span><span style=\"color: #B392F0\"> )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> m_lineWrap( SC_WRAP_NONE )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> m_readOnly( <\/span><span style=\"color: #79B8FF\">false<\/span><span style=\"color: #B392F0\"> )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> m_isDirty( <\/span><span style=\"color: #79B8FF\">false<\/span><span style=\"color: #B392F0\"> )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    m_autoIndentEnabled <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> Overlord<\/span><span style=\"color: #BBBBBB\">::<\/span><span style=\"color: #B392F0\">getInstance()<\/span><span style=\"color: #BBBBBB\">-&gt;<\/span><span style=\"color: #B392F0\">autoIndentEnabled();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">FileDetails<\/span><span style=\"color: #BBBBBB\">::<\/span><span style=\"color: #B392F0\">FileDetails( <\/span><span style=\"color: #F97583\">const<\/span><span style=\"color: #B392F0\"> QString fileName<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">const<\/span><span style=\"color: #B392F0\"> QString cacheFileName<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">const<\/span><span style=\"color: #B392F0\"> QString lexerName<\/span><span style=\"color: #BBBBBB\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">                          <\/span><span style=\"color: #F97583\">const<\/span><span style=\"color: #B392F0\"> QString tabText<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">int<\/span><span style=\"color: #B392F0\"> eolMode<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #79B8FF\">sptr_t<\/span><span style=\"color: #B392F0\"> pos<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #79B8FF\">sptr_t<\/span><span style=\"color: #B392F0\"> lineNumber ) :<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    m_fileName( fileName )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> m_cacheFileName( cacheFileName )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> m_lexerName( lexerName )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> m_tabText( tabText )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> m_eolMode( eolMode )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> m_pos( pos )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> m_lineNumber( lineNumber )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> m_lineWrap( SC_WRAP_NONE )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> m_readOnly( <\/span><span style=\"color: #79B8FF\">false<\/span><span style=\"color: #B392F0\"> )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> m_isDirty( <\/span><span style=\"color: #79B8FF\">false<\/span><span style=\"color: #B392F0\"> )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    m_autoIndentEnabled <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> Overlord<\/span><span style=\"color: #BBBBBB\">::<\/span><span style=\"color: #B392F0\">getInstance()<\/span><span style=\"color: #BBBBBB\">-&gt;<\/span><span style=\"color: #B392F0\">autoIndentEnabled();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p>You see, many of the default values are controlled by user configuration. If we borrow from our <a href=\"std::optional example\">std::optional example<\/a> and plunge headlong into C++17 we can clean this up quite a bit.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">C++17 Version<\/h2>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-Deja-Vu-Mono.ttf\" style=\"font-size:.875rem;font-family:Code-Pro-Deja-Vu-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#b392f0;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1f1f1f\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"class FileDetails\n{\npublic:\n\n    FileDetails( std::optional&lt;const QString&gt; fileName      = std::nullopt,\n                 std::optional&lt;const QString&gt; cacheFileName = std::nullopt,\n                 std::optional&lt;const QString&gt; lexerName     = std::nullopt,\n                 std::optional&lt;const QString&gt; tabText       = std::nullopt,\n                 std::optional&lt;int&gt;           eolMode       = std::nullopt,\n                 std::optional&lt;sptr_t&gt;        pos           = std::nullopt,\n                 std::optional&lt;sptr_t&gt;        lineNumber    = std::nullopt,\n                 std::optional&lt;int&gt;           lineWrap      = std::nullopt,\n                 std::optional&lt;bool&gt;          readOnly      = std::nullopt,\n                 std::optional&lt;bool&gt;          autoIndent    = std::nullopt,\n                 std::optional&lt;bool&gt;          isDirty       = std::nullopt );\n\n    FileDetails( const FileDetails &amp;other ) = default;\n\n...\n\nprivate:\n    \/\/ QString initializes itself to empty string\n    \/\/ only have to set the one we need filled in\n    \/\/\n    QString m_fileName;\n    QString m_cacheFileName;\n    QString m_lexerName {&quot;null&quot;};\n    QString m_tabText;\n    int     m_eolMode {SC_EOL_LF};\n    sptr_t  m_pos {0};\n    sptr_t  m_lineNumber {0};\n    int     m_lineWrap {SC_WRAP_NONE};\n    bool    m_readOnly {false};\n    bool    m_isDirty  {false};\n    bool    m_autoIndentEnabled {false};\n};\" style=\"color:#b392f0;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki min-dark\" style=\"background-color: #1f1f1f\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F97583\">class<\/span><span style=\"color: #B392F0\"> FileDetails<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">public<\/span><span style=\"color: #BBBBBB\">:<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    FileDetails( std<\/span><span style=\"color: #BBBBBB\">::<\/span><span style=\"color: #B392F0\">optional&lt;<\/span><span style=\"color: #F97583\">const<\/span><span style=\"color: #B392F0\"> QString&gt; fileName      <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> std<\/span><span style=\"color: #BBBBBB\">::<\/span><span style=\"color: #B392F0\">nullopt<\/span><span style=\"color: #BBBBBB\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">                 std<\/span><span style=\"color: #BBBBBB\">::<\/span><span style=\"color: #B392F0\">optional&lt;<\/span><span style=\"color: #F97583\">const<\/span><span style=\"color: #B392F0\"> QString&gt; cacheFileName <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> std<\/span><span style=\"color: #BBBBBB\">::<\/span><span style=\"color: #B392F0\">nullopt<\/span><span style=\"color: #BBBBBB\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">                 std<\/span><span style=\"color: #BBBBBB\">::<\/span><span style=\"color: #B392F0\">optional&lt;<\/span><span style=\"color: #F97583\">const<\/span><span style=\"color: #B392F0\"> QString&gt; lexerName     <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> std<\/span><span style=\"color: #BBBBBB\">::<\/span><span style=\"color: #B392F0\">nullopt<\/span><span style=\"color: #BBBBBB\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">                 std<\/span><span style=\"color: #BBBBBB\">::<\/span><span style=\"color: #B392F0\">optional&lt;<\/span><span style=\"color: #F97583\">const<\/span><span style=\"color: #B392F0\"> QString&gt; tabText       <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> std<\/span><span style=\"color: #BBBBBB\">::<\/span><span style=\"color: #B392F0\">nullopt<\/span><span style=\"color: #BBBBBB\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">                 std<\/span><span style=\"color: #BBBBBB\">::<\/span><span style=\"color: #B392F0\">optional&lt;<\/span><span style=\"color: #F97583\">int<\/span><span style=\"color: #B392F0\">&gt;           eolMode       <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> std<\/span><span style=\"color: #BBBBBB\">::<\/span><span style=\"color: #B392F0\">nullopt<\/span><span style=\"color: #BBBBBB\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">                 std<\/span><span style=\"color: #BBBBBB\">::<\/span><span style=\"color: #B392F0\">optional&lt;<\/span><span style=\"color: #79B8FF\">sptr_t<\/span><span style=\"color: #B392F0\">&gt;        pos           <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> std<\/span><span style=\"color: #BBBBBB\">::<\/span><span style=\"color: #B392F0\">nullopt<\/span><span style=\"color: #BBBBBB\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">                 std<\/span><span style=\"color: #BBBBBB\">::<\/span><span style=\"color: #B392F0\">optional&lt;<\/span><span style=\"color: #79B8FF\">sptr_t<\/span><span style=\"color: #B392F0\">&gt;        lineNumber    <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> std<\/span><span style=\"color: #BBBBBB\">::<\/span><span style=\"color: #B392F0\">nullopt<\/span><span style=\"color: #BBBBBB\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">                 std<\/span><span style=\"color: #BBBBBB\">::<\/span><span style=\"color: #B392F0\">optional&lt;<\/span><span style=\"color: #F97583\">int<\/span><span style=\"color: #B392F0\">&gt;           lineWrap      <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> std<\/span><span style=\"color: #BBBBBB\">::<\/span><span style=\"color: #B392F0\">nullopt<\/span><span style=\"color: #BBBBBB\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">                 std<\/span><span style=\"color: #BBBBBB\">::<\/span><span style=\"color: #B392F0\">optional&lt;<\/span><span style=\"color: #F97583\">bool<\/span><span style=\"color: #B392F0\">&gt;          readOnly      <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> std<\/span><span style=\"color: #BBBBBB\">::<\/span><span style=\"color: #B392F0\">nullopt<\/span><span style=\"color: #BBBBBB\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">                 std<\/span><span style=\"color: #BBBBBB\">::<\/span><span style=\"color: #B392F0\">optional&lt;<\/span><span style=\"color: #F97583\">bool<\/span><span style=\"color: #B392F0\">&gt;          autoIndent    <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> std<\/span><span style=\"color: #BBBBBB\">::<\/span><span style=\"color: #B392F0\">nullopt<\/span><span style=\"color: #BBBBBB\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">                 std<\/span><span style=\"color: #BBBBBB\">::<\/span><span style=\"color: #B392F0\">optional&lt;<\/span><span style=\"color: #F97583\">bool<\/span><span style=\"color: #B392F0\">&gt;          isDirty       <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> std<\/span><span style=\"color: #BBBBBB\">::<\/span><span style=\"color: #B392F0\">nullopt );<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    FileDetails( <\/span><span style=\"color: #F97583\">const<\/span><span style=\"color: #B392F0\"> FileDetails <\/span><span style=\"color: #F97583\">&amp;<\/span><span style=\"color: #B392F0\">other ) <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">default<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">...<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">private<\/span><span style=\"color: #BBBBBB\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6B737C\">    \/\/ QString initializes itself to empty string<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6B737C\">    \/\/ only have to set the one we need filled in<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6B737C\">    \/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    QString m_fileName;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    QString m_cacheFileName;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    QString m_lexerName {<\/span><span style=\"color: #FFAB70\">&quot;null&quot;<\/span><span style=\"color: #B392F0\">};<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    QString m_tabText;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">int<\/span><span style=\"color: #B392F0\">     m_eolMode {SC_EOL_LF};<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #79B8FF\">sptr_t<\/span><span style=\"color: #B392F0\">  m_pos {<\/span><span style=\"color: #F8F8F8\">0<\/span><span style=\"color: #B392F0\">};<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #79B8FF\">sptr_t<\/span><span style=\"color: #B392F0\">  m_lineNumber {<\/span><span style=\"color: #F8F8F8\">0<\/span><span style=\"color: #B392F0\">};<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">int<\/span><span style=\"color: #B392F0\">     m_lineWrap {SC_WRAP_NONE};<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">bool<\/span><span style=\"color: #B392F0\">    m_readOnly {<\/span><span style=\"color: #79B8FF\">false<\/span><span style=\"color: #B392F0\">};<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">bool<\/span><span style=\"color: #B392F0\">    m_isDirty  {<\/span><span style=\"color: #79B8FF\">false<\/span><span style=\"color: #B392F0\">};<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">bool<\/span><span style=\"color: #B392F0\">    m_autoIndentEnabled {<\/span><span style=\"color: #79B8FF\">false<\/span><span style=\"color: #B392F0\">};<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">};<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>The = default on the copy constructor is actually part of C++11 it just didn&#8217;t work well early on with third party libraries so nobody used it. This definitely won&#8217;t work with more complex classes in Qt, CopperSpice, etc. which deliberately disable copy constructors. Has to do with dynamic memory allocation and reference counting and other yadda yadda.<\/p>\n\n\n\n<p>We now have only one constructor. Every parameter is optional. I even added some that weren&#8217;t on the other constructors. Some of you won&#8217;t like the following coding style, I don&#8217;t care. I use the Barr Group coding standard for medical device work and you never have a naked if statement.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-Deja-Vu-Mono.ttf\" style=\"font-size:.875rem;font-family:Code-Pro-Deja-Vu-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#b392f0;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1f1f1f\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"FileDetails::FileDetails(\n    std::optional&lt;const QString&gt; fileName,\n    std::optional&lt;const QString&gt; cacheFileName,\n    std::optional&lt;const QString&gt; lexerName,\n    std::optional&lt;const QString&gt; tabText,\n    std::optional&lt;int&gt;           eolMode,\n    std::optional&lt;sptr_t&gt;        pos,\n    std::optional&lt;sptr_t&gt;        lineNumber,\n    std::optional&lt;int&gt;           lineWrap,\n    std::optional&lt;bool&gt;          readOnly,\n    std::optional&lt;bool&gt;          autoIndent,\n    std::optional&lt;bool&gt;          isDirty )\n{\n    if ( fileName.has_value() )\n    {\n        m_fileName = fileName.value();\n    }\n\n    if ( cacheFileName.has_value() )\n    {\n        m_cacheFileName = cacheFileName.value();\n    }\n\n    if ( lexerName.has_value() )\n    {\n        m_lexerName = lexerName.value();\n    }\n    else\n    {\n        \/\/ a default construction will not have a file name so we\n        \/\/ only override default value if file name provided.\n        if ( m_fileName.length() &gt; 0 )\n        {\n            m_lexerName = Overlord::getInstance()-&gt;getLexerNameForFile( m_fileName );\n        }\n    }\n\n    if ( tabText.has_value() )\n    {\n        m_tabText = tabText.value();\n    }\n\n    if ( eolMode.has_value() )\n    {\n        m_eolMode = eolMode.value();\n    }\n    else\n    {\n        m_eolMode = Overlord::getInstance()-&gt;platformEOLType();\n    }\n\n    if ( pos.has_value() )\n    {\n        m_pos = pos.value();\n    }\n\n    if ( lineNumber.has_value() )\n    {\n        m_lineNumber = lineNumber.value();\n    }\n\n    if ( lineWrap.has_value() )\n    {\n        m_lineWrap = lineWrap.value();\n    }\n\n    if ( readOnly.has_value() )\n    {\n        m_readOnly = readOnly.value();\n    }\n\n    if ( autoIndent.has_value() )\n    {\n        m_autoIndentEnabled = autoIndent.value();\n    }\n    else\n    {\n        m_autoIndentEnabled = Overlord::getInstance()-&gt;autoIndentEnabled();\n    }\n\n    if ( isDirty.has_value() )\n    {\n        m_isDirty = isDirty.value();\n    }\n\n\n}\n\" style=\"color:#b392f0;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki min-dark\" style=\"background-color: #1f1f1f\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #B392F0\">FileDetails<\/span><span style=\"color: #BBBBBB\">::<\/span><span style=\"color: #B392F0\">FileDetails(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    std<\/span><span style=\"color: #BBBBBB\">::<\/span><span style=\"color: #B392F0\">optional<\/span><span style=\"color: #F97583\">&lt;const<\/span><span style=\"color: #B392F0\"> QString<\/span><span style=\"color: #F97583\">&gt;<\/span><span style=\"color: #B392F0\"> fileName<\/span><span style=\"color: #BBBBBB\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    std<\/span><span style=\"color: #BBBBBB\">::<\/span><span style=\"color: #B392F0\">optional<\/span><span style=\"color: #F97583\">&lt;const<\/span><span style=\"color: #B392F0\"> QString<\/span><span style=\"color: #F97583\">&gt;<\/span><span style=\"color: #B392F0\"> cacheFileName<\/span><span style=\"color: #BBBBBB\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    std<\/span><span style=\"color: #BBBBBB\">::<\/span><span style=\"color: #B392F0\">optional<\/span><span style=\"color: #F97583\">&lt;const<\/span><span style=\"color: #B392F0\"> QString<\/span><span style=\"color: #F97583\">&gt;<\/span><span style=\"color: #B392F0\"> lexerName<\/span><span style=\"color: #BBBBBB\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    std<\/span><span style=\"color: #BBBBBB\">::<\/span><span style=\"color: #B392F0\">optional<\/span><span style=\"color: #F97583\">&lt;const<\/span><span style=\"color: #B392F0\"> QString<\/span><span style=\"color: #F97583\">&gt;<\/span><span style=\"color: #B392F0\"> tabText<\/span><span style=\"color: #BBBBBB\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    std<\/span><span style=\"color: #BBBBBB\">::<\/span><span style=\"color: #B392F0\">optional<\/span><span style=\"color: #F97583\">&lt;int&gt;<\/span><span style=\"color: #B392F0\">           eolMode<\/span><span style=\"color: #BBBBBB\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    std<\/span><span style=\"color: #BBBBBB\">::<\/span><span style=\"color: #B392F0\">optional<\/span><span style=\"color: #F97583\">&lt;<\/span><span style=\"color: #79B8FF\">sptr_t<\/span><span style=\"color: #F97583\">&gt;<\/span><span style=\"color: #B392F0\">        pos<\/span><span style=\"color: #BBBBBB\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    std<\/span><span style=\"color: #BBBBBB\">::<\/span><span style=\"color: #B392F0\">optional<\/span><span style=\"color: #F97583\">&lt;<\/span><span style=\"color: #79B8FF\">sptr_t<\/span><span style=\"color: #F97583\">&gt;<\/span><span style=\"color: #B392F0\">        lineNumber<\/span><span style=\"color: #BBBBBB\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    std<\/span><span style=\"color: #BBBBBB\">::<\/span><span style=\"color: #B392F0\">optional<\/span><span style=\"color: #F97583\">&lt;int&gt;<\/span><span style=\"color: #B392F0\">           lineWrap<\/span><span style=\"color: #BBBBBB\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    std<\/span><span style=\"color: #BBBBBB\">::<\/span><span style=\"color: #B392F0\">optional<\/span><span style=\"color: #F97583\">&lt;bool&gt;<\/span><span style=\"color: #B392F0\">          readOnly<\/span><span style=\"color: #BBBBBB\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    std<\/span><span style=\"color: #BBBBBB\">::<\/span><span style=\"color: #B392F0\">optional<\/span><span style=\"color: #F97583\">&lt;bool&gt;<\/span><span style=\"color: #B392F0\">          autoIndent<\/span><span style=\"color: #BBBBBB\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    std<\/span><span style=\"color: #BBBBBB\">::<\/span><span style=\"color: #B392F0\">optional<\/span><span style=\"color: #F97583\">&lt;bool&gt;<\/span><span style=\"color: #B392F0\">          isDirty )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #B392F0\"> ( <\/span><span style=\"color: #79B8FF\">fileName<\/span><span style=\"color: #BBBBBB\">.<\/span><span style=\"color: #B392F0\">has_value() )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        m_fileName <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #79B8FF\">fileName<\/span><span style=\"color: #BBBBBB\">.<\/span><span style=\"color: #B392F0\">value();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #B392F0\"> ( <\/span><span style=\"color: #79B8FF\">cacheFileName<\/span><span style=\"color: #BBBBBB\">.<\/span><span style=\"color: #B392F0\">has_value() )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        m_cacheFileName <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #79B8FF\">cacheFileName<\/span><span style=\"color: #BBBBBB\">.<\/span><span style=\"color: #B392F0\">value();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #B392F0\"> ( <\/span><span style=\"color: #79B8FF\">lexerName<\/span><span style=\"color: #BBBBBB\">.<\/span><span style=\"color: #B392F0\">has_value() )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        m_lexerName <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #79B8FF\">lexerName<\/span><span style=\"color: #BBBBBB\">.<\/span><span style=\"color: #B392F0\">value();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">else<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6B737C\">        \/\/ a default construction will not have a file name so we<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6B737C\">        \/\/ only override default value if file name provided.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #B392F0\"> ( <\/span><span style=\"color: #79B8FF\">m_fileName<\/span><span style=\"color: #BBBBBB\">.<\/span><span style=\"color: #B392F0\">length() <\/span><span style=\"color: #F97583\">&gt;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F8F8F8\">0<\/span><span style=\"color: #B392F0\"> )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">            m_lexerName <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> Overlord<\/span><span style=\"color: #BBBBBB\">::<\/span><span style=\"color: #B392F0\">getInstance()<\/span><span style=\"color: #BBBBBB\">-&gt;<\/span><span style=\"color: #B392F0\">getLexerNameForFile( m_fileName );<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #B392F0\"> ( <\/span><span style=\"color: #79B8FF\">tabText<\/span><span style=\"color: #BBBBBB\">.<\/span><span style=\"color: #B392F0\">has_value() )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        m_tabText <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #79B8FF\">tabText<\/span><span style=\"color: #BBBBBB\">.<\/span><span style=\"color: #B392F0\">value();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #B392F0\"> ( <\/span><span style=\"color: #79B8FF\">eolMode<\/span><span style=\"color: #BBBBBB\">.<\/span><span style=\"color: #B392F0\">has_value() )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        m_eolMode <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #79B8FF\">eolMode<\/span><span style=\"color: #BBBBBB\">.<\/span><span style=\"color: #B392F0\">value();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">else<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        m_eolMode <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> Overlord<\/span><span style=\"color: #BBBBBB\">::<\/span><span style=\"color: #B392F0\">getInstance()<\/span><span style=\"color: #BBBBBB\">-&gt;<\/span><span style=\"color: #B392F0\">platformEOLType();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #B392F0\"> ( <\/span><span style=\"color: #79B8FF\">pos<\/span><span style=\"color: #BBBBBB\">.<\/span><span style=\"color: #B392F0\">has_value() )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        m_pos <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #79B8FF\">pos<\/span><span style=\"color: #BBBBBB\">.<\/span><span style=\"color: #B392F0\">value();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #B392F0\"> ( <\/span><span style=\"color: #79B8FF\">lineNumber<\/span><span style=\"color: #BBBBBB\">.<\/span><span style=\"color: #B392F0\">has_value() )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        m_lineNumber <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #79B8FF\">lineNumber<\/span><span style=\"color: #BBBBBB\">.<\/span><span style=\"color: #B392F0\">value();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #B392F0\"> ( <\/span><span style=\"color: #79B8FF\">lineWrap<\/span><span style=\"color: #BBBBBB\">.<\/span><span style=\"color: #B392F0\">has_value() )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        m_lineWrap <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #79B8FF\">lineWrap<\/span><span style=\"color: #BBBBBB\">.<\/span><span style=\"color: #B392F0\">value();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #B392F0\"> ( <\/span><span style=\"color: #79B8FF\">readOnly<\/span><span style=\"color: #BBBBBB\">.<\/span><span style=\"color: #B392F0\">has_value() )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        m_readOnly <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #79B8FF\">readOnly<\/span><span style=\"color: #BBBBBB\">.<\/span><span style=\"color: #B392F0\">value();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #B392F0\"> ( <\/span><span style=\"color: #79B8FF\">autoIndent<\/span><span style=\"color: #BBBBBB\">.<\/span><span style=\"color: #B392F0\">has_value() )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        m_autoIndentEnabled <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #79B8FF\">autoIndent<\/span><span style=\"color: #BBBBBB\">.<\/span><span style=\"color: #B392F0\">value();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">else<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        m_autoIndentEnabled <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> Overlord<\/span><span style=\"color: #BBBBBB\">::<\/span><span style=\"color: #B392F0\">getInstance()<\/span><span style=\"color: #BBBBBB\">-&gt;<\/span><span style=\"color: #B392F0\">autoIndentEnabled();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #B392F0\"> ( <\/span><span style=\"color: #79B8FF\">isDirty<\/span><span style=\"color: #BBBBBB\">.<\/span><span style=\"color: #B392F0\">has_value() )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        m_isDirty <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #79B8FF\">isDirty<\/span><span style=\"color: #BBBBBB\">.<\/span><span style=\"color: #B392F0\">value();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Previously we had to have multiple constructors which is a maintenance time bomb. I&#8217;ve had to deal with that at client sites. Classes with six or more constructors because they had been using C++98 or C++11 standard and now you need to add a field. Always one that gets missed. Leads to very difficult to track down bugs. <\/p>\n\n\n\n<p>This is much more maintainable. Anything that could have a hard coded default value has it assigned in the header file. Use of std::optional allows us to fill in as many parameters as we wish. Default values coming from the user configuration are pulled in as needed.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>While many of the tools I and other developers use making medical devices require C++17 much of the code we write is C++11. Usually this is mandated by the shop. There are good reasons for sticking with C++11. It is easier to change out a library, especially if another project has already vetted that version of the library with the FDA, than it is to change the coding standard of an existing device. Instead of &hellip; <a title=\"C++ Initialization and Constructors Explanation\" class=\"bnm-read-more\" href=\"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/initialization\/\"><span class=\"screen-reader-text\">C++ Initialization and Constructors Explanation<\/span>Read more<\/a><\/p>\n","protected":false},"author":2,"featured_media":2184,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1309,3],"tags":[1504,2156,1835],"class_list":["post-6784","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-experience","category-information-technology","tag-c","tag-c17","tag-copperspice","bnm-entry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>C++ Initialization and Constructors Explanation &#8211; Logikal Blog<\/title>\n<meta name=\"description\" content=\"While many of the tools I and other developers use making medical devices require C++17 much of the code we write is C++11 . . .\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/initialization\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"C++ Initialization and Constructors Explanation &#8211; Logikal Blog\" \/>\n<meta property=\"og:description\" content=\"While many of the tools I and other developers use making medical devices require C++17 much of the code we write is C++11 . . .\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/initialization\/\" \/>\n<meta property=\"og:site_name\" content=\"Logikal Blog\" \/>\n<meta property=\"article:published_time\" content=\"2024-01-02T22:48:45+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-01-02T22:48:47+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2017\/06\/MVC-001S.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"640\" \/>\n\t<meta property=\"og:image:height\" content=\"480\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"seasoned_geek\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"seasoned_geek\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/initialization\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/initialization\\\/\"},\"author\":{\"name\":\"seasoned_geek\",\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/#\\\/schema\\\/person\\\/c077f770ade13de7faaf616c3eac6842\"},\"headline\":\"C++ Initialization and Constructors Explanation\",\"datePublished\":\"2024-01-02T22:48:45+00:00\",\"dateModified\":\"2024-01-02T22:48:47+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/initialization\\\/\"},\"wordCount\":521,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/#\\\/schema\\\/person\\\/c077f770ade13de7faaf616c3eac6842\"},\"image\":{\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/initialization\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/wp-content\\\/uploads\\\/2017\\\/06\\\/MVC-001S.jpg\",\"keywords\":[\"C++\",\"C++17\",\"CopperSpice\"],\"articleSection\":[\"Experience\",\"Information Technology\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/initialization\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/initialization\\\/\",\"url\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/initialization\\\/\",\"name\":\"C++ Initialization and Constructors Explanation &#8211; Logikal Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/initialization\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/initialization\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/wp-content\\\/uploads\\\/2017\\\/06\\\/MVC-001S.jpg\",\"datePublished\":\"2024-01-02T22:48:45+00:00\",\"dateModified\":\"2024-01-02T22:48:47+00:00\",\"description\":\"While many of the tools I and other developers use making medical devices require C++17 much of the code we write is C++11 . . .\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/initialization\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/initialization\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/initialization\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/wp-content\\\/uploads\\\/2017\\\/06\\\/MVC-001S.jpg\",\"contentUrl\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/wp-content\\\/uploads\\\/2017\\\/06\\\/MVC-001S.jpg\",\"width\":640,\"height\":480,\"caption\":\"Chicago construction crane\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/initialization\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"C++ Initialization and Constructors Explanation\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/#website\",\"url\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/\",\"name\":\"Logikal Blog\",\"description\":\"For people with attention spans longer than a Tweet\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/#\\\/schema\\\/person\\\/c077f770ade13de7faaf616c3eac6842\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/#\\\/schema\\\/person\\\/c077f770ade13de7faaf616c3eac6842\",\"name\":\"seasoned_geek\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/ae9adac14079d84b909e635d7af986fe4568053af4fd9ff8d4109298c392493e?s=96&d=mm&r=r\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/ae9adac14079d84b909e635d7af986fe4568053af4fd9ff8d4109298c392493e?s=96&d=mm&r=r\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/ae9adac14079d84b909e635d7af986fe4568053af4fd9ff8d4109298c392493e?s=96&d=mm&r=r\",\"caption\":\"seasoned_geek\"},\"logo\":{\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/ae9adac14079d84b909e635d7af986fe4568053af4fd9ff8d4109298c392493e?s=96&d=mm&r=r\"},\"description\":\"Roland Hughes started his IT career in the early 1980s. He quickly became a consultant and president of Logikal Solutions, a software consulting firm specializing in OpenVMS application and C++\\\/Qt touchscreen\\\/embedded Linux development. Early in his career he became involved in what is now called cross platform development. Given the dearth of useful books on the subject he ventured into the world of professional author in 1995 writing the first of the \\\"Zinc It!\\\" book series for John Gordon Burke Publisher, Inc. A decade later he released a massive (nearly 800 pages) tome \\\"The Minimum You Need to Know to Be an OpenVMS Application Developer\\\" which tried to encapsulate the essential skills gained over what was nearly a 20 year career at that point. From there \\\"The Minimum You Need to Know\\\" book series was born. Three years later he wrote his first novel \\\"Infinite Exposure\\\" which got much notice from people involved in the banking and financial security worlds. Some of the attacks predicted in that book have since come to pass. While it was not originally intended to be a trilogy, it became the first book of \\\"The Earth That Was\\\" trilogy: Infinite Exposure Lesedi - The Greatest Lie Ever Told John Smith - Last Known Survivor of the Microsoft Wars When he is not consulting Roland Hughes posts about technology and sometimes politics on his blog. He also has regularly scheduled Sunday posts appearing on the Interesting Authors blog.\",\"sameAs\":[\"https:\\\/\\\/theminimumyouneedtoknow.com\"],\"url\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/author\\\/seasoned_geek\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"C++ Initialization and Constructors Explanation &#8211; Logikal Blog","description":"While many of the tools I and other developers use making medical devices require C++17 much of the code we write is C++11 . . .","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:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/initialization\/","og_locale":"en_US","og_type":"article","og_title":"C++ Initialization and Constructors Explanation &#8211; Logikal Blog","og_description":"While many of the tools I and other developers use making medical devices require C++17 much of the code we write is C++11 . . .","og_url":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/initialization\/","og_site_name":"Logikal Blog","article_published_time":"2024-01-02T22:48:45+00:00","article_modified_time":"2024-01-02T22:48:47+00:00","og_image":[{"width":640,"height":480,"url":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2017\/06\/MVC-001S.jpg","type":"image\/jpeg"}],"author":"seasoned_geek","twitter_card":"summary_large_image","twitter_misc":{"Written by":"seasoned_geek","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/initialization\/#article","isPartOf":{"@id":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/initialization\/"},"author":{"name":"seasoned_geek","@id":"https:\/\/www.logikalsolutions.com\/wordpress\/#\/schema\/person\/c077f770ade13de7faaf616c3eac6842"},"headline":"C++ Initialization and Constructors Explanation","datePublished":"2024-01-02T22:48:45+00:00","dateModified":"2024-01-02T22:48:47+00:00","mainEntityOfPage":{"@id":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/initialization\/"},"wordCount":521,"commentCount":0,"publisher":{"@id":"https:\/\/www.logikalsolutions.com\/wordpress\/#\/schema\/person\/c077f770ade13de7faaf616c3eac6842"},"image":{"@id":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/initialization\/#primaryimage"},"thumbnailUrl":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2017\/06\/MVC-001S.jpg","keywords":["C++","C++17","CopperSpice"],"articleSection":["Experience","Information Technology"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/initialization\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/initialization\/","url":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/initialization\/","name":"C++ Initialization and Constructors Explanation &#8211; Logikal Blog","isPartOf":{"@id":"https:\/\/www.logikalsolutions.com\/wordpress\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/initialization\/#primaryimage"},"image":{"@id":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/initialization\/#primaryimage"},"thumbnailUrl":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2017\/06\/MVC-001S.jpg","datePublished":"2024-01-02T22:48:45+00:00","dateModified":"2024-01-02T22:48:47+00:00","description":"While many of the tools I and other developers use making medical devices require C++17 much of the code we write is C++11 . . .","breadcrumb":{"@id":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/initialization\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/initialization\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/initialization\/#primaryimage","url":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2017\/06\/MVC-001S.jpg","contentUrl":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2017\/06\/MVC-001S.jpg","width":640,"height":480,"caption":"Chicago construction crane"},{"@type":"BreadcrumbList","@id":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/initialization\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.logikalsolutions.com\/wordpress\/"},{"@type":"ListItem","position":2,"name":"C++ Initialization and Constructors Explanation"}]},{"@type":"WebSite","@id":"https:\/\/www.logikalsolutions.com\/wordpress\/#website","url":"https:\/\/www.logikalsolutions.com\/wordpress\/","name":"Logikal Blog","description":"For people with attention spans longer than a Tweet","publisher":{"@id":"https:\/\/www.logikalsolutions.com\/wordpress\/#\/schema\/person\/c077f770ade13de7faaf616c3eac6842"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.logikalsolutions.com\/wordpress\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.logikalsolutions.com\/wordpress\/#\/schema\/person\/c077f770ade13de7faaf616c3eac6842","name":"seasoned_geek","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/ae9adac14079d84b909e635d7af986fe4568053af4fd9ff8d4109298c392493e?s=96&d=mm&r=r","url":"https:\/\/secure.gravatar.com\/avatar\/ae9adac14079d84b909e635d7af986fe4568053af4fd9ff8d4109298c392493e?s=96&d=mm&r=r","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/ae9adac14079d84b909e635d7af986fe4568053af4fd9ff8d4109298c392493e?s=96&d=mm&r=r","caption":"seasoned_geek"},"logo":{"@id":"https:\/\/secure.gravatar.com\/avatar\/ae9adac14079d84b909e635d7af986fe4568053af4fd9ff8d4109298c392493e?s=96&d=mm&r=r"},"description":"Roland Hughes started his IT career in the early 1980s. He quickly became a consultant and president of Logikal Solutions, a software consulting firm specializing in OpenVMS application and C++\/Qt touchscreen\/embedded Linux development. Early in his career he became involved in what is now called cross platform development. Given the dearth of useful books on the subject he ventured into the world of professional author in 1995 writing the first of the \"Zinc It!\" book series for John Gordon Burke Publisher, Inc. A decade later he released a massive (nearly 800 pages) tome \"The Minimum You Need to Know to Be an OpenVMS Application Developer\" which tried to encapsulate the essential skills gained over what was nearly a 20 year career at that point. From there \"The Minimum You Need to Know\" book series was born. Three years later he wrote his first novel \"Infinite Exposure\" which got much notice from people involved in the banking and financial security worlds. Some of the attacks predicted in that book have since come to pass. While it was not originally intended to be a trilogy, it became the first book of \"The Earth That Was\" trilogy: Infinite Exposure Lesedi - The Greatest Lie Ever Told John Smith - Last Known Survivor of the Microsoft Wars When he is not consulting Roland Hughes posts about technology and sometimes politics on his blog. He also has regularly scheduled Sunday posts appearing on the Interesting Authors blog.","sameAs":["https:\/\/theminimumyouneedtoknow.com"],"url":"https:\/\/www.logikalsolutions.com\/wordpress\/author\/seasoned_geek\/"}]}},"_links":{"self":[{"href":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-json\/wp\/v2\/posts\/6784","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-json\/wp\/v2\/comments?post=6784"}],"version-history":[{"count":0,"href":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-json\/wp\/v2\/posts\/6784\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-json\/wp\/v2\/media\/2184"}],"wp:attachment":[{"href":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-json\/wp\/v2\/media?parent=6784"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-json\/wp\/v2\/categories?post=6784"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-json\/wp\/v2\/tags?post=6784"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}