C++相談室 part166 (404レス)
C++相談室 part166 http://mevius.5ch.net/test/read.cgi/tech/1745631298/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
必死チェッカー(本家)
(べ)
自ID
レス栞
あぼーん
20: はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 6332-6RYV) [sage] 2025/05/06(火) 12:35:30.96 ID:SvTeM3j90 declval は要らんな。 もっとキッチリしたほうがいいのか簡素にしようか迷ってちょっと変な感じになってる……。 http://mevius.5ch.net/test/read.cgi/tech/1745631298/20
22: はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 6332-x8bn) [sage] 2025/05/06(火) 13:42:19.73 ID:SvTeM3j90 >>21 関数名の前に auto を書くと仮引数の後ろに返却値の型を書けるようになる。 つまり -> から { までのところに書いてるのが返却値の型。 従来の書き方では関数の仮引数を返却値の型を決定する文脈では使えないというルールがある。 たとえば template<class T> decltype(e) foo(const T& e) {return e;} というようなことは出来ない。 ここで e を参照することは出来ない。 後置では返却値の型を書くところで仮引数を使ってかまわない。 template<class T> auto bar(const T& e) -> decltype(e) {return e;} ってのはアリ。 この場合の auto は返却値の型を後置するというマークってことね。 後置にする必要がなくても後置で一貫させてるプロジェクトもたぶん結構ある。 auto がこのような用途で使えるようになったのは C++11 からなのでもう結構浸透してると思うんだけど、全く見たことないの? !! は ! をふたつ並べてるだけ。 bool にキャストする代わりに使うイディオムなんだけど見づらいからやめたほうがよいという人も多い。 http://mevius.5ch.net/test/read.cgi/tech/1745631298/22
24: はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 6332-x8bn) [sage] 2025/05/06(火) 16:07:03.30 ID:SvTeM3j90 >>23 > !!も分かりました(g++-12はなしで通ります) 非型テンプレートパラメータで size_t (sizeof の結果) から bool への変換 (縮小変換) は認められていないはず…… ……と思ったらこれには例外があってコンパイル時計算の文脈で実際には情報が欠落しないなら OK。 つまり整数の 0 か 1 のときに限り (型の大きさとしては小さくなる変換であっても) bool に変換が可能。 http://mevius.5ch.net/test/read.cgi/tech/1745631298/24
26: はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 6332-x8bn) [sage] 2025/05/06(火) 18:05:53.77 ID:SvTeM3j90 >>25 せやで。 こういうときは変換されない。 template<bool num> class foo {}; int main(void) { foo<2> bar; } 通常の暗黙の変換で許されていても非型テンプレートパラメタでは縮小変換はされないので↓みたいなのも駄目。 template<unsigned char num> class foo {}; int main(void) { foo<1000> bar; } http://mevius.5ch.net/test/read.cgi/tech/1745631298/26
29: はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 6332-x8bn) [sage] 2025/05/06(火) 19:26:25.22 ID:SvTeM3j90 この場合は enable_if は本来の意味で使ってないしな。 http://mevius.5ch.net/test/read.cgi/tech/1745631298/29
30: はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 6332-x8bn) [sage] 2025/05/06(火) 20:07:39.20 ID:SvTeM3j90 >>27 こんな感じかな。 https://wandbox.org/permlink/IgEx8yRTGMZ2qr6U C++20 からはイテレータの概念も再編されて range という概念で扱うのが好ましいということになり、コンテナは range の一種だったことになった。 コンテナの中のここからここまでという範囲を表すものを中心にした考え方で、コンテナ自身も range だし、コンテナの除き窓のような view も range 。 Rust とか Go で言うスライスみたいなもん。 で、テンプレート引数として受け取った T が std::ranges::range の制約を満たすものなんやでという制約を入れることによってそうじゃないものはマッチしないように出来るし、 他の operator<< の候補にマッチするものがあるのならそっちが選ばれるようになる。 http://mevius.5ch.net/test/read.cgi/tech/1745631298/30
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.994s*