質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

2回答

975閲覧

constexprを勉強しなおしたので確認

apa

総合スコア68

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2021/07/11 13:04

const int x = 0 //1 : コンパイル時定数 const int y = x //2 : 非コンパイル定数

constexprについて勉強したので自分の理解が正しいのかの確認をしたいです!
1 : を明示的に表現したのがconstexprという認識であっていますでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

コンパイル時定数は仕様上は「定数式」として説明されていて、定数であるというのは constexpr で宣言する変数の初期化子として現れることが出来ることを意味します。

cpp

1#include <type_traits> 2#include <iostream> 3 4int main(void) { 5 const int x = 1; 6 const int y = x; 7 constexpr int z = x; 8 constexpr int w = y; 9 std::cout << std::is_same<decltype(z), const int>::value << std::endl; 10}

結論としては質問者の提示する例において xy もコンパイル時に定数として使えます。

原則として const は「その変数には書き込みできない」という性質を表すものですが、それに加えて「定数初期化 (初期化子が定数式; constant initialization) である場合にはその変数も定数式として使える」という規則です。 y の初期化子が (定数式であるところの) x なことによって y も定数式として使えるようになります。 (C と C++ では定数式の要件が異なるので C++ の仕様を調べる場合に C の仕様と混同しないように注意してください。)

投稿2021/07/12 07:02

SaitoAtsushi

総合スコア5686

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

apa

2021/07/17 07:34

https://qiita.com/ysuzuki19/items/d87cfe1e8098733ef42c 上記サイトを参考にしたのですが自分の誤解があったみたいです! int main(void) { int a=1; const int b = 2; foo<b> bar; const int c = a; foo<c> baz; // エラー } int の部分をconstにしてしまっていました 変数でconstexprを初期化したところエラーがでてくれたので、正しかったです ありがとうございました!!
guest

0

1:も2:も定数伝播するため,コンパイル時定数になると思います。
1:がコンパイル時定数なら2:もコンパイル時定数になります。
例えば,

c++

1constexpr int x=1; 2constexpr int y=x;

でもコンパイルに成功します。

定数伝播

投稿2021/07/11 13:50

kansuke_t

総合スコア36

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問