📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)

文字列「__FORCETOC__」を「{{#seo: |title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki |keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,Podman,電気回路,電子回路,基板,プリント基板 |description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This pag…
 
(同じ利用者による、間の2版が非表示)
140行目: 140行目:
  const int ten3 = twice(ten);      // コンパイル可能
  const int ten3 = twice(ten);      // コンパイル可能
  </syntaxhighlight>
  </syntaxhighlight>
<br>
下表に、ROM化できる条件を示す。なお、初期化する変数はconstexpr変数とする。<br>
下表から分かることは以下の3つである。<br>
* 渡す引数の指定子は、<code>const / constexpr</code>を指定する。
* 仮引数の指定子には、<code>指定子なし / const</code>を指定する。
* 関数の指定子は、必ず<code>constexpr</code>を指定する。<br>
<center>
{| class="wikitable"
|-
! 引数の指定子 !! 仮引数の指定子 !!  関数の指定子 !! コンパイルの可否
|- style="text-align:center;"
| × || - || - || ×
|- style="text-align:center;"
| - || - || × || ×
|- style="text-align:center;"
| - || - || const || ×
|- style="text-align:center;"
| - || constexpr || - || ×
|- style="text-align:center;"
| const || × || constexpr || ○
|- style="text-align:center;"
| const || const || constexpr || ○
|- style="text-align:center;"
| constexpr || × || constexpr || ○
|- style="text-align:center;"
| constexpr || const || constexpr || ○
|}
</center>
<br>
<br>
上記の例のように、constexpr関数の引数に何を渡すか、constexpr関数の戻り値で何を初期化するかによって、<br>
上記の例のように、constexpr関数の引数に何を渡すか、constexpr関数の戻り値で何を初期化するかによって、<br>
146行目: 174行目:
これは、設計者に対して、ROM化できるソースコードを記述する促すことになる。<br>
これは、設計者に対して、ROM化できるソースコードを記述する促すことになる。<br>
<br>
<br>
==== constexpr変数への戻り値の代入 ====
==== constexpr変数への戻り値の代入 ====
constexprは関数にも付加することができる。<br>
constexprは関数にも付加することができる。<br>
578行目: 607行目:
   
   
     return 0;
     return 0;
}
</syntaxhighlight>
<br><br>
== レビュー ==
# constが付加された変数を見つけた場合、その変数はRAMにしか配置できないものか確認する。<br>もし、ROM化できる場合、constexpr指定子に変更できないか考えて指摘する。
# constexprテンプレート関数の内部に、ROM化できない文や関数呼び出しが入っていないか確認する。
# ESCRでは再帰は使用してはいけないので、constexpr関数内において、再帰を使用してはいけない。
# constexpr関数やconstexpr関数テンプレートを見つけた場合、その戻り値で初期化している変数とconstexpr型指定されているかどうか確認する。<br>そうでなければ、constexpr関数やconstexpr関数テンプレートの存在意義がない。
<br>
以下の例は、constexprを付加しても意味の無い例である。<br>
ただし、コンパイルエラーにはならない。<br>
<syntaxhighlight lang="c++">
template <typename T>
constexpr inline static T GetFromCin()
{
    T value;
    cin >> value;
    return value;
  }
  }
  </syntaxhighlight>
  </syntaxhighlight>
588行目: 636行目:
* constexprを付けることができる関数の幅は広いので使用するべきである。<br>ただし、テンプレート関数をconstexprにするときは注意が必要である。
* constexprを付けることができる関数の幅は広いので使用するべきである。<br>ただし、テンプレート関数をconstexprにするときは注意が必要である。
<br><br>
<br><br>
{{#seo:
|title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki
|keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,Podman,電気回路,電子回路,基板,プリント基板
|description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This page is {{PAGENAME}} in our wiki about electronic circuits and SUSE Linux
|image=/resources/assets/MochiuLogo_Single_Blue.png
}}


__FORCETOC__
__FORCETOC__
[[カテゴリ:C++]]
[[カテゴリ:C++]]