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

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

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

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

Q&A

解決済

1回答

618閲覧

コルーチンのconstexprという提案はありましたか?

saki_chan

総合スコア40

C++

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

0グッド

1クリップ

投稿2020/04/14 06:24

コルーチンの学習していてふと思ったのですが、constexpr対応できないのかなと思いました。
例えばですが、

C++

1struct generator 2{ 3 struct promise_type; 4 using handle_t = std::coroutine_handle<promise_type>; 5 struct promise_type 6 { 7 int value; 8 auto get_return_object() 9 { 10 return generator{ handle_t::from_promise(*this) }; 11 } 12 auto initial_suspend() 13 { 14 return std::suspend_always{}; 15 } 16 auto final_suspend() 17 { 18 return std::suspend_always{}; 19 } 20 auto yield_value(int _value) 21 { 22 value = _value; 23 return std::suspend_always{}; 24 } 25 auto return_void() {} 26 auto unhandled_exception() {} 27 }; 28 void move_next() 29 { 30 handle.resume(); 31 } 32 int get_value() 33 { 34 return handle.promise().value; 35 } 36 generator(const generator&) = delete; 37 generator(generator&& _rhs)noexcept 38 :handle{ std::exchange(_rhs.handle,nullptr) } 39 {} 40private: 41 explicit generator(handle_t _handle) 42 :handle{ _handle } 43 {} 44 handle_t handle; 45}; 46 47generator F() 48{ 49 co_yield 1; 50 co_yield 2; 51} 52 53int main() 54{ 55 auto x = F(); 56 x.move_next(); 57 auto n1 = x.get_value(); 58 x.move_next(); 59 auto n2 = x.get_value(); 60 return 0; 61}

このようなコードだったらn1には1,n2には2が入ると確定だと思います。
[質問]
①constexpr対応しようという話はあったのか
②もしあった場合、どのような理由でなしになったのか

お願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

①constexpr対応しようという話はあったのか
②もしあった場合、どのような理由でなしになったのか

おそらく、まだコンパイル時処理を議論するフェーズに無いのではと推測します。
C++20に採択されたコルーチンは実行時ヒープメモリ・アロケーションを前提とする仕組みですが、このような動的メモリ確保を避ける最適化(Halo; coroutine Heap Allocation eLision Optimization)が議論されている段階です。

コンパイル時処理(constexpr)への言及は記憶にありませんが、時間があるならばC++ Coroutinesに関連する提案文書のリストから探してみてください :D

投稿2020/04/16 05:38

yohhoy

総合スコア6191

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問