!extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512
↑同じ内容を3行貼り付けること
次スレは>>980が立てること
無理なら細かく安価指定
※前スレ
C++相談室 part165
https://mevius.5ch.net/test/read.cgi/tech/1698705458/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
探検
C++相談室 part166
1sage (ワッチョイ 8732-NXaD)
2025/04/26(土) 10:34:58.41ID:pbPDl6lv0597はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 51e2-oZZu)
2025/08/23(土) 13:15:39.41ID:DefMPT1k0 代入のときは tie を使う。
598デフォルトの名無しさん (ワッチョイ c9bc-zJwz)
2025/08/23(土) 15:01:16.09ID:p3yrvAiP0 テンプレートの黒魔術で脳汁出てからが本番
599デフォルトの名無しさん (ワッチョイ 5be0-Srv/)
2025/08/23(土) 15:37:03.06ID:T+HzfXMC0 >>596
別の言語っぽくって考えは捨てた方が身のため
別の言語っぽくって考えは捨てた方が身のため
600デフォルトの名無しさん (ワッチョイ 9379-XJDV)
2025/08/23(土) 19:08:06.22ID:VwZegIlc0 666!
601デフォルトの名無しさん (スフッ Sdb3-im2P)
2025/08/23(土) 19:56:19.30ID:k0uySdFmd struct {
int r1,
float r2,
long r3
} t;
t = foo();
って描きたい
struct に tuple からのコンストラクタを実装すれば良いのかな
int r1,
float r2,
long r3
} t;
t = foo();
って描きたい
struct に tuple からのコンストラクタを実装すれば良いのかな
602はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5932-86vp)
2025/08/23(土) 20:18:30.70ID:CHT0FIec0 >>601
最初から foo がその型で返せばいいんでないの?
最初から foo がその型で返せばいいんでないの?
603デフォルトの名無しさん (ワッチョイ 6dad-W0Wb)
2025/08/24(日) 12:07:46.50ID:HqphwiLf0 C言語から続くカンマ演算子が分かってないんでは?
604デフォルトの名無しさん (ワッチョイ fee0-ea+o)
2025/08/24(日) 12:09:48.21ID:gU3L8vdd0 Pythonあがりだから型を定義する意味がわかってないんだと思う
605デフォルトの名無しさん (ワッチョイ 15d6-VoZ8)
2025/08/25(月) 07:55:54.04ID:O202BBJ90 a=10
a=’hello'
翻訳しながらだからできるんだろうけどね。
a=’hello'
翻訳しながらだからできるんだろうけどね。
606デフォルトの名無しさん (ワッチョイ 86cf-tcs3)
2025/08/25(月) 08:19:19.75ID:X23BjBGY0 >590
左辺にも現れるからじゃね?
左辺にも現れるからじゃね?
607初心者プログラマー (ワッチョイ d5ce-rKTE)
2025/08/28(木) 17:50:07.17ID:GULY1B8W0 cppでbazelでmediapipeのビルド方法を教えてくれる方はいませんか?
自分の環境
Visual Studio Community 2022
Windows11 64 ビット
scoopでbazel 5.3.0
Python 3.10.0
自分の環境
Visual Studio Community 2022
Windows11 64 ビット
scoopでbazel 5.3.0
Python 3.10.0
608青木康善 (アウアウウー Sa47-Rd44)
2025/09/07(日) 03:16:03.97ID:Fgms30k2a なんか、javaより簡単に思えてきました。
609はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 1732-F+lb)
2025/09/07(日) 06:54:14.37ID:Ur1gsBeL0 そうか。
610デフォルトの名無しさん (ワッチョイ dbd6-ERpe)
2025/09/07(日) 07:39:38.11ID:yhbLpr+z0 obj1=obj2;
の後obj2を変更すると、obj1が書き換わってまってびっくりして
その後、Javaが怖い親父です。
の後obj2を変更すると、obj1が書き換わってまってびっくりして
その後、Javaが怖い親父です。
611デフォルトの名無しさん (ワッチョイ 7f5f-Z2G8)
2025/09/07(日) 13:56:14.79ID:ZFShxqYO0 C/C++もポインタを代入するとそうなるよ
612デフォルトの名無しさん (ワッチョイ a380-1jR+)
2025/09/07(日) 15:17:34.87ID:DiKqvn8B0 この親父他の言語ほぼ使えんだろ
613デフォルトの名無しさん (アウアウウー Sa47-Y7lD)
2025/09/07(日) 15:34:33.99ID:AK/wIzqla614デフォルトの名無しさん (ワントンキン MMe6-+IOe)
2025/09/07(日) 16:53:15.89ID:2DaEs5aKM615デフォルトの名無しさん (ワッチョイ dbd6-ERpe)
2025/09/07(日) 17:20:59.28ID:yhbLpr+z0616デフォルトの名無しさん (ワッチョイ 1ba6-aHNR)
2025/09/07(日) 17:34:06.57ID:5bTmv8Qp0 参照メインの言語で書き換えを頻繁に行うとそりゃ事故るよ、注意力にも限界がある
値の書き換えをするならC++のように変数が直接値を持つ言語がいいし
参照をメインにするなら関数型言語のようにimmutableを基本にするべきだ
値の書き換えをするならC++のように変数が直接値を持つ言語がいいし
参照をメインにするなら関数型言語のようにimmutableを基本にするべきだ
617デフォルトの名無しさん (オッペケ Sr3b-wO3q)
2025/09/07(日) 18:17:46.03ID:kASsF2K3r ないしは、q=p; ってしたときに、pがダメになってくれるか
618デフォルトの名無しさん (ワントンキン MMe6-+IOe)
2025/09/07(日) 22:03:02.60ID:2DaEs5aKM >>615
C++では参照の競合があってもエラーとならず安全性は保証されないよ
例えば以下の挙動
std::vector<int> v{0, 1, 2, 3, 4, 5, 6, 7};
int& fifth = v[5];
v.push_back(100);
std::vector<int> w{8, 8, 8, 8, 8, 8, 8, 8};
fifth = 555;
std::cout << "v[5] = " << v[5] << std::endl;
std::cout << "w[5] = " << w[5] << std::endl;
C++では参照の競合があってもエラーとならず安全性は保証されないよ
例えば以下の挙動
std::vector<int> v{0, 1, 2, 3, 4, 5, 6, 7};
int& fifth = v[5];
v.push_back(100);
std::vector<int> w{8, 8, 8, 8, 8, 8, 8, 8};
fifth = 555;
std::cout << "v[5] = " << v[5] << std::endl;
std::cout << "w[5] = " << w[5] << std::endl;
619デフォルトの名無しさん (ワッチョイ dbd6-ERpe)
2025/09/08(月) 07:59:15.17ID:It1Ffdlu0620はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 1732-F+lb)
2025/09/08(月) 10:27:54.64ID:bx3qX9/R0 状況を一から説明すると……
これは fifth が古い無効になった場所を参照する可能性があることが問題。
std::vector の各要素は連続した空間に配置されることが保証されている。
要素の増減でその場所の都合が悪くなれば再配置される可能性があり、
再配置が起こったときは要素を指していたイテレータや参照は無効になるというルール。
無効なイテレータや参照を通じてアクセスしたら何が起こるかわからない。
再配置が起こる可能性がある操作については個々に仕様に書かれているけれど、
キャパシティを変更する (可能性がある) ような操作はどれも再配置が起こりえると覚えておけばいい。
そんでもってこれのややこしいところは「可能性がある」ってところで、
キャパシティをどれくらい拡大するか実装によって差があるし、
状況によっては場所を移動せずに大きさを伸ばせるかもしれない。
つまり問題が顕在化しないかもしれない。
一般論として倍々に延ばす実装がよく知られているからこの例では最初に要素を 8 個にして
顕在化しやすいようにしたんだろう。
これは fifth が古い無効になった場所を参照する可能性があることが問題。
std::vector の各要素は連続した空間に配置されることが保証されている。
要素の増減でその場所の都合が悪くなれば再配置される可能性があり、
再配置が起こったときは要素を指していたイテレータや参照は無効になるというルール。
無効なイテレータや参照を通じてアクセスしたら何が起こるかわからない。
再配置が起こる可能性がある操作については個々に仕様に書かれているけれど、
キャパシティを変更する (可能性がある) ような操作はどれも再配置が起こりえると覚えておけばいい。
そんでもってこれのややこしいところは「可能性がある」ってところで、
キャパシティをどれくらい拡大するか実装によって差があるし、
状況によっては場所を移動せずに大きさを伸ばせるかもしれない。
つまり問題が顕在化しないかもしれない。
一般論として倍々に延ばす実装がよく知られているからこの例では最初に要素を 8 個にして
顕在化しやすいようにしたんだろう。
621デフォルトの名無しさん (ワッチョイ dbd6-ERpe)
2025/09/08(月) 10:47:28.92ID:It1Ffdlu0 >>620
どもです。要素数8ってのもさすがって感じでした。
どもです。要素数8ってのもさすがって感じでした。
622デフォルトの名無しさん (ワンミングク MM8a-+IOe)
2025/09/08(月) 22:24:25.56ID:EA0JjXQaM >>620
今回の問題に限ればその通り
ただし問題の本質は二つの参照(変数fifthとpush_back呼び出し時の参照)を使ったこと
今回はダングリング参照で問題を分かりやすく示したがメモリ問題もvectorも本質ではなく任意のデータに対する参照で問題が起きる
既に参照fifthを持つ状況で同じデータを指す別の参照を関数push_backに渡してデータが書き換えられた
参照fifthが指す値は当初から値が変更されてしまったりダングリングで無効な値になる可能性がある
これが二つの参照の競合による問題で値がいつの間にか書き換わってしまっていることでバグも誘発する
両方の参照が書き換えを伴わないreadonlyの時のみ安全になる
片方もしくは両方の参照が書き換えを伴うと安全でなくなる
今回の問題に限ればその通り
ただし問題の本質は二つの参照(変数fifthとpush_back呼び出し時の参照)を使ったこと
今回はダングリング参照で問題を分かりやすく示したがメモリ問題もvectorも本質ではなく任意のデータに対する参照で問題が起きる
既に参照fifthを持つ状況で同じデータを指す別の参照を関数push_backに渡してデータが書き換えられた
参照fifthが指す値は当初から値が変更されてしまったりダングリングで無効な値になる可能性がある
これが二つの参照の競合による問題で値がいつの間にか書き換わってしまっていることでバグも誘発する
両方の参照が書き換えを伴わないreadonlyの時のみ安全になる
片方もしくは両方の参照が書き換えを伴うと安全でなくなる
623デフォルトの名無しさん (ワッチョイ e3ad-ckwE)
2025/09/08(月) 23:06:53.70ID:HoahUzIM0 再配置が行われるものに参照使って、その生存期間を超えてアクセスするのは未定義動作になるわな。C++に慣れてればそんなコードは書かないが、初級者向けではない。readonly より、lifetime の問題でしょう
624デフォルトの名無しさん (ワッチョイ 177c-h0AF)
2025/09/09(火) 00:29:11.16ID:TMUamLpP0 参照が無効になる条件は規定されてるし、先にcapacity設定するとか避ける方法も用意されてる
「問題の本質」とやらはただのライブラリ仕様の無理解だろ
分かりにくいとか間違えやすいとかの批判なら分かるけど
「問題の本質」とやらはただのライブラリ仕様の無理解だろ
分かりにくいとか間違えやすいとかの批判なら分かるけど
625デフォルトの名無しさん (ワントンキン MM8a-+IOe)
2025/09/09(火) 07:24:41.95ID:DVL1/TmTM626デフォルトの名無しさん (ワントンキン MM8a-+IOe)
2025/09/09(火) 07:29:27.85ID:DVL1/TmTM627デフォルトの名無しさん (スフッ Sdba-bj1o)
2025/09/09(火) 10:47:02.21ID:g327vfuJd readonlyでない競合する参照を禁止している言語もある
628デフォルトの名無しさん (ワッチョイ 97e4-1jR+)
2025/09/09(火) 12:16:08.28ID:iPWQv8Oa0 はいはい線型論理言いたいだけ
629デフォルトの名無しさん (アウアウウー Sa47-Rd44)
2025/09/10(水) 00:51:51.50ID:BnR46AnOa >>618
これはvにpush_backしたところでキャパ超えて別の場所にリアロックされ、ともない元のvの領域が空になって、即座にwがスポンとそのvが元あった場所に配置されたってことなのですか?
これはvにpush_backしたところでキャパ超えて別の場所にリアロックされ、ともない元のvの領域が空になって、即座にwがスポンとそのvが元あった場所に配置されたってことなのですか?
630デフォルトの名無しさん (スッププ Sdba-j4tR)
2025/09/10(水) 02:12:52.51ID:IF/zSGeMd そうだよ。
規格上は何の保証もないから、処理系とかによっては全然違う結果になるかもしれないけど。
規格上は何の保証もないから、処理系とかによっては全然違う結果になるかもしれないけど。
632デフォルトの名無しさん (ワッチョイ 4e1f-bj1o)
2025/09/10(水) 10:13:08.62ID:zTYInGVv0 >再構築されて新規の要素を保持してしまったで合ってますか
こう聴かれると「違う」と返事したくなる
こう聴かれると「違う」と返事したくなる
633デフォルトの名無しさん (ワッチョイ 177c-h0AF)
2025/09/10(水) 18:40:20.64ID:Vv9EwJFH0 未定義動作だからな
たまたま鼻から悪魔が出る代わりにそうなっただけだ
たまたま鼻から悪魔が出る代わりにそうなっただけだ
634デフォルトの名無しさん (ワッチョイ a75f-ckwE)
2025/09/10(水) 22:18:27.54ID:RAO/BxQt0 参照の競合という用語に違和感。並行性に関わる競合状態 (race condition) の話をしようとしているのか?
635デフォルトの名無しさん (ワッチョイ b68c-1jR+)
2025/09/10(水) 22:31:03.50ID:BZTqerG60 してない
636デフォルトの名無しさん (ワッチョイ a3d6-X2Ee)
2025/09/22(月) 23:24:45.15ID:ZT49UQS30 でわ 簡単?な話題を。
int data{}; ってやります? int data{0}; ってやります?
int data{}; ってやります? int data{0}; ってやります?
637デフォルトの名無しさん (ワッチョイ 7f7c-3pIy)
2025/09/23(火) 06:55:15.77ID:S9rfzcfC0 int data = 0; ってやる
638はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7f32-BMc3)
2025/09/23(火) 10:47:53.44ID:0b1Ncss10 auto data = 0;
とか、型が明示的なのが好みなら
auto data = int();
といった選択肢もある。
私は
int data = 0;
派だけど。
とか、型が明示的なのが好みなら
auto data = int();
といった選択肢もある。
私は
int data = 0;
派だけど。
639デフォルトの名無しさん (ワッチョイ 8a02-CSnM)
2025/09/23(火) 10:57:08.68ID:NP1ck5iL0640はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7f32-BMc3)
2025/09/23(火) 11:12:21.28ID:0b1Ncss10641デフォルトの名無しさん (ワッチョイ 8a02-CSnM)
2025/09/23(火) 11:17:00.61ID:NP1ck5iL0642デフォルトの名無しさん (ワッチョイ a3d6-X2Ee)
2025/09/23(火) 12:32:51.63ID:zwbfimRS0 >>638
イテレータの返しを受けるオブジェクトはauto使うと便利みたいな
イテレータの返しを受けるオブジェクトはauto使うと便利みたいな
643デフォルトの名無しさん (ワッチョイ 46f6-RvFB)
2025/09/23(火) 14:23:55.04ID:SO+rqWsF0644はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7f32-BMc3)
2025/09/23(火) 14:48:06.92ID:0b1Ncss10 前提条件を変えると何でも言えてしまう。
とりあえずここでは発端は >>636 なのだから変数 data の型が int であり (多相にはしない) 内容はゼロで初期化するという狭い仮定を置いたほうがよかろう。
auto を持ち出したのは変に話題を曲げてしまったな。すまぬ。
とりあえずここでは発端は >>636 なのだから変数 data の型が int であり (多相にはしない) 内容はゼロで初期化するという狭い仮定を置いたほうがよかろう。
auto を持ち出したのは変に話題を曲げてしまったな。すまぬ。
645デフォルトの名無しさん (オッペケ Sr23-RsoB)
2025/09/23(火) 20:34:08.12ID:3YWvMRZsr 今北
いまさら人に聞けない
auto って、右辺の型もそのまま左辺にコピーしてきてよ、って感じで使ってるんだけど
その認識で間違ってない? 落とし穴とかある?
いまさら人に聞けない
auto って、右辺の型もそのまま左辺にコピーしてきてよ、って感じで使ってるんだけど
その認識で間違ってない? 落とし穴とかある?
646デフォルトの名無しさん (ワッチョイ 467f-IpVF)
2025/09/23(火) 20:39:56.49ID:7uroOMzl0 右辺が式の場合もあるし
その時自分が思ってた型とautoの型が一致するとは限らないところとか
その時自分が思ってた型とautoの型が一致するとは限らないところとか
647デフォルトの名無しさん (ワッチョイ 73f0-ar7H)
2025/09/23(火) 21:26:37.10ID:qWXNEai60 autoで手抜きしすぎるとあとでソース追うときにエライ苦労することあるから気を付けろよ
648デフォルトの名無しさん (ワッチョイ 8a02-CSnM)
2025/09/23(火) 21:34:42.79ID:NP1ck5iL0649はちみつ餃子 ◆8X2XSCHEME (ワッチョイ e328-BMc3)
2025/09/24(水) 02:24:38.07ID:hHyw0Adk0 >>645
その認識でおおよそ正しいが変則的な部分もある。
auto foo = { 1, 2, 3 };
みたいに書くと initializer_list に推論されたりするのは知らないとちょっとびっくりするかもしれない。
それと修飾子などを組み合わせで使うことも出来る。
const auto* bar = &baz;
みたいに。
その認識でおおよそ正しいが変則的な部分もある。
auto foo = { 1, 2, 3 };
みたいに書くと initializer_list に推論されたりするのは知らないとちょっとびっくりするかもしれない。
それと修飾子などを組み合わせで使うことも出来る。
const auto* bar = &baz;
みたいに。
650デフォルトの名無しさん (ワッチョイ 8a02-CSnM)
2025/09/24(水) 07:20:39.19ID:tMR45KsJ0651はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7f32-VPhE)
2025/09/24(水) 08:23:07.29ID:yL+cLVSS0 >>650
ゆるいというのがどういう意味で言ってるのかわからないからなんとも言えない。
特に有用なのはテンプレート内で、たとえば
template<class T>
void foo(T x) {
auto bar = baz(x); // baz は関数テンプレートだとする
// ここでなんやかんや
}
みたいなのがあるとき auto を使わずに型を合わせて書こうとすると
template<class T>
void foo(T x) {
decltype(baz(x)) bar = baz(x); // baz は関数テンプレートだとする
// ここでなんやかんや
}
みたいになってわずらわしい。
初期化子の型をそのまま持ってくれば良いときに型を明示しても可読性に貢献しないし、簡便な記法があると楽。
ゆるいというのがどういう意味で言ってるのかわからないからなんとも言えない。
特に有用なのはテンプレート内で、たとえば
template<class T>
void foo(T x) {
auto bar = baz(x); // baz は関数テンプレートだとする
// ここでなんやかんや
}
みたいなのがあるとき auto を使わずに型を合わせて書こうとすると
template<class T>
void foo(T x) {
decltype(baz(x)) bar = baz(x); // baz は関数テンプレートだとする
// ここでなんやかんや
}
みたいになってわずらわしい。
初期化子の型をそのまま持ってくれば良いときに型を明示しても可読性に貢献しないし、簡便な記法があると楽。
652デフォルトの名無しさん (JP 0Hc6-xemb)
2025/09/24(水) 12:48:43.78ID:4f1PT/5nH std::make_sharedとか使うと行が長くなりがちだからauto便利
653デフォルトの名無しさん (ワッチョイ 4a4e-rfem)
2025/09/24(水) 23:18:51.30ID:OQUpbPvH0 autoでしか出来ないこともあるから奥が深い
654デフォルトの名無しさん (ワッチョイ e3a6-YvLc)
2025/09/24(水) 23:47:45.55ID:wXWMV3aG0 罠仕様が仕込まれてるってだけでは
655デフォルトの名無しさん (オッペケ Sr23-RsoB)
2025/09/25(木) 06:56:54.48ID:iHrblX0Rr Rust派に言わせれば、C++が罠らしいぞw
でもそのC++が、今の俺を生んだ
でもそのC++が、今の俺を生んだ
656デフォルトの名無しさん (ワッチョイ 0679-P6+q)
2025/09/25(木) 16:58:42.68ID:tx4jrZ/E0 有用なときもあるけど、ライブラリ用のコードで乱発するとメンテナンスが大変
可読性メンテナンス性を考えるなら、冗長でない限りはちゃんと書いた方がいい
>>651
それもbaz(buz?)の戻り値の型はTから導出出来るんだから、よほどややこしくない限りはそれ(decltypeで手抜きせずに)を書いた方が可読性メンテナンス性の面では良い
可読性メンテナンス性を考えるなら、冗長でない限りはちゃんと書いた方がいい
>>651
それもbaz(buz?)の戻り値の型はTから導出出来るんだから、よほどややこしくない限りはそれ(decltypeで手抜きせずに)を書いた方が可読性メンテナンス性の面では良い
657デフォルトの名無しさん (ワッチョイ 4640-RvFB)
2025/09/25(木) 17:00:57.66ID:/3f9OB3n0 >>656
お前テンプレートプログラミングの素人さんだよね
お前テンプレートプログラミングの素人さんだよね
658デフォルトの名無しさん (ワッチョイ 0679-P6+q)
2025/09/25(木) 20:40:29.81ID:tx4jrZ/E0 >>657
自己紹介乙w
Expression Template使って線形代数のライブラリ作った人間だが、ETで利用者がauto使うとどういう問題が起きるか答えてみ
まさか分かりませんとか言わないよな?
テンプレート使ったライブラリ(てか標準ライブラリ)を"利用する"しかしたことのない人間が調子に乗るな
自己紹介乙w
Expression Template使って線形代数のライブラリ作った人間だが、ETで利用者がauto使うとどういう問題が起きるか答えてみ
まさか分かりませんとか言わないよな?
テンプレート使ったライブラリ(てか標準ライブラリ)を"利用する"しかしたことのない人間が調子に乗るな
659デフォルトの名無しさん (ワッチョイ 3b82-IpVF)
2025/09/25(木) 20:43:04.50ID:nRsNESWS0 なんか「その理論を作ったのは私ですが」みたいなものを感じる
技術発表の際の怖い質問とかなんとかのやつw
技術発表の際の怖い質問とかなんとかのやつw
660デフォルトの名無しさん (ワッチョイ 4a4e-rfem)
2025/09/25(木) 20:43:46.25ID:ofoI5OnU0 言葉ならなんとでも言えるわな
661650 (ワッチョイ 8a02-CSnM)
2025/09/25(木) 20:44:29.25ID:hN2fGih80662650 (ワッチョイ 8a02-CSnM)
2025/09/25(木) 20:46:08.51ID:hN2fGih80663デフォルトの名無しさん (ワッチョイ 0679-P6+q)
2025/09/25(木) 20:54:22.86ID:tx4jrZ/E0664デフォルトの名無しさん (ワッチョイ ff67-ZW/Z)
2025/09/25(木) 21:36:33.99ID:SUv+BSiy0 今ならconceptを使うのが筋が良いんだろうな
他の言語みたいに型制約を書かずにジェネリクスを使えるけど、これは良くも悪くもだよね
楽と言えば楽だけど
他の言語みたいに型制約を書かずにジェネリクスを使えるけど、これは良くも悪くもだよね
楽と言えば楽だけど
665デフォルトの名無しさん (ワッチョイ 7307-RsoB)
2025/09/26(金) 01:34:47.37ID:aJA0eUoF0666デフォルトの名無しさん (ブーイモ MMbb-RvFB)
2025/09/26(金) 01:53:11.78ID:IAhZoqBcM >>658
端的に言って
> それもbaz(buz?)の戻り値の型はTから導出出来るんだから、
ここだよ
関数テンプレートなんだから型が導出できるとは限らない
なぜお前は断言したのかな?
導出できない例にぶち当たったことがないからだよな
端的に言って
> それもbaz(buz?)の戻り値の型はTから導出出来るんだから、
ここだよ
関数テンプレートなんだから型が導出できるとは限らない
なぜお前は断言したのかな?
導出できない例にぶち当たったことがないからだよな
667デフォルトの名無しさん (ワッチョイ 0679-P6+q)
2025/09/26(金) 07:26:52.27ID:uQKo8FSG0668デフォルトの名無しさん (ワッチョイ 8e02-C7mS)
2025/09/26(金) 08:15:01.31ID:FGFv/5hn0 conceptはテンプレートだけじゃなく普通の変数制約にも使えればなぁ。
継承がほとんどいらなくなる。
継承がほとんどいらなくなる。
669デフォルトの名無しさん (アウアウウー Sacf-kv3/)
2025/09/26(金) 10:28:59.69ID:UkFmEBgMa >>647
判ります
判ります
670デフォルトの名無しさん (ワッチョイ 5301-QugL)
2025/09/26(金) 11:12:51.14ID:TfDLIQWg0 手抜きというか情報を重複させないためにはautoが必要
苦労するのは型情報を追えないツールが悪い
苦労するのは型情報を追えないツールが悪い
671デフォルトの名無しさん (ワッチョイ bff0-ar7H)
2025/09/26(金) 11:53:52.65ID:IRzSnzQy0672はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7f32-VPhE)
2025/09/26(金) 12:02:33.14ID:E9e6Z1Un0 expression template を auto で受けるとまずいってのは Eigen みたいな設計の話かな。
あれはムーブがない時代の設計だから一時オブジェクトの参照を保持してしまう (先に一時オブジェクトが解体されて寿命管理が破綻する) のが問題なのであって、解決のための仕組みが与えられたにもかかわらずそれを使ってない設計が悪い。
expression template の仕組み上でどうしても解決できないというわけではないし auto のせいでもない。
ムーブのコストすら許容できないだとか、古い C++ (C++03 以前) もサポートしなきゃならないみたいな事情があるなら「すまんけどこのライブラリを使うときは注意して」というべき筋合いの話で、「auto なんか使っとるからじゃ!」みたいな態度はおかしいだろ。
あれはムーブがない時代の設計だから一時オブジェクトの参照を保持してしまう (先に一時オブジェクトが解体されて寿命管理が破綻する) のが問題なのであって、解決のための仕組みが与えられたにもかかわらずそれを使ってない設計が悪い。
expression template の仕組み上でどうしても解決できないというわけではないし auto のせいでもない。
ムーブのコストすら許容できないだとか、古い C++ (C++03 以前) もサポートしなきゃならないみたいな事情があるなら「すまんけどこのライブラリを使うときは注意して」というべき筋合いの話で、「auto なんか使っとるからじゃ!」みたいな態度はおかしいだろ。
673デフォルトの名無しさん (ワッチョイ 0679-P6+q)
2025/09/26(金) 12:09:27.62ID:uQKo8FSG0 >>672
>のが問題なのであって
違う。ETの場合、関数(演算子オーバーロード含む)が返すのは、式の構造を表すオブジェクトなのでそれをautoで受けると式の展開が行われず、計算処理の無いコードになってしまう
それを逆手に取ってauto経由で展開のタイミング遅らせることもできるけどね
あとETの利点はムーブどうこうで解決できる問題だけではないし、
誰も「ETを万人が使うべき」だなどと言っとらんよ、何が気に入らんかったの?
で、はちみつお前いつも「知ったかぶりしていい加減なことを言う奴」に怒ってる割に、自分も同じ事してるよな
>のが問題なのであって
違う。ETの場合、関数(演算子オーバーロード含む)が返すのは、式の構造を表すオブジェクトなのでそれをautoで受けると式の展開が行われず、計算処理の無いコードになってしまう
それを逆手に取ってauto経由で展開のタイミング遅らせることもできるけどね
あとETの利点はムーブどうこうで解決できる問題だけではないし、
誰も「ETを万人が使うべき」だなどと言っとらんよ、何が気に入らんかったの?
で、はちみつお前いつも「知ったかぶりしていい加減なことを言う奴」に怒ってる割に、自分も同じ事してるよな
674デフォルトの名無しさん (ワッチョイ 0679-P6+q)
2025/09/26(金) 12:11:01.51ID:uQKo8FSG0 あと
>「auto なんか使っとるからじゃ!」
一言も言ってないんだが。流れ読み直しておいで
>「auto なんか使っとるからじゃ!」
一言も言ってないんだが。流れ読み直しておいで
675はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7f32-BMc3)
2025/09/26(金) 12:54:00.88ID:E9e6Z1Un0 >>672
> autoで受けると式の展開が行われず、計算処理の無いコードになってしまう
書いてなかったが評価タイミングは適当な関数で明示的にする前提を置いてた。
未定義を踏むのは他の何と比べても駄目だ。単に思ってた結果と違ったなんてのは重要じゃない。
> 誰も「ETを万人が使うべき」だなどと言っとらんよ、何が気に入らんかったの?
日常的には使わないケースだからこそだ。
それが auto の問題点のように挙げられてただろ?
ライブラリのほうが C++ の自然な習慣に合わせるのが筋なのにさ。
> autoで受けると式の展開が行われず、計算処理の無いコードになってしまう
書いてなかったが評価タイミングは適当な関数で明示的にする前提を置いてた。
未定義を踏むのは他の何と比べても駄目だ。単に思ってた結果と違ったなんてのは重要じゃない。
> 誰も「ETを万人が使うべき」だなどと言っとらんよ、何が気に入らんかったの?
日常的には使わないケースだからこそだ。
それが auto の問題点のように挙げられてただろ?
ライブラリのほうが C++ の自然な習慣に合わせるのが筋なのにさ。
676デフォルトの名無しさん (ササクッテロラ Sp23-P6+q)
2025/09/26(金) 13:15:19.27ID:4po4sxfpp677デフォルトの名無しさん (ササクッテロラ Sp23-P6+q)
2025/09/26(金) 13:19:26.24ID:4po4sxfpp >>675
あと、ETで式の評価が発生するのは関数の呼び出し時ではない。どうでもいいけど
あと俺が作ったのは4次元まで(行列なら4x4まで。ゲーム用なので)だからヒープ使わんのでそもそもムーブどうこうは関係無いし、勝手によそのライブラリの未定義の話を持ってこられても困る
あと、ETで式の評価が発生するのは関数の呼び出し時ではない。どうでもいいけど
あと俺が作ったのは4次元まで(行列なら4x4まで。ゲーム用なので)だからヒープ使わんのでそもそもムーブどうこうは関係無いし、勝手によそのライブラリの未定義の話を持ってこられても困る
678はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7f32-BMc3)
2025/09/26(金) 13:57:45.37ID:E9e6Z1Un0 >>677
eigen は例として話題に出したつもりだったが余計だったな。
端的に主旨を言えば expression template の原理的には auto で受けれるように作ることは可能、かつその方が親切な作りだろうという話をしてる。
お前がどんな設計をしたのかなんてそれこそ俺には知ったことじゃないし、知りようもない。
お前のライブラリで auto で受けれないのはお前がそう設計しただけの話なので、 それを根拠に auto がどうこう言ってもなんの足しにもならん。
eigen は例として話題に出したつもりだったが余計だったな。
端的に主旨を言えば expression template の原理的には auto で受けれるように作ることは可能、かつその方が親切な作りだろうという話をしてる。
お前がどんな設計をしたのかなんてそれこそ俺には知ったことじゃないし、知りようもない。
お前のライブラリで auto で受けれないのはお前がそう設計しただけの話なので、 それを根拠に auto がどうこう言ってもなんの足しにもならん。
679デフォルトの名無しさん (ササクッテロラ Sp23-P6+q)
2025/09/26(金) 14:04:20.28ID:4po4sxfpp680はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7f32-BMc3)
2025/09/26(金) 14:08:11.66ID:E9e6Z1Un0 >>679
悪い設計のせいで利用者に不自然な書き方を強いるライブラリを作ったという話だということは理解してる。
悪い設計のせいで利用者に不自然な書き方を強いるライブラリを作ったという話だということは理解してる。
681デフォルトの名無しさん (ササクッテロラ Sp23-P6+q)
2025/09/26(金) 14:13:42.65ID:4po4sxfpp あといちいち知ったかぶってるバカに教えてやるのも腹が立つが、普通数値演算でET使うときは代入演算子やコンストラクタに式を渡した場所で初めて式を展開するんだよ
(autoでわざと評価を遅延させることも可能だと書いただろアホ)
Eigenでも多分そう
もちろんboost::spiritとかの構文解析ならパース処理の関数に渡すまで展開しないだろうが
(autoでわざと評価を遅延させることも可能だと書いただろアホ)
Eigenでも多分そう
もちろんboost::spiritとかの構文解析ならパース処理の関数に渡すまで展開しないだろうが
682デフォルトの名無しさん (ササクッテロラ Sp23-P6+q)
2025/09/26(金) 14:14:19.90ID:4po4sxfpp >>680
不自然なのはお前の、「スキルに見合わない自尊心」だと思うぞ
不自然なのはお前の、「スキルに見合わない自尊心」だと思うぞ
683デフォルトの名無しさん (ササクッテロラ Sp23-P6+q)
2025/09/26(金) 14:24:32.42ID:4po4sxfpp684デフォルトの名無しさん
2025/09/26(金) 17:03:47.95ID:iKKvsVQ80 お前ってのははちみつのこと言ってるのかね?
自分から絡んどいて何言ってんだろうコイツとしか思えんけど
自分から絡んどいて何言ってんだろうコイツとしか思えんけど
685デフォルトの名無しさん (ワッチョイ 0679-P6+q)
2025/09/26(金) 17:53:41.26ID:uQKo8FSG0686デフォルトの名無しさん (ワッチョイ 467f-RvFB)
2025/09/26(金) 19:18:42.84ID:+hZbpaFa0 >>685
ラムダの型導出できないだろ?
なんでこんなのも知らんのにえらそうにしてんの?
あと
https://wandbox.org/permlink/q5sTF1hp76f7jpnq
とかな
この例でfooでもif constexprを使えばautoはなくせるがそんなことやって可読性とかほざけない
他にもパターンあるぞ
謝罪してお前が作ったらしいヘボライブラリ公開したら教えてやってもいいぞ
ラムダの型導出できないだろ?
なんでこんなのも知らんのにえらそうにしてんの?
あと
https://wandbox.org/permlink/q5sTF1hp76f7jpnq
とかな
この例でfooでもif constexprを使えばautoはなくせるがそんなことやって可読性とかほざけない
他にもパターンあるぞ
謝罪してお前が作ったらしいヘボライブラリ公開したら教えてやってもいいぞ
687デフォルトの名無しさん (ワッチョイ 0679-P6+q)
2025/09/26(金) 19:32:01.31ID:uQKo8FSG0 屁理屈にも程がある
導出出来なきゃどうやって実体化するんだよ、Tしかテンプレートパラメータが無い状況でT以外に依存するものがあるのか?
まさか結果がTに依存するテンプレートになったら「導出出来てない」とかほざくの?
Tに依存するコンテナのイテレータと何も変わらんよそれ
導出出来なきゃどうやって実体化するんだよ、Tしかテンプレートパラメータが無い状況でT以外に依存するものがあるのか?
まさか結果がTに依存するテンプレートになったら「導出出来てない」とかほざくの?
Tに依存するコンテナのイテレータと何も変わらんよそれ
688デフォルトの名無しさん (ワッチョイ 0679-P6+q)
2025/09/26(金) 20:12:50.41ID:uQKo8FSG0 てかその例でauto使わずに戻り値格納するのにif constexpr使うしかないと思ってるとかどんだけ経験不足なんだ・・・(はっきり処理分けする必要がある場合を除く)
そんなクソみたいな例ならさすがにdecltypeかauto使いたくなるが(そもそも使うなと言ってないんだが)、conditionalも知らんのかお前は
必死に探してきてご苦労さん
そんなクソみたいな例ならさすがにdecltypeかauto使いたくなるが(そもそも使うなと言ってないんだが)、conditionalも知らんのかお前は
必死に探してきてご苦労さん
689デフォルトの名無しさん (ワッチョイ 7307-RsoB)
2025/09/26(金) 20:41:40.17ID:aJA0eUoF0 あの…そろそろ言っとくが
おもろいこと書いたヤツが優勝な?
2ちゃん5ちゃんの原則だぞ
おもろいこと書いたヤツが優勝な?
2ちゃん5ちゃんの原則だぞ
690デフォルトの名無しさん (ワッチョイ 0679-P6+q)
2025/09/26(金) 20:46:36.85ID:uQKo8FSG0 >>665はおもろいと自分で思ってんの?w
691デフォルトの名無しさん (ワッチョイ 467f-RvFB)
2025/09/26(金) 20:59:48.54ID:+hZbpaFa0692デフォルトの名無しさん (ワッチョイ 8a02-CSnM)
2025/09/27(土) 00:06:32.90ID:ov4hhnsF0 やっぱautoはゆるいね
C#とかPython的な感じ…
C#とかPython的な感じ…
693デフォルトの名無しさん (ワッチョイ 7307-RsoB)
2025/09/27(土) 05:08:15.66ID:rNLW6nkI0 C++は自由なんだよ
変な風にも使えるし、傍で見てたらめちゃくちゃにもなる
変な風にも使えるし、傍で見てたらめちゃくちゃにもなる
694デフォルトの名無しさん (ワッチョイ 1ed6-X2Ee)
2025/09/27(土) 05:36:45.87ID:p3kzti810 自分が使った方がいいと思った時は使う。
しかないよ。後は規約や上司に従うぐらいか。
しかないよ。後は規約や上司に従うぐらいか。
695デフォルトの名無しさん (ワッチョイ 7f7c-3pIy)
2025/09/27(土) 11:22:44.98ID:0x5FUGdK0 久々にC++スレらしくなってておっちゃん楽しいよ
696はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7f32-VPhE)
2025/09/27(土) 17:37:01.17ID:nSvwU9re0 >>681
コンストラクタや代入演算子で実際の計算を起動する方式も支持があるのは知ってるよ。
だからその代表例として有名どころの Eigen を話題に出したのだし、そこに齟齬はない。
その上で唯一の方式ではないし悪い設計だと言ってる。
私に反論するならどうしてそんな方式を取るのか利点 (悪い設計ではない理由) を説明すべきだった。
「数値計算で expression template を使うときは普通」なんて情報量ゼロのことを書かれても何の意味も感じられない。
コンストラクタや代入演算子をトリガーにするのは expression template を最適化として使う考え方だ。
つまり見かけ上は普通に式を書いてるだけなのに実は高速化しているというのがキモで、普通の式である「かのように」見える抽象化に意味がある。
実際の型を意識せざるを得なくなった段階で抽象化は破綻してる。
auto を使ったら何が起こるかを意識しなければならないのはライブラリ設計の失敗なんだよ。
隠れていたりいなかったりする半端な抽象化層を悪い設計と呼ぶのは間違ってるか?
> 再三言うが、>>658は>>657を叩くために出した問いに過ぎない
> 「意図しないコードになる」という話
そんなので意図しないコードになってしまうような作りのライブラリは出来が悪いという話なのはかわらん。
様々な事情に配慮してそうならざるを得ないということもあるというのならわかるが、
そうじゃなくて「それが普通なんだ」と思い込んだ狭い見識での判断なんだろ?
型を書くか auto にするかはスタイルの問題で、どちらを使うかで挙動が切り替わってしまうような設計のライブラリが本当にまともか?
コンストラクタや代入演算子で実際の計算を起動する方式も支持があるのは知ってるよ。
だからその代表例として有名どころの Eigen を話題に出したのだし、そこに齟齬はない。
その上で唯一の方式ではないし悪い設計だと言ってる。
私に反論するならどうしてそんな方式を取るのか利点 (悪い設計ではない理由) を説明すべきだった。
「数値計算で expression template を使うときは普通」なんて情報量ゼロのことを書かれても何の意味も感じられない。
コンストラクタや代入演算子をトリガーにするのは expression template を最適化として使う考え方だ。
つまり見かけ上は普通に式を書いてるだけなのに実は高速化しているというのがキモで、普通の式である「かのように」見える抽象化に意味がある。
実際の型を意識せざるを得なくなった段階で抽象化は破綻してる。
auto を使ったら何が起こるかを意識しなければならないのはライブラリ設計の失敗なんだよ。
隠れていたりいなかったりする半端な抽象化層を悪い設計と呼ぶのは間違ってるか?
> 再三言うが、>>658は>>657を叩くために出した問いに過ぎない
> 「意図しないコードになる」という話
そんなので意図しないコードになってしまうような作りのライブラリは出来が悪いという話なのはかわらん。
様々な事情に配慮してそうならざるを得ないということもあるというのならわかるが、
そうじゃなくて「それが普通なんだ」と思い込んだ狭い見識での判断なんだろ?
型を書くか auto にするかはスタイルの問題で、どちらを使うかで挙動が切り替わってしまうような設計のライブラリが本当にまともか?
レスを投稿する
ニュース
- 日本の立場説明へ…外務省局長が北京到着 “台湾有事”首相答弁に中国反発 ★4 [煮卵★]
- 橋下徹氏「この喧嘩は日本の完敗」 台湾有事答弁めぐる外務省局長訪中で指摘「中国に怒られてご説明に伺った日本と見られる」 [muffin★]
- 【日本大使館】中国在留邦人は安全確保を [ぐれ★]
- 【外国人問題】小野田紀美担当相「不法就労や不法滞在は許さない」 [シャチ★]
- 【野球】井端監督 大谷翔平、山本由伸らのWBCへの参加 「1日も早く返事ほしい」「待っててといっても、国内組が遅くなってしまう」★3 [冬月記者★]
- 習政権、高市首相への態度硬化 台湾有事発言で連日非難 中国 ★10 [ぐれ★]
- 【高市速報】ユーロ円180円突破。史上初 [931948549]
- 高市コイン、155円突破wwwwwwwwww [246620176]
- 杉浦綾乃板って改名したほうがいいよな
- 高市早苗の中国問題、「オーバーツーリズムが解消されてウザい中国人が消えるから日本の勝ち」という風潮になってしまう [562983582]
- 外務省幹部が18日に中国側と協議へ ツアー停止や映画公開延期も 在中国の日本大使館は現地滞在の日本人に注意喚起 [787212328]
- おじゃる丸をまったり待機するスレ🏡
