C++相談室 part166 (613レス)
C++相談室 part166 http://mevius.5ch.net/test/read.cgi/tech/1745631298/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
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
21: デフォルトの名無しさん (ワッチョイ a701-uYIY) [sage] 2025/05/06(火) 13:03:38.40 ID:tCHDdC6b0 >>20 いやいや非難ではなく 俺が知っているC++じゃないw - operatorの前のautoは何ぞ? - !!演算子? http://mevius.5ch.net/test/read.cgi/tech/1745631298/21
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
23: デフォルトの名無しさん (ワッチョイ a701-uYIY) [sage] 2025/05/06(火) 14:29:32.39 ID:tCHDdC6b0 >>22 解説を有難うございます 返り値を後置する記法のアドバンテージが分かりました >>18は返り値を後置にしてるけどもこれは必須ではないということね !!も分かりました(g++-12はなしで通ります) http://mevius.5ch.net/test/read.cgi/tech/1745631298/23
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
25: デフォルトの名無しさん (ワッチョイ 1279-k14q) [sage] 2025/05/06(火) 17:28:20.12 ID:GbYxwNEQ0 非0ならtrueやないんか http://mevius.5ch.net/test/read.cgi/tech/1745631298/25
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
27: 15 (ワッチョイ afaa-hOut) [sage] 2025/05/06(火) 18:35:49.00 ID:jhNAw2EC0 >>18 重ね重ねありがとうございます。 なんとか理解してみます。 C++20だとどうなります? 一応、C++の新機能ってぺージ見たんですけど、よくんからなくて http://mevius.5ch.net/test/read.cgi/tech/1745631298/27
28: デフォルトの名無しさん (アウアウウー Sac3-7Zak) [sage] 2025/05/06(火) 18:36:01.85 ID:nZOyiL0Ra enable_ifは便利だけど使ったら負け感が半端無い http://mevius.5ch.net/test/read.cgi/tech/1745631298/28
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
31: 15 (ワッチョイ afaa-hOut) [sage] 2025/05/06(火) 21:47:53.45 ID:jhNAw2EC0 >>30 ありがとうございます。 rangeはときどき見てたんですけど、ぱっと見あんまり必要性がわからなかったんですけど、こういう理由があったんですね。 これから時間があるときは、rangeを意識して書きたいと思います。 ありがとうございました http://mevius.5ch.net/test/read.cgi/tech/1745631298/31
32: デフォルトの名無しさん (ワッチョイ df01-7ORQ) [sage] 2025/05/07(水) 09:06:41.19 ID:pa9hjTXM0 >>29 ostreamあんま詳しくないので本来の意味じゃないってのが良くわからんかった コンテナでなければ弾くようにしてるんだと思うけどsizeofで括ってるのは式自体が評価されないようにするため? http://mevius.5ch.net/test/read.cgi/tech/1745631298/32
33: はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 6332-x8bn) [sage] 2025/05/07(水) 09:38:53.26 ID:jrPMMEx+0 >>32 そう。 実態としては sizeof の中の式が成立するかどうかだけが判定基準になってる。 sizeof が 0 を返すことはあり得ないわけだし sizeof の中の式が成立しないなら enable_if で判定する以前に弾かれるわけなので enable_if は判定の役に立ってない。 式を書く場所があるならなんでもよかったんだけど最終的には ostream& になってもらわないといけないので enable_if が楽だったというだけ。 http://mevius.5ch.net/test/read.cgi/tech/1745631298/33
34: デフォルトの名無しさん (ササクッテロラ Spc7-7ORQ) [sage] 2025/05/07(水) 09:53:44.11 ID:zHwjwbR2p あーなるほど、意味がわかった ありがとう http://mevius.5ch.net/test/read.cgi/tech/1745631298/34
35: デフォルトの名無しさん (ワッチョイ 1202-mpUa) [sage] 2025/05/07(水) 22:31:24.20 ID:OFqp/W1O0 vectorって、 宣言時に、要素数と初期値を設定できないっけ? 気持ちとしては、、 ↓ vector<int> my_data(3) = { 6, 8, 44 }; http://mevius.5ch.net/test/read.cgi/tech/1745631298/35
36: はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 6332-x8bn) [sage] 2025/05/07(水) 22:42:31.19 ID:jrPMMEx+0 >>35 できない。 そうしたい理由としては指定した個数分の要素が間違いなく与えられているようにってこと? http://mevius.5ch.net/test/read.cgi/tech/1745631298/36
37: デフォルトの名無しさん (ワッチョイ a701-uYIY) [sage] 2025/05/07(水) 22:57:31.27 ID:F57QgFhN0 >>35 arrayはそれに近いな array<int, 3> my_data = {6, 8, 44}; http://mevius.5ch.net/test/read.cgi/tech/1745631298/37
38: はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 6332-x8bn) [sage] 2025/05/07(水) 23:14:20.16 ID:jrPMMEx+0 >>35 与えている要素の個数に間違いがないことを確実にしたいというのが目的だとしたらこういう関数を定義するのはどうだろう。 https://wandbox.org/permlink/QBu2dsYRUkrMmLzC http://mevius.5ch.net/test/read.cgi/tech/1745631298/38
39: デフォルトの名無しさん (ワッチョイ 1202-mpUa) [sage] 2025/05/07(水) 23:14:51.64 ID:OFqp/W1O0 >>36 まあ、普通の配列なら、 int my_data[3]= { 6, 8, 44 }; ってできるので。 できても問題は無さそうだけど… http://mevius.5ch.net/test/read.cgi/tech/1745631298/39
40: はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 6332-x8bn) [sage] 2025/05/07(水) 23:25:35.43 ID:jrPMMEx+0 >>39 文法の一貫性としてということ? 配列をそう定義したときの [3] は型の一部であってコンストラクタに渡す値ではないから……。 配列をそう書けるのが例外的、変則的な措置だと考えるべきだと思う。 http://mevius.5ch.net/test/read.cgi/tech/1745631298/40
41: デフォルトの名無しさん (JP 0Hee-L4A6) [] 2025/05/08(木) 00:57:15.98 ID:4oP42WaSH >>20 decvalは要る。お前さんは数値計算知らん。 型拡張で重要になるぞ。 http://mevius.5ch.net/test/read.cgi/tech/1745631298/41
42: デフォルトの名無しさん (JP 0Hee-L4A6) [] 2025/05/08(木) 01:50:59.67 ID:4oP42WaSH はちみつさんはC++仕様策定委員なの? 委員会でそんな発言されたら困るよ。 今さらtraitsみたいなトリック 使いたくないよ。 http://mevius.5ch.net/test/read.cgi/tech/1745631298/42
43: はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 6332-6RYV) [sage] 2025/05/08(木) 02:01:35.71 ID:aAWkv5hi0 >>41 何を言ってるんだ? >>18 で declval を使ったのが無意味だという話をしてるんだぞ。 http://mevius.5ch.net/test/read.cgi/tech/1745631298/43
44: デフォルトの名無しさん (ワッチョイ 1202-mpUa) [sage] 2025/05/08(木) 03:34:36.76 ID:JGiTQ1yK0 >>38 これでできましたね。 (... && is_convertible_v<U, T>)ってなんでしょうか? (可変個引数Uが存在してって意味?) http://mevius.5ch.net/test/read.cgi/tech/1745631298/44
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 569 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.022s