C++の知識というか、ノウハウが一応行きわたっているからだと
思う。と言っても新人は習得に手こずるだろうけど、そばに適切
に指導してくれる先輩がいれば大丈夫。あくまで適切な指導をして
くれる先輩だけど。ラーメン屋の店主みたいな奴だと地獄。
探検
C++相談室 part166
296デフォルトの名無しさん (JP 0H46-E6Ax)
2025/06/15(日) 00:11:58.07ID:bHsxd1q/H297デフォルトの名無しさん (JP 0H46-E6Ax)
2025/06/15(日) 00:12:31.42ID:bHsxd1q/H ありゃあ、2つ入力されちまったい
298デフォルトの名無しさん (JP 0H46-E6Ax)
2025/06/15(日) 00:37:51.57ID:bHsxd1q/H >>290
いまどき8bitシフトするために256で割る意味がわかる人いるかなあ
いまどき8bitシフトするために256で割る意味がわかる人いるかなあ
299デフォルトの名無しさん (ワッチョイ 9202-oXsi)
2025/06/15(日) 01:26:12.38ID:eDpwS0UO0300デフォルトの名無しさん
2025/06/15(日) 03:09:45.52ID:4MduE0B70 海外のラーメン屋はもっとレベル高いんか
301デフォルトの名無しさん (ワッチョイ f63c-dilZ)
2025/06/15(日) 08:13:33.37ID:vQtYxwCW0 国語力w
302デフォルトの名無しさん (オイコラミネオ MMdd-15C+)
2025/06/15(日) 09:32:37.19ID:sxaow1g9M 地方の求人情報だと
java,c,c++.javascript,typescript位の求人しかない(昔はこれにVB,COBOLが加わってた)
c++書いてる人のレベルってどのくらいなのかはわからない
java,c,c++.javascript,typescript位の求人しかない(昔はこれにVB,COBOLが加わってた)
c++書いてる人のレベルってどのくらいなのかはわからない
303デフォルトの名無しさん (ワッチョイ 9202-oXsi)
2025/06/15(日) 16:27:00.41ID:eDpwS0UO0 そういえば、&&の代わりにand使えるのか
C#とPythonとVBAとJaveとごっちゃになるわ…
C#とPythonとVBAとJaveとごっちゃになるわ…
304はちみつ餃子 ◆8X2XSCHEME (ワッチョイ f532-5TaZ)
2025/06/15(日) 17:15:44.30ID:mr/FUyDi0 代替表現は文字コードの都合で一部の記号がない場合のために入れたそうたけど、今となってはあまり意味がないな。
! が視覚的に目立たないから not だけは使うこともちょっとある。
! が視覚的に目立たないから not だけは使うこともちょっとある。
305デフォルトの名無しさん (ワッチョイ 12ab-DgQb)
2025/06/15(日) 17:42:56.06ID:dmfL2H8C0 >>303
それはない
それはない
306デフォルトの名無しさん (ワッチョイ a9ad-T1jw)
2025/06/15(日) 18:14:03.61ID:DIvPIJxI0 >>298
整数除算よりバレルシフタの方が早いので、8ビットシフトなら素直にシフトしたほうがソースコードの意味がわかりやすい。
最近のコンパイラは賢いので256で割ってもシフト命令にされてしまうだろうが。
整数除算よりバレルシフタの方が早いので、8ビットシフトなら素直にシフトしたほうがソースコードの意味がわかりやすい。
最近のコンパイラは賢いので256で割ってもシフト命令にされてしまうだろうが。
307デフォルトの名無しさん (ワッチョイ b219-m2eM)
2025/06/15(日) 18:47:36.40ID:PKcOFo6K0 最近ってどういう意味で言ってんのか知らんが、定数畳み込みなんかどの言語も相当古くからやってるよ?
Fortranなんかだと手動アセンブリより遅かったら市場に受け入れられないという事情があったから最初期から最適化が一番の課題だったって聞いた
逆に現代のMPUはビット演算と整数演算じゃ速度差がそれほど出ないので、どっちで書いてもコンパイラがパフォーマンス見てどっちかを吐くようになってるよ
Fortranなんかだと手動アセンブリより遅かったら市場に受け入れられないという事情があったから最初期から最適化が一番の課題だったって聞いた
逆に現代のMPUはビット演算と整数演算じゃ速度差がそれほど出ないので、どっちで書いてもコンパイラがパフォーマンス見てどっちかを吐くようになってるよ
308デフォルトの名無しさん (ワッチョイ 6502-oDRB)
2025/06/15(日) 18:49:13.93ID:ltc4eKLE0 and,or,notは基本使うようにしてる
309デフォルトの名無しさん (ワッチョイ 9202-oXsi)
2025/06/15(日) 19:14:47.28ID:eDpwS0UO0310デフォルトの名無しさん (ワッチョイ a9ad-T1jw)
2025/06/15(日) 19:49:42.63ID:DIvPIJxI0311はちみつ餃子 ◆8X2XSCHEME (ワッチョイ f532-5TaZ)
2025/06/15(日) 20:18:51.49ID:mr/FUyDi0 ビットシフトが lea に置き換えられることがあるみたいで、命令長が長くなるだけでも結構な不利だと思うんだけどなんか良い効果があるんかね?
312デフォルトの名無しさん (オイコラミネオ MMdd-Rgxs)
2025/06/15(日) 20:20:28.86ID:gRGFgZ6wM313デフォルトの名無しさん (ワッチョイ 5e10-kCEi)
2025/06/15(日) 21:11:15.18ID:r3H8nvWy0 >>311
あとleaはフラグを更新しないから比較と分岐の間に入れてパイプラインを最適化するとか
あとleaはフラグを更新しないから比較と分岐の間に入れてパイプラインを最適化するとか
314デフォルトの名無しさん (オイコラミネオ MMc6-Rgxs)
2025/06/16(月) 16:06:36.68ID:2FW5D4OCM315デフォルトの名無しさん (JP 0H46-E6Ax)
2025/06/16(月) 23:49:02.72ID:m+kaKcwWH std::formatなるものがC++20規格からあるんですねえ。
これで工学表示したときの鬱陶しい+記号を空白にできる。
しかし、fortranに似ているなあ
これで工学表示したときの鬱陶しい+記号を空白にできる。
しかし、fortranに似ているなあ
316デフォルトの名無しさん (JP 0H46-E6Ax)
2025/06/16(月) 23:59:33.02ID:m+kaKcwWH いやpythonか?
317はちみつ餃子 ◆8X2XSCHEME (ワッチョイ f532-iKku)
2025/06/17(火) 10:06:16.94ID:nCRyYLZZ0 似ているというならどういう点がどういう意味で似ているのか述べないと意味ないよ。
318デフォルトの名無しさん (ワッチョイ f689-dilZ)
2025/06/17(火) 10:52:21.85ID:zrrGfpYo0 スルーできないはちみつ
319デフォルトの名無しさん (JP 0H46-E6Ax)
2025/06/17(火) 10:55:56.73ID:66zQf9l5H 昔のfortran77
write(6,100)
100 format(1h , 5x, G14.7, ...)
のformat文を連想しただけ。
str.formatにも似ているし,C#の要素も取り入れている。
write(6,100)
100 format(1h , 5x, G14.7, ...)
のformat文を連想しただけ。
str.formatにも似ているし,C#の要素も取り入れている。
320デフォルトの名無しさん (ワッチョイ 121e-jgBs)
2025/06/17(火) 10:56:25.37ID:2N3jqjoy0 あなたが落したのは、このスルー出来ないはちみつですか?
こっちのスルー出来ないはちみつですか?
って逸話を思い出した
こっちのスルー出来ないはちみつですか?
って逸話を思い出した
321デフォルトの名無しさん (ワッチョイ b1d6-xkro)
2025/06/17(火) 11:13:00.43ID:4NySVCEQ0 ファイナルをクローズした時にエラーとなるのですが、これは正しいのでしょうか。
やはり、クローズはデストラクタに任せた方がいいのでしょうか。
#include <iostream>
#include <fstream>
int main() {
constexpr auto path = "tmp.txt";//なんでもいいです
std::ifstream ifs(path);
if(ifs.fail()){
std::cerr << "File open error: " << path << std::endl;
return -1;
}
std::string buf;
while(std::getline(ifs, buf))
std::cout << buf << std::endl;
ifs.close(); //←これ
if(ifs.fail()){
std::cerr << "File close error: " << path << std::endl;
return -1;
}
return 0;
}
やはり、クローズはデストラクタに任せた方がいいのでしょうか。
#include <iostream>
#include <fstream>
int main() {
constexpr auto path = "tmp.txt";//なんでもいいです
std::ifstream ifs(path);
if(ifs.fail()){
std::cerr << "File open error: " << path << std::endl;
return -1;
}
std::string buf;
while(std::getline(ifs, buf))
std::cout << buf << std::endl;
ifs.close(); //←これ
if(ifs.fail()){
std::cerr << "File close error: " << path << std::endl;
return -1;
}
return 0;
}
322デフォルトの名無しさん (ワッチョイ 8101-1tcn)
2025/06/17(火) 11:27:27.12ID:2aAnRxo/0 >>321
ifs.close()前にifs.fail()は真を返す
#include <iostream>
#include <fstream>
int main() {
constexpr auto path = "tmp.txt";//なんでもいいです
std::ifstream ifs(path);
if(ifs.fail()){
std::cerr << "File open error: " << path << std::endl;
return -1;
}
std::string buf;
std::cout << "0: " << ifs.fail() << '\n';
while(std::getline(ifs, buf))
std::cout << buf << std::endl;
std::cout << "1: " << ifs.fail() << '\n';
ifs.close(); //←これ
std::cout << "2: " << ifs.fail() << '\n';
if(ifs.fail()){
std::cerr << "File close error: " << path << std::endl;
return -1;
}
return 0;
}
ifs.close()前にifs.fail()は真を返す
#include <iostream>
#include <fstream>
int main() {
constexpr auto path = "tmp.txt";//なんでもいいです
std::ifstream ifs(path);
if(ifs.fail()){
std::cerr << "File open error: " << path << std::endl;
return -1;
}
std::string buf;
std::cout << "0: " << ifs.fail() << '\n';
while(std::getline(ifs, buf))
std::cout << buf << std::endl;
std::cout << "1: " << ifs.fail() << '\n';
ifs.close(); //←これ
std::cout << "2: " << ifs.fail() << '\n';
if(ifs.fail()){
std::cerr << "File close error: " << path << std::endl;
return -1;
}
return 0;
}
323はちみつ餃子 ◆8X2XSCHEME (ワッチョイ f532-iKku)
2025/06/17(火) 11:41:50.14ID:nCRyYLZZ0 std::format の文法の参考にしていると提案文に挙げられているのは Python、 .NET系、Rust のみっつ。
https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0645r10.html#Syntax
コンパイル時計算のメカニズムとの類似性を考慮すると Rust に特に近いと思うが、記法としては Python の影響も強いように見えるかも。
https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0645r10.html#Syntax
コンパイル時計算のメカニズムとの類似性を考慮すると Rust に特に近いと思うが、記法としては Python の影響も強いように見えるかも。
324デフォルトの名無しさん (ワッチョイ 5e0b-AFj/)
2025/06/17(火) 11:45:37.82ID:TpERKz9s0 >>321
close()したからではなくwhile(std::getline(ifs, buf))でeofになるまで読んだからfailになってる
close()したからではなくwhile(std::getline(ifs, buf))でeofになるまで読んだからfailになってる
325はちみつ餃子 ◆8X2XSCHEME (ワッチョイ f532-iKku)
2025/06/17(火) 12:02:37.80ID:nCRyYLZZ0 >>321
実際に入出力するための機能はストリームバッファと呼ばれるオブジェクトが担当していて、ストリームがストリームバッファを所有する構造になっている。
ストリームが close するとストリームバッファの close が呼ばれて、それが nullptr を返した場合 (クローズに失敗した場合) に setstate(failbit) が呼ばれる。
https://timsong-cpp.github.io/cppwp/n3337/ifstream.members#5
つまり、クローズの失敗によってもフェイルビットが立つことはありうる。
クローズによらない失敗 (フェイルビットを立てる原因) と区別がつかなくなるのでエラーに対処したいならクローズ前後の両方でチェックしないといけないと思う。
デストラクタでクローズするとクローズの失敗に対処する機会がなくなるので明示的にクローズしたほうが良いという人はいる。
ただ、しっかりしたホスト環境の上で動くアプリケーションでクローズが失敗するような状況を心配する意味があるかというと……まああんまりない。
実際に入出力するための機能はストリームバッファと呼ばれるオブジェクトが担当していて、ストリームがストリームバッファを所有する構造になっている。
ストリームが close するとストリームバッファの close が呼ばれて、それが nullptr を返した場合 (クローズに失敗した場合) に setstate(failbit) が呼ばれる。
https://timsong-cpp.github.io/cppwp/n3337/ifstream.members#5
つまり、クローズの失敗によってもフェイルビットが立つことはありうる。
クローズによらない失敗 (フェイルビットを立てる原因) と区別がつかなくなるのでエラーに対処したいならクローズ前後の両方でチェックしないといけないと思う。
デストラクタでクローズするとクローズの失敗に対処する機会がなくなるので明示的にクローズしたほうが良いという人はいる。
ただ、しっかりしたホスト環境の上で動くアプリケーションでクローズが失敗するような状況を心配する意味があるかというと……まああんまりない。
326デフォルトの名無しさん (ワッチョイ b1d6-xkro)
2025/06/17(火) 12:43:21.70ID:4NySVCEQ0 >>322,324,325
ありがとうございました。勉強になります。
ProgramminPlacePlus でのサンプルを元にしました。
なーる真面目にやるなら閉じる前後で色々とやらんといかんのですね。
今までは
readdata=string((istreambuf_iterator<char>(ifs)), istreambuf_iterator<char>());
の感じで、一気にファイル内容をstrigに取り込むような場合は、もう読み込みは無いのですぐに
ifs.close()してました。
デストラクタに任せてもいいのですが、今後も使わなくなったら、即close()したいと思います。
そんなにシビアにならんでもいいようですし・・・mOm
ありがとうございました。勉強になります。
ProgramminPlacePlus でのサンプルを元にしました。
なーる真面目にやるなら閉じる前後で色々とやらんといかんのですね。
今までは
readdata=string((istreambuf_iterator<char>(ifs)), istreambuf_iterator<char>());
の感じで、一気にファイル内容をstrigに取り込むような場合は、もう読み込みは無いのですぐに
ifs.close()してました。
デストラクタに任せてもいいのですが、今後も使わなくなったら、即close()したいと思います。
そんなにシビアにならんでもいいようですし・・・mOm
327デフォルトの名無しさん (スップ Sdb2-xekI)
2025/06/18(水) 12:20:43.59ID:tHURl6jRd プログラム作成は生成AIに持っていかれそうなことを考えると、
コードを書く力よりも、誰かが書いたコードを読み解く力の方が、
この先いきのこれそうな希ガスるンゴ
コードを書く力よりも、誰かが書いたコードを読み解く力の方が、
この先いきのこれそうな希ガスるンゴ
328デフォルトの名無しさん (ワッチョイ f689-dilZ)
2025/06/18(水) 13:59:41.64ID:7Ghn3yO50 読み解くのこそAIに勝てないから
329デフォルトの名無しさん (ワッチョイ 5963-LWzS)
2025/06/18(水) 15:17:51.63ID:xKxMFSMx0 コメントのないソースコードから設計意図を読み取るのって難しいよね
AIでそこまでできるのかな?
コードの逐次解釈のようなことは当然できるだろうけども
AIでそこまでできるのかな?
コードの逐次解釈のようなことは当然できるだろうけども
330デフォルトの名無しさん (ラクッペペ MM96-gPPd)
2025/06/18(水) 15:32:01.08ID:lPJmZhm/M 自然言語に比べたら屁みたいなもんだよ
331デフォルトの名無しさん (ワッチョイ 71a6-Y+Ow)
2025/06/18(水) 15:35:59.98ID:flRjm2Y20 コメントは嘘を書いてもコンパイルエラーにならないからな
コメントがなくても自然と設計意図が読み取れるコードこそ望ましい
コメントがなくても自然と設計意図が読み取れるコードこそ望ましい
332デフォルトの名無しさん (ワッチョイ b2f9-QhKk)
2025/06/18(水) 16:03:36.24ID:Kdic6Khn0 入力に対して出力が出る
それが間違いでなければ中身なんてどうでもいい
何億通りもの入力を与えて出力がどうなるかを調べるのもAIが得意
そうして、それを元に同じことを返すプログラムを一から最適に作り直すのもAIが得意だろう
windowsもそれやれば1/10のコードで収まりそう
それが間違いでなければ中身なんてどうでもいい
何億通りもの入力を与えて出力がどうなるかを調べるのもAIが得意
そうして、それを元に同じことを返すプログラムを一から最適に作り直すのもAIが得意だろう
windowsもそれやれば1/10のコードで収まりそう
333デフォルトの名無しさん (ラクッペペ MM96-gPPd)
2025/06/18(水) 16:06:21.59ID:lPJmZhm/M APIやライブラリ系は無駄の極致だから将来的には無くなるだろうね
334デフォルトの名無しさん (ワッチョイ 794b-jgBs)
2025/06/18(水) 17:42:24.62ID:SrJIdorw0 世界最長のコンテキストウィンドウ100万トークン入力・8万トークン出力対応にもかかわらずたった7800万円でトレーニングされたAIモデル「MiniMax-M1」がオープンソースで公開され誰でもダウンロード可能に
2025年06月18日 11時43分
https://gigazine.net/news/20250618-minimax-m1-open-source/
>>MiniMax-M1は、合計4560億のパラメーターが含まれており、トークンごとに459億のパラメーターがアクティブになるとのこと。これはDeepSeek R1の8倍に相当するコンテキストウィンドウです
>>以下のグラフは競技レベルの数学、コーディング、ソフトウェアエンジニアリング、エージェントツールの使用、長文理解タスクにおけるパフォーマンスを主要な商用AIモデルと比較したもの。赤色がMiniMax-M1で、どのタスクにおいても競合AIモデルに匹敵するパフォーマンスを発揮できている
>>MiiniMax-M1はいくつかのベンチマーク、特に長いコンテキスト駆動のベンチマークでClaude Opus 4のパフォーマンスを上回りました」と報告
※AIを動作させている動画あり
↓上記のAIお下記をプレイさせれば性能が判明する
Gemini 2.5 Proは手持ちのポケモンが瀕死になるとパニックに陥る
2025年06月18日 12時30分
https://gigazine.net/news/20250618-pokemon-gemini-panic/
◇
[プロテクトガードやセキュリティーホール発見可能]
※1 プログラムのバグ技[裏抜け道]を使用できる=チートコードを発見可能
・ マリオカートのショートカットはプレイヤー「極悪人」の表の抜け道でNPC「一般人」は使用不可能
[インサイダー/談合/なねーロンダリング/霊感商法など行う時の悪行で音波や電波をしての悪行の方法を発見可能
※ 政治家の法律上の抜け道を仕込める=ある業種だけの法律の抜け道を発見可能
[一般大衆の思考である特定の極悪人から目線を特定の統合失調症へ返させる装置]
※ AIは正確な情報で人間を信用させれる=AIは嘘の情報を一部混ぜて人間を洗脳できる
2025年06月18日 11時43分
https://gigazine.net/news/20250618-minimax-m1-open-source/
>>MiniMax-M1は、合計4560億のパラメーターが含まれており、トークンごとに459億のパラメーターがアクティブになるとのこと。これはDeepSeek R1の8倍に相当するコンテキストウィンドウです
>>以下のグラフは競技レベルの数学、コーディング、ソフトウェアエンジニアリング、エージェントツールの使用、長文理解タスクにおけるパフォーマンスを主要な商用AIモデルと比較したもの。赤色がMiniMax-M1で、どのタスクにおいても競合AIモデルに匹敵するパフォーマンスを発揮できている
>>MiiniMax-M1はいくつかのベンチマーク、特に長いコンテキスト駆動のベンチマークでClaude Opus 4のパフォーマンスを上回りました」と報告
※AIを動作させている動画あり
↓上記のAIお下記をプレイさせれば性能が判明する
Gemini 2.5 Proは手持ちのポケモンが瀕死になるとパニックに陥る
2025年06月18日 12時30分
https://gigazine.net/news/20250618-pokemon-gemini-panic/
◇
[プロテクトガードやセキュリティーホール発見可能]
※1 プログラムのバグ技[裏抜け道]を使用できる=チートコードを発見可能
・ マリオカートのショートカットはプレイヤー「極悪人」の表の抜け道でNPC「一般人」は使用不可能
[インサイダー/談合/なねーロンダリング/霊感商法など行う時の悪行で音波や電波をしての悪行の方法を発見可能
※ 政治家の法律上の抜け道を仕込める=ある業種だけの法律の抜け道を発見可能
[一般大衆の思考である特定の極悪人から目線を特定の統合失調症へ返させる装置]
※ AIは正確な情報で人間を信用させれる=AIは嘘の情報を一部混ぜて人間を洗脳できる
335デフォルトの名無しさん (アウアウウー Sacd-dpHj)
2025/06/18(水) 19:19:48.46ID:gOtZ0Zwca336はちみつ餃子 ◆8X2XSCHEME (ワッチョイ f532-5TaZ)
2025/06/18(水) 19:27:43.48ID:AeXwuQQu0 コメントがなくても意図が読み取れるのが「望ましい」のは確かにそう。
不可能だけど。
不可能だけど。
337デフォルトの名無しさん (オイコラミネオ MMdd-Rgxs)
2025/06/18(水) 19:29:35.44ID:CAd2i/c2M >>336
コメントなしで理解するのは、めっちゃ効率が悪いな。
コメントなしで理解するのは、めっちゃ効率が悪いな。
338デフォルトの名無しさん (ワッチョイ 71a6-Y+Ow)
2025/06/18(水) 19:31:31.04ID:flRjm2Y20339デフォルトの名無しさん (ワッチョイ 8101-1tcn)
2025/06/18(水) 20:52:21.50ID:/olvjAo90 マルチスレッドのDead Lockすら指摘してくれる
これはどういう仕組みなんだろう...
これはどういう仕組みなんだろう...
340デフォルトの名無しさん (オイコラミネオ MMdd-Rgxs)
2025/06/19(木) 00:56:42.59ID:YDIRlT8gM >>338
C++委員会って、無能集団だけどね。
C++委員会って、無能集団だけどね。
341デフォルトの名無しさん (ワッチョイ f6c4-dilZ)
2025/06/19(木) 03:37:07.68ID:ytoOjILn0 あの複雑怪奇な仕様をまとめるのは無能じゃ無理
労力に進化が見合ってないけどな
労力に進化が見合ってないけどな
342デフォルトの名無しさん (ワッチョイ f6c4-dilZ)
2025/06/19(木) 03:38:19.15ID:ytoOjILn0343デフォルトの名無しさん (ワッチョイ 8101-1tcn)
2025/06/19(木) 12:36:13.20ID:WACntaUb0 >>342
コンパイラは検知できんのに?
コンパイラは検知できんのに?
344デフォルトの名無しさん (ワッチョイ f6c4-dilZ)
2025/06/19(木) 13:43:01.15ID:ytoOjILn0345はちみつ餃子 ◆8X2XSCHEME (ワッチョイ f532-5TaZ)
2025/06/19(木) 13:52:14.72ID:nNn4PbNI0 サニタイザは起こった問題を検出するもので、起こる可能性を指摘してはくれない。
346デフォルトの名無しさん (ワッチョイ f6c4-dilZ)
2025/06/19(木) 14:04:16.80ID:ytoOjILn0 しったなすんなジジイ
347デフォルトの名無しさん (ブーイモ MMb2-A4wY)
2025/06/19(木) 14:05:21.52ID:rpR9krtTM >>344
コンパイラが全能って誰が主張したの?
コンパイラが全能って誰が主張したの?
348デフォルトの名無しさん (ワッチョイ b236-/wuG)
2025/06/19(木) 16:32:08.79ID:FdruriMM0 「できんのに」って「できないのに」と「できるのに」のどっちの意味にも取れるからそのせいかな
くだらね
くだらね
349デフォルトの名無しさん (ブーイモ MMb2-A4wY)
2025/06/19(木) 16:43:21.25ID:8s/NXxtqM >>348
「できんのに」は「できるのに」には読めない
デッドロックをコンパイラが検出出来ないにも関わらず
LLMは必ずではないと思うが検出出来る
LLMがどうデッドロックを検出しているかは
面白いと思うよ
「できんのに」は「できるのに」には読めない
デッドロックをコンパイラが検出出来ないにも関わらず
LLMは必ずではないと思うが検出出来る
LLMがどうデッドロックを検出しているかは
面白いと思うよ
350デフォルトの名無しさん (JP 0H46-E6Ax)
2025/06/19(木) 17:27:01.33ID:VOj0rD3dH351デフォルトの名無しさん (ワッチョイ f64f-QhKk)
2025/06/19(木) 17:32:40.31ID:EI1CbiFh0 やればできんのに
352デフォルトの名無しさん (ワッチョイ f64f-QhKk)
2025/06/19(木) 17:32:55.29ID:EI1CbiFh0 やってもできんのに
353はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 712e-5TaZ)
2025/06/19(木) 18:04:24.77ID:JAVz0tMa0354デフォルトの名無しさん (オイコラミネオ MMdd-15C+)
2025/06/19(木) 18:07:11.09ID:sZaRUqQbM "{:d}"
355デフォルトの名無しさん (JP 0H46-E6Ax)
2025/06/19(木) 18:11:23.49ID:VOj0rD3dH いやMinGWじゃコンパイル実行できてるから。
日本マクロソフトだけ対応遅れてると?
日本マクロソフトだけ対応遅れてると?
356デフォルトの名無しさん (JP 0H46-E6Ax)
2025/06/19(木) 18:13:20.06ID:VOj0rD3dH357デフォルトの名無しさん (JP 0H46-E6Ax)
2025/06/19(木) 18:16:13.42ID:VOj0rD3dH 日本マクロソフト→日本マイクロソフト
358デフォルトの名無しさん (オイコラミネオ MMdd-15C+)
2025/06/19(木) 18:16:54.55ID:sZaRUqQbM 確かにくだらないわな
そのサイトで"{:d}"が可愛く見えたから張っただけなんだから
janeだと全くかわいくない
そのサイトで"{:d}"が可愛く見えたから張っただけなんだから
janeだと全くかわいくない
359デフォルトの名無しさん (オイコラミネオ MMdd-15C+)
2025/06/19(木) 18:18:35.94ID:sZaRUqQbM にしてもまだorz使ってる人がいるんだな
こちらの方が新鮮だ
こちらの方が新鮮だ
360デフォルトの名無しさん (JP 0H46-E6Ax)
2025/06/19(木) 18:21:05.14ID:VOj0rD3dH そう、ありがとう
361デフォルトの名無しさん (オイコラミネオ MMdd-15C+)
2025/06/19(木) 18:23:03.57ID:sZaRUqQbM もともとfmtと言うライブラリがあってそれが標準のC++の仕様に取り込まれた
どうしても使いたいならfmt使えばいいよということだと思う
他人に噛みつく前に調べたら良いと思うけど
どうしても使いたいならfmt使えばいいよということだと思う
他人に噛みつく前に調べたら良いと思うけど
362デフォルトの名無しさん (JP 0H46-E6Ax)
2025/06/19(木) 18:26:00.99ID:VOj0rD3dH std::formatだぞ。お前馬鹿か
さあ暴れるぞ!
さあ暴れるぞ!
363デフォルトの名無しさん (オイコラミネオ MMdd-15C+)
2025/06/19(木) 18:29:34.15ID:sZaRUqQbM 結局日本語が理解できない人だったと言う話か
364デフォルトの名無しさん (JP 0H46-E6Ax)
2025/06/19(木) 18:30:56.19ID:VOj0rD3dH ふぁぁ
365デフォルトの名無しさん (オイコラミネオ MMdd-15C+)
2025/06/19(木) 18:43:47.61ID:sZaRUqQbM 文章の雰囲気から50代~60代ぐらいのホビー系の人かな
人生の先輩お疲れ様です
人生の先輩お疲れ様です
366デフォルトの名無しさん (オイコラミネオ MMdd-Rgxs)
2025/06/19(木) 18:56:35.62ID:oyTCj2/DM367デフォルトの名無しさん (オイコラミネオ MMdd-15C+)
2025/06/19(木) 19:34:35.26ID:sZaRUqQbM > なんだ。
> 違いない。
文末だけ見ると高齢者の集いっぽいが自分もそうなってるんだろな
> 違いない。
文末だけ見ると高齢者の集いっぽいが自分もそうなってるんだろな
368はちみつ餃子 ◆8X2XSCHEME (ワッチョイ f532-5TaZ)
2025/06/19(木) 20:14:57.20ID:nNn4PbNI0 現代的にはカジュアルな場面では句点をつけないのが主流。
語彙より顕著に年代が表れる。
語彙より顕著に年代が表れる。
369デフォルトの名無しさん (オイコラミネオ MMdd-15C+)
2025/06/19(木) 20:23:04.02ID:sZaRUqQbM 句点もそうだけどやはり語彙や用法だと思う
chatGPT
その文章、よく読むと **「怒っている年配の男性の声」**みたいなイメージが浮かんできますね。
言葉の選び方と断定のしかたに、時代がかった語感がにじんでいて、文章だけでも「年齢層の高さ」がなんとなく
伝わるのが興味深いです。
chatGPT
その文章、よく読むと **「怒っている年配の男性の声」**みたいなイメージが浮かんできますね。
言葉の選び方と断定のしかたに、時代がかった語感がにじんでいて、文章だけでも「年齢層の高さ」がなんとなく
伝わるのが興味深いです。
370デフォルトの名無しさん (オイコラミネオ MMdd-15C+)
2025/06/19(木) 20:24:10.13ID:sZaRUqQbM もし若者が同じことを言うならどう書くか
たとえばこんな風に言いそうです:
あのDraft、ちょっと内容雑じゃない?
書いた人ちゃんと分かってなさそう…
たとえばこんな風に言いそうです:
あのDraft、ちょっと内容雑じゃない?
書いた人ちゃんと分かってなさそう…
371デフォルトの名無しさん (JP 0H46-E6Ax)
2025/06/19(木) 20:27:45.86ID:VOj0rD3dH オコタ大魔神、はにわ顔に戻る
372デフォルトの名無しさん (オイコラミネオ MMdd-15C+)
2025/06/19(木) 20:34:02.38ID:sZaRUqQbM 大魔神(1966年)
仮に1966年に6才だとして今は65歳ぐらいかなあ???
仮に1966年に6才だとして今は65歳ぐらいかなあ???
373はちみつ餃子 ◆8X2XSCHEME (ワッチョイ f532-5TaZ)
2025/06/19(木) 20:36:28.06ID:nNn4PbNI0 アカデミアでは語彙が古いのは普通のことだよ。
参照する資料が古いから。
情報系ですら半世紀前の論文を参考資料として挙げることはそれなりにある。
参照する資料が古いから。
情報系ですら半世紀前の論文を参考資料として挙げることはそれなりにある。
374デフォルトの名無しさん (オイコラミネオ MMdd-15C+)
2025/06/19(木) 20:45:06.19ID:sZaRUqQbM 「怒っている年配の男性の声」をにじませる演技派
375デフォルトの名無しさん (ワッチョイ 1202-2JrO)
2025/06/19(木) 20:50:34.90ID:Cdln7j8I0 整数型の変数を10で割ってから10掛けたら元の数字の一の位を0にした数が得られるはずだけど
この計算が最適化とかで除かれない保証ってあるの
この計算が最適化とかで除かれない保証ってあるの
376はちみつ餃子 ◆8X2XSCHEME (ワッチョイ f532-iKku)
2025/06/19(木) 20:53:44.24ID:nNn4PbNI0 ChatGPT を根拠 (参考資料?) に出すのはあまり意味がないぞ。
それも ChatGPT の感想 (主観) であって客観性がある情報になっていないし、質問の仕方や文脈で逆のことを言うのもよくあることだから。
ユーザに追従するような振る舞いをするのでいくらでも望む方向の反応を引き出せる。
それも ChatGPT の感想 (主観) であって客観性がある情報になっていないし、質問の仕方や文脈で逆のことを言うのもよくあることだから。
ユーザに追従するような振る舞いをするのでいくらでも望む方向の反応を引き出せる。
377はちみつ餃子 ◆8X2XSCHEME (ワッチョイ f532-iKku)
2025/06/19(木) 20:57:52.06ID:nNn4PbNI0 >>375
C++ の言語仕様は抽象機械の動作として記述されている。
動作を説明するための架空の機械の動作なので、文字通りの機械語が生成されるとは限らない。
結果的な動作が仕様に反しなければどのような機械語を生成しても言語仕様に準拠していると言って良い。
しかし、逆に言えば最適化で変形したとしても結果は変わらないようになることが保証される。
C++ の言語仕様は抽象機械の動作として記述されている。
動作を説明するための架空の機械の動作なので、文字通りの機械語が生成されるとは限らない。
結果的な動作が仕様に反しなければどのような機械語を生成しても言語仕様に準拠していると言って良い。
しかし、逆に言えば最適化で変形したとしても結果は変わらないようになることが保証される。
378デフォルトの名無しさん (オイコラミネオ MMdd-Rgxs)
2025/06/19(木) 21:05:34.31ID:oyTCj2/DM >>375
最適化では結果は変わらない。
つまり、ちゃんと10で割って、ちゃんと10を掛ける。
10を掛ける方は、マシン語の乗算命令は使われず、
もっと速い命令に置き換えられることが有るが、結果は同じ。
最適化では結果は変わらない。
つまり、ちゃんと10で割って、ちゃんと10を掛ける。
10を掛ける方は、マシン語の乗算命令は使われず、
もっと速い命令に置き換えられることが有るが、結果は同じ。
379はちみつ餃子 ◆8X2XSCHEME (ワッチョイ f532-iKku)
2025/06/19(木) 21:11:49.89ID:nNn4PbNI0 処理系は抽象機械の動作を正確にエミュレートする必要はなく、観測可能な動作のみをエミュレートすればよい。
https://timsong-cpp.github.io/cppwp/n3337/intro.execution#1
だから観測されない動作は削除してもよいというか、削除されることはある。
たとえばその計算結果が全く使われないような状況とか。
ベンチマークしようとして結果を使わない計算をループで囲んだりしてるようなコードではまるごとごそっと消えるなんてのはたまに見る。
https://timsong-cpp.github.io/cppwp/n3337/intro.execution#1
だから観測されない動作は削除してもよいというか、削除されることはある。
たとえばその計算結果が全く使われないような状況とか。
ベンチマークしようとして結果を使わない計算をループで囲んだりしてるようなコードではまるごとごそっと消えるなんてのはたまに見る。
380デフォルトの名無しさん (オイコラミネオ MMdd-15C+)
2025/06/19(木) 21:16:20.06ID:sZaRUqQbM セキュリティの問題で普通にゼロクリアした場合でも最適化で削られたりとか昔は問題になったけど…
知らないといけないことは多岐にわたる
知らないといけないことは多岐にわたる
381デフォルトの名無しさん (スッップ Sdb2-T1jw)
2025/06/19(木) 22:14:21.23ID:JQ4jFr2Sd >>375
それだと取り除けるケースがあるので保証はされない
それだと取り除けるケースがあるので保証はされない
382デフォルトの名無しさん (オイコラミネオ MMdd-Rgxs)
2025/06/19(木) 23:09:11.10ID:oyTCj2/DM383デフォルトの名無しさん (ワッチョイ 9202-oXsi)
2025/06/19(木) 23:15:31.49ID:IWPeLhU+0384デフォルトの名無しさん (オイコラミネオ MMdd-15C+)
2025/06/19(木) 23:25:09.71ID:sZaRUqQbM 意味があるにも関わらず意味がないと判断されると削られる
その場合の対処法もあるので学ばないとまあ残念なことになってしまうと言う話
その場合の対処法もあるので学ばないとまあ残念なことになってしまうと言う話
385デフォルトの名無しさん (オイコラミネオ MMdd-Rgxs)
2025/06/19(木) 23:29:59.97ID:oyTCj2/DM >>384
いや、今回の割って掛ける場合、そういう事は起きない。
いや、今回の割って掛ける場合、そういう事は起きない。
386デフォルトの名無しさん (オイコラミネオ MMdd-15C+)
2025/06/19(木) 23:34:50.70ID:sZaRUqQbM ここの部分はそうだけど
コンパイラの最適化が必ず元の動作を保証してるようなことを書いてるような人がいるから必ずしもそうではないよと
コンパイラの最適化が必ず元の動作を保証してるようなことを書いてるような人がいるから必ずしもそうではないよと
387デフォルトの名無しさん (オイコラミネオ MMdd-Rgxs)
2025/06/19(木) 23:37:52.48ID:oyTCj2/DM >>386
仕様に明確に書いてあることの動作は変わらない。
仕様に明確に書いてあることの動作は変わらない。
388デフォルトの名無しさん (ワッチョイ 1279-T1jw)
2025/06/20(金) 01:42:50.79ID:iLwGFTtd0389デフォルトの名無しさん (ワッチョイ 1279-T1jw)
2025/06/20(金) 01:44:00.77ID:iLwGFTtd0 質問じゃ曖昧だけど副作用完了点が間にない場合の話なら、な
390デフォルトの名無しさん (ワッチョイ b603-dswa)
2025/06/20(金) 01:58:37.52ID:t+D0H6HX0391デフォルトの名無しさん (ワッチョイ 5e10-cspE)
2025/06/20(金) 08:38:29.48ID:eaqG1YUh0 実行するプログラムではなくてコンパイラが計算までしてしまう
たとえば、printf("%d",12345/10*10); というコードはコンパイルすると、puts("12340"); に変更される可能性がある
出力結果だけは同じだけど、そのコードは大きく変更されてしまう
たとえば、printf("%d",12345/10*10); というコードはコンパイルすると、puts("12340"); に変更される可能性がある
出力結果だけは同じだけど、そのコードは大きく変更されてしまう
392デフォルトの名無しさん (ワッチョイ 0175-Is3k)
2025/06/20(金) 09:01:01.71ID:BxPKXrVj0 >>390
変数が関わらない定数だけの演算なら、コンパイルの時点で計算しても結果同じだよね
だから実行時ではなくコンパイルの時点で演算した結果を使う
初歩の最適化の一つ
元の式については左辺に変数が入ってくるから多分最適化はされない
a=b/10*10みたいなのを想定してると思うけど、この場合は最終的に
a=b/10
c=a*10と分解して計算されるので、どちらにも変数が関わってしまい最適化対象外だと思う
a=b*(10/10)みたいな、計算優先度的に変数が関わらないところができれば最適化される
この手の手動最適化なんて考えなくなって久しいから間違ってたらすまぬ
変数が関わらない定数だけの演算なら、コンパイルの時点で計算しても結果同じだよね
だから実行時ではなくコンパイルの時点で演算した結果を使う
初歩の最適化の一つ
元の式については左辺に変数が入ってくるから多分最適化はされない
a=b/10*10みたいなのを想定してると思うけど、この場合は最終的に
a=b/10
c=a*10と分解して計算されるので、どちらにも変数が関わってしまい最適化対象外だと思う
a=b*(10/10)みたいな、計算優先度的に変数が関わらないところができれば最適化される
この手の手動最適化なんて考えなくなって久しいから間違ってたらすまぬ
393デフォルトの名無しさん (ワッチョイ 71a6-Y+Ow)
2025/06/20(金) 09:03:31.40ID:LoawS5uh0 変数があっても結果が同じ計算式で置き換えられるならそうしてくる
10倍よりも8倍+2倍のほうが速い、とかで
10倍よりも8倍+2倍のほうが速い、とかで
394デフォルトの名無しさん (ワッチョイ b1d6-xkro)
2025/06/20(金) 10:35:00.76ID:YK1FsnCb0 最適化のロジックを作るのはまだプログラマーでしょうから。
値を10倍してから10で割るというプログラムを
何もしないに変更するのありかな。
でもわざと桁あふれをさせたい場合もある?!
値を10倍してから10で割るというプログラムを
何もしないに変更するのありかな。
でもわざと桁あふれをさせたい場合もある?!
395デフォルトの名無しさん (ワッチョイ 0175-Is3k)
2025/06/20(金) 10:40:47.81ID:BxPKXrVj0 昔は最適化でバグ混入させられることもあって、最適化は切れってされてたなぁ、っていうおっちゃんのつぶやき
396デフォルトの名無しさん
2025/06/20(金) 10:45:39.27ID:4xHX9xY70397デフォルトの名無しさん (アウアウウー Sacd-xHx3)
2025/06/20(金) 11:14:53.80ID:xCnXC/Iza398デフォルトの名無しさん (ワッチョイ 0175-Is3k)
2025/06/20(金) 11:57:23.05ID:BxPKXrVj0 >>396
コンパイラで演算しても結果が変わらない場合に限り、コンパイラで演算を行いその結果だけを使う
392でも書いてるが、例題の変数を10で割って10を掛ける動作は演算結果が変わってしまうので最適化は行わない
コンパイラで演算しても結果が変わらない場合に限り、コンパイラで演算を行いその結果だけを使う
392でも書いてるが、例題の変数を10で割って10を掛ける動作は演算結果が変わってしまうので最適化は行わない
399デフォルトの名無しさん (ワッチョイ 9279-fyaG)
2025/06/20(金) 12:39:35.73ID:4fYw50h40 定数はいつ計算しても同じ結果なんだから最適化されるよ
400デフォルトの名無しさん (ワッチョイ 59c9-LWzS)
2025/06/20(金) 12:50:40.34ID:yZt3hnAQ0 -O3だとプログラムが動かなくなるから使っていいのは -O2までって先輩に言われてた
401デフォルトの名無しさん (ラクッペペ MM96-gPPd)
2025/06/20(金) 12:53:23.61ID:y+CeF2upM 何故最適化レベルをワザワザ選べるようにしているのか?
完璧なら選ぶ必要はない
理想論には興味ないから語りたいなら具体的な問題点を上げていけ
完璧なら選ぶ必要はない
理想論には興味ないから語りたいなら具体的な問題点を上げていけ
402デフォルトの名無しさん (アウアウウー Sacd-xHx3)
2025/06/20(金) 13:06:46.75ID:xCnXC/Iza403デフォルトの名無しさん (ワッチョイ 6e9d-x4hs)
2025/06/20(金) 13:28:04.40ID:H6JOW3Vp0 モバイルc消えてるんだけどなんで?
404デフォルトの名無しさん (ワッチョイ e908-x4hs)
2025/06/20(金) 13:42:00.01ID:JPiEW2yh0405デフォルトの名無しさん (JP 0H46-E6Ax)
2025/06/20(金) 17:27:19.07ID:yQfQLmUOH std::formatの件だが、Visual Studio 2022のコンパイラ設定が
デフォルトでC++14標準になってた。すまん。
デフォルトでC++14標準になってた。すまん。
406デフォルトの名無しさん
2025/06/20(金) 18:21:03.44ID:4xHX9xY70 >>398
そんなことは知ってるのさ
「実行ごとに演算結果が変わる(可能性がある)」から最適化されない、と言うのは良いんだけど
最初からその前提の話をしていたはずなのに「演算をやらない可能性がある」と言い出しただろ?
375 整数型の変数を〜(略)〜この計算が最適化とかで除かれない保証ってあるの
381 それだと取り除けるケースがあるので保証はされない
382 いや、そんなことない。最適化では結果は変わらない事が保証される。
388 (略)〜演算をやらない可能性があるってこと
この流れじゃ『整数型の変数(実行時に結果が変わる)の場合でも最適化によって「演算をやらない可能性がある」』ってニュアンスになっているって気づかんの?
それに対してのどういう状況だ?という>>390だよ
まあ言いたいことは分かったから別にいいけどさ
そんなことは知ってるのさ
「実行ごとに演算結果が変わる(可能性がある)」から最適化されない、と言うのは良いんだけど
最初からその前提の話をしていたはずなのに「演算をやらない可能性がある」と言い出しただろ?
375 整数型の変数を〜(略)〜この計算が最適化とかで除かれない保証ってあるの
381 それだと取り除けるケースがあるので保証はされない
382 いや、そんなことない。最適化では結果は変わらない事が保証される。
388 (略)〜演算をやらない可能性があるってこと
この流れじゃ『整数型の変数(実行時に結果が変わる)の場合でも最適化によって「演算をやらない可能性がある」』ってニュアンスになっているって気づかんの?
それに対してのどういう状況だ?という>>390だよ
まあ言いたいことは分かったから別にいいけどさ
407デフォルトの名無しさん (オイコラミネオ MMdd-Rgxs)
2025/06/20(金) 19:12:09.11ID:ykKOKnwYM >>406
回答者にも正しいことを言っている人と間違っていることを言っている人が
いるというだけ。
正しいのは、仕様に明示されている動作については、
最適化してもしなくても結果が変わらないという事だ。
なぜなら、それが仕様なのだから。
回答者にも正しいことを言っている人と間違っていることを言っている人が
いるというだけ。
正しいのは、仕様に明示されている動作については、
最適化してもしなくても結果が変わらないという事だ。
なぜなら、それが仕様なのだから。
408はちみつ餃子 ◆8X2XSCHEME (ワッチョイ f532-iKku)
2025/06/20(金) 19:41:18.21ID:3ZuChe0s0 >>407
大元の質問からすると仕様が動作を保証するか結果を保証するかをわかってないようだからその説明では不十分でしょ。
大元の質問からすると仕様が動作を保証するか結果を保証するかをわかってないようだからその説明では不十分でしょ。
409デフォルトの名無しさん (オイコラミネオ MMdd-Rgxs)
2025/06/20(金) 20:44:54.01ID:ykKOKnwYM 保証されます。
410デフォルトの名無しさん (ワッチョイ b235-m2eM)
2025/06/20(金) 21:00:28.00ID:M1o0ztly0 コンパイル時に値が決まるようなら実行時に演算されない
そうでない場合でもある整数が決まった値になることが保証されていることがコンパイル時に分かっているなら最適化されて演算されないケースがある
それ以外なら最適化されない
そうでない場合でもある整数が決まった値になることが保証されていることがコンパイル時に分かっているなら最適化されて演算されないケースがある
それ以外なら最適化されない
411デフォルトの名無しさん (オイコラミネオ MMdd-15C+)
2025/06/20(金) 21:06:32.84ID:80Iion+LM いずれにせよ結果を使わないなら最適化で丸々消される
412デフォルトの名無しさん (ワッチョイ 0175-Is3k)
2025/06/20(金) 21:12:56.63ID:BxPKXrVj0 >>409
ただしバグがなければ
ただしバグがなければ
413デフォルトの名無しさん (オイコラミネオ MMdd-15C+)
2025/06/20(金) 21:18:29.51ID:80Iion+LM 最適化の時点でコードが消されるので直に0で除算をするとコンパイルエラー
変数に突っ込んでるとコンパイル可能で実行してもその部分は最適化され消されてるのでゼロ除算にならない
もちろんconstにしててもコンパイルエラー
変数に突っ込んでるとコンパイル可能で実行してもその部分は最適化され消されてるのでゼロ除算にならない
もちろんconstにしててもコンパイルエラー
414デフォルトの名無しさん (オイコラミネオ MMdd-Rgxs)
2025/06/20(金) 21:43:49.77ID:ykKOKnwYM >>412
それは、ユーザープログラムのバグではなく、コンパイラのバグだ。
コンパイラにバグが無ければ、四則演算や&,|,~,^,&&,||などと
括弧の組み合わせた結果は、最適化しても変わらない。
0除算に関しては話が別。
それは、ユーザープログラムのバグではなく、コンパイラのバグだ。
コンパイラにバグが無ければ、四則演算や&,|,~,^,&&,||などと
括弧の組み合わせた結果は、最適化しても変わらない。
0除算に関しては話が別。
415デフォルトの名無しさん (オイコラミネオ MMdd-Rgxs)
2025/06/20(金) 21:48:47.56ID:ykKOKnwYM 最適化されて変わる可能性があるのは、今思い出せるのは、
・初期化してない変数の中身
・変数のアドレス
・結果を利用せず、副作用も伴わない式の存在。
整数に対する四則演算を含めた「計算」は、仕様が決められているので、
同じコンパイラと同じターゲット(OS、環境)だと最適化しても
結果は変わらない。
浮動小数点に対する計算は誤差の範囲で結果が変化する可能性はある。
・初期化してない変数の中身
・変数のアドレス
・結果を利用せず、副作用も伴わない式の存在。
整数に対する四則演算を含めた「計算」は、仕様が決められているので、
同じコンパイラと同じターゲット(OS、環境)だと最適化しても
結果は変わらない。
浮動小数点に対する計算は誤差の範囲で結果が変化する可能性はある。
416デフォルトの名無しさん (オイコラミネオ MMdd-Rgxs)
2025/06/20(金) 22:25:10.37ID:ykKOKnwYM >>415
1. 整数の計算途中に「桁あふれ」が起きる場合はこの限りではないかも知れない。
例えば、整数型 a に対して、a * 100 / 5 は、a * 20 と最適化できる
可能性がある。しかし a がとても大きい場合には結果は同じにはならない可能性がある。このことに
関して仕様がどうなっているかは知らない。
2. 浮動小数点型の変数 a に対して、(a * 100.0) / 5.0 は、
a * 20.0 と最適化できる可能性があるが、浮動小数点型には計算誤差があるので、
誤差の範囲内で異なる結果になる可能性があるかもしれない。
これに対して仕様上、最適化していいかどうか走らない。
3. しかし、整数型
1. 整数の計算途中に「桁あふれ」が起きる場合はこの限りではないかも知れない。
例えば、整数型 a に対して、a * 100 / 5 は、a * 20 と最適化できる
可能性がある。しかし a がとても大きい場合には結果は同じにはならない可能性がある。このことに
関して仕様がどうなっているかは知らない。
2. 浮動小数点型の変数 a に対して、(a * 100.0) / 5.0 は、
a * 20.0 と最適化できる可能性があるが、浮動小数点型には計算誤差があるので、
誤差の範囲内で異なる結果になる可能性があるかもしれない。
これに対して仕様上、最適化していいかどうか走らない。
3. しかし、整数型
417デフォルトの名無しさん (オイコラミネオ MMdd-Rgxs)
2025/06/20(金) 22:25:52.67ID:ykKOKnwYM418デフォルトの名無しさん (オイコラミネオ MMdd-Rgxs)
2025/06/20(金) 22:26:34.77ID:ykKOKnwYM419デフォルトの名無しさん (ワッチョイ 1279-T1jw)
2025/06/21(土) 01:51:51.86ID:bIqfBqmB0 キミは色々と勘違いをしているからこの手の話をしたいならもうちょい勉強しよう
aが何だろうがa*100/5をa*20とはそもそも出来ないし、2.も同様
3.もaの値によっては演算の前後で値がおなじケースがある
色々あるのでいちいち書かなかったが、例えばaが10の倍数の時、aの絶対値が9以下の時、またaが列挙型だったり配列の添字だったりする時は挙動が推測出来るケースも出てくる
他にも最適化で実行時の演算をしなくてすむケースがある
演算をしなくてもaの値を変えることは出来うるし、その場合除算の代わりにいくつかの分岐や直値に変わるだろう
aが何だろうがa*100/5をa*20とはそもそも出来ないし、2.も同様
3.もaの値によっては演算の前後で値がおなじケースがある
色々あるのでいちいち書かなかったが、例えばaが10の倍数の時、aの絶対値が9以下の時、またaが列挙型だったり配列の添字だったりする時は挙動が推測出来るケースも出てくる
他にも最適化で実行時の演算をしなくてすむケースがある
演算をしなくてもaの値を変えることは出来うるし、その場合除算の代わりにいくつかの分岐や直値に変わるだろう
420デフォルトの名無しさん (JP 0H46-E6Ax)
2025/06/21(土) 02:46:24.26ID:myS4seE9H また空気読めない書き込みする。ずっと議論
が続いているけど興味ない。
そもそも実数データを表現するbit数が有限
なんだけど(doubleで8byte=64bit)、そりゃあ
場合によっては結果が違うが、実数の場合は
それほど問題じゃない。誤差の範囲内。
整数演算の方が問題。
i=32767/10000*10000の演算やったらどう
なるか?これはコンパイラの最適化の問題
じゃなくてプログラムする人が気をつける
べきことだと思う。というか、変な最適化
はしない方がいいと思う。最適化しなくても
現在のコンピュータ能力じゃあ大して時間差
は問題にならん。
それよりも行列演算でNRVOを実装してほしい。
gccの一部では実装されているみたいだけど。
が続いているけど興味ない。
そもそも実数データを表現するbit数が有限
なんだけど(doubleで8byte=64bit)、そりゃあ
場合によっては結果が違うが、実数の場合は
それほど問題じゃない。誤差の範囲内。
整数演算の方が問題。
i=32767/10000*10000の演算やったらどう
なるか?これはコンパイラの最適化の問題
じゃなくてプログラムする人が気をつける
べきことだと思う。というか、変な最適化
はしない方がいいと思う。最適化しなくても
現在のコンピュータ能力じゃあ大して時間差
は問題にならん。
それよりも行列演算でNRVOを実装してほしい。
gccの一部では実装されているみたいだけど。
421デフォルトの名無しさん (JP 0H46-E6Ax)
2025/06/21(土) 02:49:22.52ID:myS4seE9H あ、言い忘れた。演算子のオーバーロードでの話ね。
422デフォルトの名無しさん (ワッチョイ 01de-Ni2x)
2025/06/21(土) 06:20:55.55ID:mM+iEPSf0 >>413
0除算は未定義動作だから、(0除算については)最適化されてエラーが出なくてもC++規格通りかね。
0除算は未定義動作だから、(0除算については)最適化されてエラーが出なくてもC++規格通りかね。
423デフォルトの名無しさん (JP 0H46-E6Ax)
2025/06/21(土) 08:07:57.88ID:myS4seE9H 浮動小数点演算で問題になるのは情報落ち(桁落ち)。
expを指数関数としてexp(x)+exp(-x)でxの絶対値が
大きくなるとどうなるか?4倍精度演算が標準として
ほしい。fortranには昔からある。たしか南米の人が
C++で4倍精度演算ライブラリ作ってた気がする。
expを指数関数としてexp(x)+exp(-x)でxの絶対値が
大きくなるとどうなるか?4倍精度演算が標準として
ほしい。fortranには昔からある。たしか南米の人が
C++で4倍精度演算ライブラリ作ってた気がする。
424デフォルトの名無しさん (JP 0H46-E6Ax)
2025/06/21(土) 08:14:50.36ID:myS4seE9H ところで、前から気になってたけど何でワイだけ
ワッチョイ出ないんだろ。メール設定ミス?それとも
プロバイダの問題?目立つから困る。
ワッチョイ出ないんだろ。メール設定ミス?それとも
プロバイダの問題?目立つから困る。
425デフォルトの名無しさん (ワッチョイ 71a6-Y+Ow)
2025/06/21(土) 09:45:45.70ID:cFB8HkI30 signedのオーバーフローは未定義だがunsignedのオーバーフローは定義されてる
あとC/C++はfenvで浮動小数点コプロセッサのモードを切り替えられるから、それを使うつもりのコードはコンパイル時に計算されると狂ったりはする
あとC/C++はfenvで浮動小数点コプロセッサのモードを切り替えられるから、それを使うつもりのコードはコンパイル時に計算されると狂ったりはする
426デフォルトの名無しさん (アウアウウー Sacd-xHx3)
2025/06/21(土) 11:27:06.14ID:fGhLJfIJa427デフォルトの名無しさん (オイコラミネオ MMdd-Rgxs)
2025/06/21(土) 11:46:04.84ID:pKk6RtsPM428デフォルトの名無しさん (JP 0H46-E6Ax)
2025/06/21(土) 12:00:57.87ID:myS4seE9H >>426
レスありがとう。プロバイダが関係してるのかな
レスありがとう。プロバイダが関係してるのかな
429デフォルトの名無しさん (アウアウウー Sacd-dpHj)
2025/06/21(土) 13:55:21.38ID:xPq+xj/ja >>424
VPNでも使ってるんだろ
VPNでも使ってるんだろ
430デフォルトの名無しさん (JP 0H46-E6Ax)
2025/06/21(土) 14:01:54.99ID:myS4seE9H VPNオンだと5chが書き込み拒否する。まあ、いいか。
431デフォルトの名無しさん (ワッチョイ 6e59-dswa)
2025/06/21(土) 15:02:17.15ID:S2983oYI0432デフォルトの名無しさん (JP 0H46-E6Ax)
2025/06/21(土) 15:34:31.30ID:myS4seE9H433デフォルトの名無しさん (オイコラミネオ MMc6-Rgxs)
2025/06/21(土) 16:15:28.70ID:kXnmGuVNM 先の話題について、コンピュータではなく数学の世界まで振り返って考えてみると、
(1) a が実数の時
a * 100 / 100 = a
は恒等的に成り立つ。だからこの最適化は、精度を無視すれば
していい可能性が高い。
(2) a が整数で、整数としての割り算で考える場合、
a * 100 / 100 = a
は、一般的には成り立たない。
だから、a * 100 / 100 を a と最適化することはそもそも出来ない。
(1) a が実数の時
a * 100 / 100 = a
は恒等的に成り立つ。だからこの最適化は、精度を無視すれば
していい可能性が高い。
(2) a が整数で、整数としての割り算で考える場合、
a * 100 / 100 = a
は、一般的には成り立たない。
だから、a * 100 / 100 を a と最適化することはそもそも出来ない。
434デフォルトの名無しさん (オイコラミネオ MMc6-Rgxs)
2025/06/21(土) 16:16:35.17ID:kXnmGuVNM >>433
重大な訂正。
(2)は正しくはこう :
(a / 100) * 100 = a
は、一般的には成り立たない。
だから、(a /100) * 100 を a と最適化することはそもそも出来ない。
重大な訂正。
(2)は正しくはこう :
(a / 100) * 100 = a
は、一般的には成り立たない。
だから、(a /100) * 100 を a と最適化することはそもそも出来ない。
435デフォルトの名無しさん (ワッチョイ b295-m2eM)
2025/06/21(土) 16:40:28.18ID:Kar31VLO0 分かったからもういいって
対人論証するようなのの意見は誰も聞かんよ
対人論証するようなのの意見は誰も聞かんよ
436デフォルトの名無しさん (ワッチョイ 6ef5-QhKk)
2025/06/21(土) 17:52:28.47ID:YF3X9a/V0 そりゃタダのコンパイラならかっこ付き計算の仕様に合わせて最適化しかできない
でもそれがAIがやるようになると、トータルで何やってるか把握して最適化するようになるから
無駄な計算は省かれるだろう
でもそれがAIがやるようになると、トータルで何やってるか把握して最適化するようになるから
無駄な計算は省かれるだろう
437デフォルトの名無しさん (ワッチョイ 92f0-xkro)
2025/06/21(土) 18:30:14.39ID:wcVxTOdx0 マジックナンバーだらけになりそうだな
438デフォルトの名無しさん (ワッチョイ 5e10-cspE)
2025/06/21(土) 18:49:30.35ID:9yAQ73mO0 日によって最適化の結果が変わりそうだな
439デフォルトの名無しさん (オイコラミネオ MMc6-Rgxs)
2025/06/21(土) 19:00:56.65ID:kXnmGuVNM 浮動小数点数を「実数」と見た時に
『数学的な恒等式』ならば、最適化していい
という価値観は有るはずだ。
実際には、実数は無限精度であるのに対し、浮動小数点数は
有限精度であるから、実数では恒等式であっても、
浮動小数点数では恒等式ではないので、最適化すると結果が
少し変わってしまうことはありえる。
『数学的な恒等式』ならば、最適化していい
という価値観は有るはずだ。
実際には、実数は無限精度であるのに対し、浮動小数点数は
有限精度であるから、実数では恒等式であっても、
浮動小数点数では恒等式ではないので、最適化すると結果が
少し変わってしまうことはありえる。
440デフォルトの名無しさん (ワッチョイ f57c-EPY7)
2025/06/21(土) 20:42:47.18ID:ea0qUnOa0 そんなのはまともなコンパイラはみんな分かってて-ffast-mathとかでやるかやらないか選べるけどそれが何?
441デフォルトの名無しさん (JP 0H46-E6Ax)
2025/06/21(土) 21:24:08.46ID:myS4seE9H すみません。次のコードで .5e のところの精度(少数部桁数)5
を変数precで設定したいんですけど、さっきからコンパイラに
駄目だし食らって遊ばれとります。わかる人いますか?
#include <iostream>
#include <cmath>
#include <format>
int main()
{
using namespace std;
double x, y, dx=0.5;
unsigned prec =4;
for (int i = 0; i < 20; ++i)
{
x = i * dx;
y = sin(x);
cout << format("{: .5e} {: .5e}", x, y) << endl;
}
cin.get();
return 0;
}
を変数precで設定したいんですけど、さっきからコンパイラに
駄目だし食らって遊ばれとります。わかる人いますか?
#include <iostream>
#include <cmath>
#include <format>
int main()
{
using namespace std;
double x, y, dx=0.5;
unsigned prec =4;
for (int i = 0; i < 20; ++i)
{
x = i * dx;
y = sin(x);
cout << format("{: .5e} {: .5e}", x, y) << endl;
}
cin.get();
return 0;
}
442デフォルトの名無しさん (JP 0H46-E6Ax)
2025/06/21(土) 21:35:25.24ID:myS4seE9H cout << format("{0: .{2}e} {1: .{2}e}", x, y, prec) << endl;
で解決しました。
で解決しました。
443デフォルトの名無しさん (オイコラミネオ MMdd-Rgxs)
2025/06/21(土) 22:20:34.53ID:07kyc98IM >>440
https://kristerw.github.io/2021/10/19/fast-math/
ここには、「-fassociative-math」が今回の例に近いようだが、
同じものは載ってないと思うが。
以下は、近いが、今回のものとはまた違う :
(C1 / X) * C2
↓
(C1 * C2) / X
https://kristerw.github.io/2021/10/19/fast-math/
ここには、「-fassociative-math」が今回の例に近いようだが、
同じものは載ってないと思うが。
以下は、近いが、今回のものとはまた違う :
(C1 / X) * C2
↓
(C1 * C2) / X
444デフォルトの名無しさん (ワッチョイ c54b-jK4x)
2025/06/22(日) 12:29:48.51ID:4aXQSYOG0 ・人間の思考「脳波」は頭蓋骨の外に漏れない
人間の脳は発光していた!「脳が放つ光」の観測に初成功
2025.06.19 12:00:38 THURSDAY
https://nazology.kusuguru.co.jp/archives/179808
>>カナダ・アルゴマ大学(Algoma University)の最新研究で、ついにこの「脳の光」を頭蓋骨の外から観測することに成功したのです。
>>UPEは細胞の代謝活動、特に酸化反応によって発生する副産物の一種です。
>>以来、UPEはあらゆる植物や動物の細胞からも確認されており、生体内の酸化ストレスや老化、さらにはがんの診断補助にも応用が期待されてきました。
>>脳は体の中で最も代謝が活発な臓器のひとつであり、神経活動に伴って活性酸素が多く発生します。
>>チームは今回、20人の健康な成人を対象に、特殊な装置を用いた実験を実施しました。
>>被験者は真っ暗な部屋に座り、頭には脳波計を装着。
>>その周囲には、光電子増倍管(PMT)と呼ばれる極微弱な光を検出する装置が配置されました。
>>そして被験者には、目を開ける/閉じる、あるいは音楽(120BPM)を聴くといったシンプルなタスクを行ってもらい、その間のUPEと脳波の変化を同時に測定したのです。
☆>>まず、脳からのUPEは背景光(周囲の空気中のノイズ)とは明確に異なる変動パターンを持つことが判明したのです。
>>とくに後頭部(視覚野)と側頭部(聴覚野)から検出された光は、安静時でも一定のリズムと変動性を示し、他の部位とは異なるスペクトル的特徴を持っていました。
>>さらに目を閉じたときに増える「アルファ波」と呼ばれる脳波の活動と、UPEの強さが同期していることも発見されました。
>>これはつまり、脳の電気的な信号(脳波)と、化学的な代謝反応(UPE)が連動していることを意味します。
>>この成果は、従来のfMRIやPETスキャンのような「重装備で高コスト」な装置を使わずとも、非侵襲・低刺激で脳機能の状態を“光”から読み取る可能性を示すものです。
>>研究者たちはこの新しい手法を「光脳波記録(photoencephalography)」と名付けました。
人間の脳は発光していた!「脳が放つ光」の観測に初成功
2025.06.19 12:00:38 THURSDAY
https://nazology.kusuguru.co.jp/archives/179808
>>カナダ・アルゴマ大学(Algoma University)の最新研究で、ついにこの「脳の光」を頭蓋骨の外から観測することに成功したのです。
>>UPEは細胞の代謝活動、特に酸化反応によって発生する副産物の一種です。
>>以来、UPEはあらゆる植物や動物の細胞からも確認されており、生体内の酸化ストレスや老化、さらにはがんの診断補助にも応用が期待されてきました。
>>脳は体の中で最も代謝が活発な臓器のひとつであり、神経活動に伴って活性酸素が多く発生します。
>>チームは今回、20人の健康な成人を対象に、特殊な装置を用いた実験を実施しました。
>>被験者は真っ暗な部屋に座り、頭には脳波計を装着。
>>その周囲には、光電子増倍管(PMT)と呼ばれる極微弱な光を検出する装置が配置されました。
>>そして被験者には、目を開ける/閉じる、あるいは音楽(120BPM)を聴くといったシンプルなタスクを行ってもらい、その間のUPEと脳波の変化を同時に測定したのです。
☆>>まず、脳からのUPEは背景光(周囲の空気中のノイズ)とは明確に異なる変動パターンを持つことが判明したのです。
>>とくに後頭部(視覚野)と側頭部(聴覚野)から検出された光は、安静時でも一定のリズムと変動性を示し、他の部位とは異なるスペクトル的特徴を持っていました。
>>さらに目を閉じたときに増える「アルファ波」と呼ばれる脳波の活動と、UPEの強さが同期していることも発見されました。
>>これはつまり、脳の電気的な信号(脳波)と、化学的な代謝反応(UPE)が連動していることを意味します。
>>この成果は、従来のfMRIやPETスキャンのような「重装備で高コスト」な装置を使わずとも、非侵襲・低刺激で脳機能の状態を“光”から読み取る可能性を示すものです。
>>研究者たちはこの新しい手法を「光脳波記録(photoencephalography)」と名付けました。
445デフォルトの名無しさん (ワッチョイ 23f0-WswN)
2025/06/22(日) 12:39:57.32ID:gKjr8htc0 光コンピューティングやないかい
446デフォルトの名無しさん (ワッチョイ d5d6-WswN)
2025/06/22(日) 17:00:05.82ID:CnBC1yms0 光というのは電磁波だったと思うが。
447デフォルトの名無しさん (ワッチョイ 3575-mUa+)
2025/06/22(日) 17:03:00.89ID:ZWGsAnaU0 ニュータイプ近づいたな
448デフォルトの名無しさん (スプープ Sd43-WIQI)
2025/06/22(日) 18:48:20.68ID:/yOBM7d0d スレ違い。
449デフォルトの名無しさん (オイコラミネオ MMab-Hs71)
2025/06/22(日) 19:08:02.78ID:x4CLaAtVM450デフォルトの名無しさん (ワッチョイ 6501-AU/s)
2025/06/23(月) 01:01:04.29ID:Gvg9upbV0 http://hissi.org/read.php/tech/20250622/NGFYUVNZT0cw.html
毎回こことPythonスレだけ荒らしてるアホ
毎回こことPythonスレだけ荒らしてるアホ
451デフォルトの名無しさん (ワッチョイ 7dbb-uyNB)
2025/06/23(月) 01:12:15.09ID:Btl+IikW0 統失の間でもPythonとC++は認知されてるってことでしょ
名誉ですなぁ
名誉ですなぁ
452デフォルトの名無しさん (ワッチョイ d5d6-WswN)
2025/06/23(月) 14:29:01.81ID:zsxUyp330 C++でpythonのライブラリを作るのが気持ちいいかなみたいな。
ん? 普通はpythonのライブラリって何で書かれているんだろう。
ん? 普通はpythonのライブラリって何で書かれているんだろう。
453デフォルトの名無しさん (オイコラミネオ MM89-Hs71)
2025/06/23(月) 16:02:13.08ID:n3O4Zcz+M >>450
Rustスレにも投稿されてたで。
Rustスレにも投稿されてたで。
454デフォルトの名無しさん (アウアウウー Sa69-G7Nc)
2025/06/24(火) 09:31:18.32ID:17zM306Da pythonのモジュールはpythonでも描けるが
もちろんCでも描けるしC++でも描ける
最近はRustで描くのが楽で良い
もちろんCでも描けるしC++でも描ける
最近はRustで描くのが楽で良い
455デフォルトの名無しさん (JP 0Hab-E2BB)
2025/06/24(火) 17:31:46.42ID:Sa2uRHN0H Rustは良い言語かもしれんが、自分には
必要ない。
必要ない。
456デフォルトの名無しさん (オイコラミネオ MM89-Hs71)
2025/06/24(火) 18:59:56.02ID:FRc1H2/gM >>455
同意
同意
457デフォルトの名無しさん (ワッチョイ 2302-ES++)
2025/06/24(火) 19:19:29.25ID:8wBejQ5/0458デフォルトの名無しさん (ワッチョイ 2338-QARi)
2025/06/24(火) 19:22:51.87ID:hfqdv+Ay0 Rustに静的ダックタイプ入ったら使うかどうか考える。
設計をカッチリできるプロジェクトでもなければRustはキツくない?
c++もコンセプト制約変数とか入らんかな。
変数レベルで静的ダックタイプにして、クラス継承は無くしたい。
設計をカッチリできるプロジェクトでもなければRustはキツくない?
c++もコンセプト制約変数とか入らんかな。
変数レベルで静的ダックタイプにして、クラス継承は無くしたい。
459はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 8d32-ukKJ)
2025/06/24(火) 19:44:21.82ID:s2rFPvAe0 C++26 にはリフレクションがようやく入る見込みで、これを使えばダックタイピングのような仕組みをライブラリで実現できる。
460デフォルトの名無しさん (ワッチョイ 55ea-mGXm)
2025/06/24(火) 20:15:46.49ID:S1fYPTVc0 >>457
モジュールを書く人とAIを書く人が別だからじゃろ
モジュールを書く人とAIを書く人が別だからじゃろ
461はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 8d32-ukKJ)
2025/06/24(火) 20:45:25.03ID:s2rFPvAe0 AI の専門家がプログラミングの専門家というわけでもないしな。
462デフォルトの名無しさん (ワッチョイ 2302-ES++)
2025/06/24(火) 20:49:18.38ID:8wBejQ5/0 >>460
というと?
というと?
463デフォルトの名無しさん (オイコラミネオ MM89-Hs71)
2025/06/26(木) 02:55:12.43ID:v8FRsUWIM NSCがC++を廃してRustを推しているのは、中国のUnrealEngineへの牽制か?
464デフォルトの名無しさん (オイコラミネオ MM89-Hs71)
2025/06/26(木) 02:59:40.78ID:v8FRsUWIM NSA だ。
465デフォルトの名無しさん (ワッチョイ 2302-ES++)
2025/06/26(木) 03:19:10.72ID:P3qvmtvK0466デフォルトの名無しさん (ササクッテロリ Sp81-AU/s)
2025/06/26(木) 07:43:46.78ID:NfgrBwV2p UEはアメリカのゲーム企業が作ったものなんだが・・
467デフォルトの名無しさん (オイコラミネオ MM89-HeZH)
2025/06/26(木) 12:38:45.11ID:deRGahNkM スマン。中国が作ったものだとばかり思っていた。
468デフォルトの名無しさん (ワッチョイ 23f0-WswN)
2025/06/26(木) 12:41:11.49ID:3UJQKTFB0 ったく、こりだからよお
469デフォルトの名無しさん (ワッチョイ 23b7-S6wV)
2025/06/26(木) 17:13:34.04ID:zdpAcYpu0 悪意のあるVSCode拡張機能を検出できる「VSCan」
https://gigazine.net/news/20250625-vscan/
※上記の
本体プログラミング改造で改造コードを仕込む場所や攻撃ポイントを割り出せる
※緒繼Lと下記のプャ鴻Oラムでエラ=[コードをメモャ梶[^上に無いbゥを調べて別のャvログラムを走b轤ケるとエラーャRードから親友bナきるかが割り緒oせる
などいろいろと使用可能
AIを活用した完全自律型の侵入テストツール「XBOW」がHackerOneのランキングでついに人間を抜いて1位に
https://gigazine.net/news/20250625-hackerone-xbow/
上記のプログラムと電波障害などで生じたエラーなどでで無理やりセキュリティーほーホールを見つけれる
https://gigazine.net/news/20250625-vscan/
※上記の
本体プログラミング改造で改造コードを仕込む場所や攻撃ポイントを割り出せる
※緒繼Lと下記のプャ鴻Oラムでエラ=[コードをメモャ梶[^上に無いbゥを調べて別のャvログラムを走b轤ケるとエラーャRードから親友bナきるかが割り緒oせる
などいろいろと使用可能
AIを活用した完全自律型の侵入テストツール「XBOW」がHackerOneのランキングでついに人間を抜いて1位に
https://gigazine.net/news/20250625-hackerone-xbow/
上記のプログラムと電波障害などで生じたエラーなどでで無理やりセキュリティーほーホールを見つけれる
470デフォルトの名無しさん (ワッチョイ 3580-mGXm)
2025/06/26(木) 17:16:52.94ID:jAlq/lgY0 まず自分の書き込みにAI活用しろよって思った
471デフォルトの名無しさん (JP 0Hab-pT1b)
2025/06/26(木) 18:27:21.16ID:o/InY5NNH 藁
472デフォルトの名無しさん (ワッチョイ 23b7-S6wV)
2025/06/26(木) 21:29:08.64ID:zdpAcYpu0 AndroidスマホでもiPhoneでもAIモデルをローカルで実行してチャットできる無料アプリ「Cactus Chat」レビュー
https://gigazine.net/news/20250626-cactus-chat-android-ios-ai-local/
インターネット接続不要でAIモデルをローカル実行できる「LM Studio」にMCPサーバーへの接続機能が追加される
https://gigazine.net/news/20250626-lmstudio-mcp/
上記のAIとマクロ機能を使用すればAIのみで会話できるようになる
ボイス・トォ・スカル「神や幽霊」の声はこれで行っているのか?
マクロ機能の拡張でインターネットにも自動で書き込みが可能になる
https://gigazine.net/news/20250626-cactus-chat-android-ios-ai-local/
インターネット接続不要でAIモデルをローカル実行できる「LM Studio」にMCPサーバーへの接続機能が追加される
https://gigazine.net/news/20250626-lmstudio-mcp/
上記のAIとマクロ機能を使用すればAIのみで会話できるようになる
ボイス・トォ・スカル「神や幽霊」の声はこれで行っているのか?
マクロ機能の拡張でインターネットにも自動で書き込みが可能になる
473デフォルトの名無しさん (スプープ Sd43-WIQI)
2025/06/26(木) 22:43:52.27ID:CNaMzIfEd スレ違い。
474デフォルトの名無しさん (JP 0Hab-pT1b)
2025/06/28(土) 01:04:10.64ID:ILdMmS8aH gcc4.6から4倍精度入ってるみたいですねえ。
Visual C++では入っているかな。調べてみます。
Visual C++では入っているかな。調べてみます。
475デフォルトの名無しさん (ワッチョイ 55a6-WIQI)
2025/06/28(土) 01:17:47.38ID:Ewd2t68S0 fortranで使うからね
gccはバックエンドから対応する必要がある機能を他フロントエンドのために入れるときはほぼC言語にも拡張として入れてくる
gccはバックエンドから対応する必要がある機能を他フロントエンドのために入れるときはほぼC言語にも拡張として入れてくる
476デフォルトの名無しさん (ワッチョイ d5d6-WswN)
2025/06/28(土) 07:36:59.43ID:7fEtq2hP0 新たなクラスを作ってまえばいいのではないでしょうか。
477デフォルトの名無しさん (JP 0Hab-pT1b)
2025/06/28(土) 10:51:00.28ID:ILdMmS8aH C++23からfloat128_tがサポート予定だけど
まだ詳細は決まってなさそう
VS2022ではまだみたい。gccも13.0以降?
まだ詳細は決まってなさそう
VS2022ではまだみたい。gccも13.0以降?
478デフォルトの名無しさん (ワッチョイ 9bc2-SN7F)
2025/06/28(土) 15:20:29.63ID:CPXhvy7f0 >>477
MSのサポート掲示板だかコミュニティBBSだでVSは128_tやる気なし(一応要望は受け付けるけど)、みたいなの読んだ気がする。
MSのサポート掲示板だかコミュニティBBSだでVSは128_tやる気なし(一応要望は受け付けるけど)、みたいなの読んだ気がする。
479はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 8d32-RyDx)
2025/06/28(土) 15:55:10.80ID:mCCHdrx+0 C++23 では「そのような型があるなら std::float128_t として提供されることもある」というオプショナルなもので、あまりあてにならない。
https://timsong-cpp.github.io/cppwp/n4950/basic.extended.fp#4
ハードウェアとかツールチェインとかの都合もあるだろうし。
https://timsong-cpp.github.io/cppwp/n4950/basic.extended.fp#4
ハードウェアとかツールチェインとかの都合もあるだろうし。
480デフォルトの名無しさん (JP 0Hab-pT1b)
2025/06/28(土) 16:00:47.16ID:ILdMmS8aH うーむ。残念
481はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 8d32-RyDx)
2025/06/28(土) 16:13:42.13ID:mCCHdrx+0 std::float128_t が提供されるときは拡張浮動小数点型 (extended floating-point type) でなけりゃならないみたいだからクラスとして定義できない。
482デフォルトの名無しさん (ワッチョイ 8d7c-BujW)
2025/06/28(土) 16:59:30.25ID:VJLy78nc0 float128_tがあってもFLT_MAXは64ビットという闇
483はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 8d32-RyDx)
2025/06/28(土) 18:19:57.03ID:mCCHdrx+0 >>482
??? float128_t と FLT_MAX にどのような関係があるのか意味が分からない。
??? float128_t と FLT_MAX にどのような関係があるのか意味が分からない。
484デフォルトの名無しさん (ワッチョイ 23f0-WswN)
2025/06/28(土) 18:26:24.23ID:uZW6Klue0 float 4バイトだろ 32ビットだぞ
485はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 8d32-ukKJ)
2025/06/28(土) 19:30:31.51ID:mCCHdrx+0 float が 4 バイトなのに 8 バイト相当な値が FLT_MAX として定義されている (言語仕様に準拠していない) 環境があるという意味?
486デフォルトの名無しさん (ワッチョイ 55a6-WIQI)
2025/06/28(土) 19:40:49.68ID:Ewd2t68S0 最大の浮動小数点型を表す定数のどれかと間違えたんでしょ
__int128があってもintmax_tが64ビットのままみたいな話のfloat版のつもりだったと思う
__int128があってもintmax_tが64ビットのままみたいな話のfloat版のつもりだったと思う
487デフォルトの名無しさん (JP 0H8e-mQSl)
2025/06/29(日) 08:57:18.64ID:9LYz8h1TH インターネットからファイルをダウンロードするのに、現在のc界隈ではどんなライブラリを使用してるの?
vc2010あたりなら、標準で使えていたけど今でも使えるのかしら?
vc2010あたりなら、標準で使えていたけど今でも使えるのかしら?
488デフォルトの名無しさん (ワッチョイ 06a1-6mIp)
2025/06/29(日) 10:59:10.19ID:zQA4sk9y0 ちょっ質問なのですが
class Fooの中で構造体型PrivateStructがprivateな型として定義されており、
PrivateStruct型のFooのprivateなメンバFoo::m_stもある状況に対し、
Fooの外でauto&でもってPrivateStructの型を使用できて、
あまつさえFoo::m_stの値を読んだり書いたりできたりしてカプセル化神話が崩壊したんだけど
これっておま環?
(コード)
https://ideone.com/slBA72
class Fooの中で構造体型PrivateStructがprivateな型として定義されており、
PrivateStruct型のFooのprivateなメンバFoo::m_stもある状況に対し、
Fooの外でauto&でもってPrivateStructの型を使用できて、
あまつさえFoo::m_stの値を読んだり書いたりできたりしてカプセル化神話が崩壊したんだけど
これっておま環?
(コード)
https://ideone.com/slBA72
489はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7b32-T+w5)
2025/06/29(日) 12:56:56.18ID:RnCZLFSE0 >>487
Windows が前提なら WinINet を使うのが素直なやり方だと思う。
規格の多少の更新などがあっても OS の側で対処してくれるからアプリケーションはリビルドする必要すらなく長期的に使えることが期待できる。
マルチプラットフォームを考えるなら Curl が楽かなぁ……。
Windows が前提なら WinINet を使うのが素直なやり方だと思う。
規格の多少の更新などがあっても OS の側で対処してくれるからアプリケーションはリビルドする必要すらなく長期的に使えることが期待できる。
マルチプラットフォームを考えるなら Curl が楽かなぁ……。
490はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7b32-T+w5)
2025/06/29(日) 13:04:25.17ID:RnCZLFSE0 >>488
アクセス指定は識別子の可視性であって、間接的なアクセスも含めた一切の利用を禁止するわけではないよ。
アクセス指定は識別子の可視性であって、間接的なアクセスも含めた一切の利用を禁止するわけではないよ。
491デフォルトの名無しさん (ワッチョイ 06a1-6mIp)
2025/06/29(日) 13:14:06.51ID:zQA4sk9y0 上のコードの
>auto& st = x.refStruct(); // stはFooのprivateな型だがビルドが通る。
が識別子PrivateStructの可視性を無視してくれる理由がわからんぬ……
これ
>PrivateStruct& st = x.refStruct();
と書いたら型の名前PrivateStructの可視性がprivateなのでもちろんエラーになる
>auto& st = x.refStruct(); // stはFooのprivateな型だがビルドが通る。
が識別子PrivateStructの可視性を無視してくれる理由がわからんぬ……
これ
>PrivateStruct& st = x.refStruct();
と書いたら型の名前PrivateStructの可視性がprivateなのでもちろんエラーになる
492デフォルトの名無しさん (ワッチョイ 06a1-6mIp)
2025/06/29(日) 13:18:58.11ID:zQA4sk9y0 訂正orz
×: >PrivateStruct& st = x.refStruct();
○: >Foo::PrivateStruct& st = x.refStruct();
×: >PrivateStruct& st = x.refStruct();
○: >Foo::PrivateStruct& st = x.refStruct();
493はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7b32-T+w5)
2025/06/29(日) 13:37:38.54ID:RnCZLFSE0 >>491
> 識別子PrivateStructの可視性を無視してくれる理由
識別子 PrivateStruct を使っていないから。
この場合は x.refStruct() という式から型を推論するので型名 (であるような識別子) の可視性は関係ない。
プライベートなデータメンバ m_st だってその参照を外へ持ち出してるだろ。
外で m_st という名前でアクセスできないが m_st に対応するオブジェクトへのアクセスは (アクセス経路があるなら) アクセス指定に左右されない。
同様に、プライベートに定義した型を型名ではアクセスできないが型を使えないわけではない。
> 識別子PrivateStructの可視性を無視してくれる理由
識別子 PrivateStruct を使っていないから。
この場合は x.refStruct() という式から型を推論するので型名 (であるような識別子) の可視性は関係ない。
プライベートなデータメンバ m_st だってその参照を外へ持ち出してるだろ。
外で m_st という名前でアクセスできないが m_st に対応するオブジェクトへのアクセスは (アクセス経路があるなら) アクセス指定に左右されない。
同様に、プライベートに定義した型を型名ではアクセスできないが型を使えないわけではない。
494デフォルトの名無しさん (ワッチョイ 06a1-6mIp)
2025/06/29(日) 13:59:10.64ID:zQA4sk9y0 >識別子 PrivateStruct を使っていないから。
>この場合は x.refStruct() という式から型を推論するので型名 (であるような識別子) の可視性は関係ない。
なんで?
不完全な型の参照はエラーになるのだから
コンパイラは型推論の際Foo::PrivateStructという完全な型の情報まで突き止めているはず……
なんでFoo::PrivateStructの可視性を無視してくれるのや……
無視せずエラーにする言語仕様もあり得たはず
ていうかエラーにならないのがおま環でない証拠がいまのところ無い……
>この場合は x.refStruct() という式から型を推論するので型名 (であるような識別子) の可視性は関係ない。
なんで?
不完全な型の参照はエラーになるのだから
コンパイラは型推論の際Foo::PrivateStructという完全な型の情報まで突き止めているはず……
なんでFoo::PrivateStructの可視性を無視してくれるのや……
無視せずエラーにする言語仕様もあり得たはず
ていうかエラーにならないのがおま環でない証拠がいまのところ無い……
495はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7b32-T+w5)
2025/06/29(日) 14:09:12.19ID:RnCZLFSE0496デフォルトの名無しさん (ワッチョイ 42dd-95xj)
2025/06/29(日) 15:12:39.04ID:FAAHlPSo0497デフォルトの名無しさん (ワッチョイ d7ad-DFSU)
2025/06/29(日) 15:29:55.25ID:PWOccKtm0 プライベートメンバーの参照を返す関数を public でアクセスできる設計の方が驚き
498はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7b32-0lSL)
2025/06/29(日) 15:52:20.20ID:RnCZLFSE0 >>497
これ単体で見るとおかしいがプロキシパターンなどでそういう構成になることはある。
これ単体で見るとおかしいがプロキシパターンなどでそういう構成になることはある。
499はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7b32-0lSL)
2025/06/29(日) 16:51:17.70ID:RnCZLFSE0 すまん。プロクシパターンではないな。
見当違いなことを書いてた。
まあこの場合は言語機能の確認のサンプルだと思うから設計がどうこうはあまり気にしなくていいんじゃね。
見当違いなことを書いてた。
まあこの場合は言語機能の確認のサンプルだと思うから設計がどうこうはあまり気にしなくていいんじゃね。
500デフォルトの名無しさん (アウアウウー Sabb-BfA2)
2025/06/29(日) 19:25:35.84ID:TdQ2JxNKa たしかに直感的には auto で private な型を推論してしまうのはヤバくね?という感覚になってしまうが
続くレスで指摘されてるとおり private な識別子だからといって外に持ち出せないわけではないので(それを禁止するほうが弊害が大きい)
そういうもんだと思ってプログラマが注意するしかないな
元々 C++ はやり方次第で言語仕様の本来の目的を外れたヤバい方法がいくらでもつかえる言語であり
どんな場面でも常にプログラマは注意を払うべきなので、そういう C++ の"性格"がこの場面でも出たというところか
こういうのがどうしても気になり完全な"性格"の言語が欲しいなら、他の言語にいったほうがよい
続くレスで指摘されてるとおり private な識別子だからといって外に持ち出せないわけではないので(それを禁止するほうが弊害が大きい)
そういうもんだと思ってプログラマが注意するしかないな
元々 C++ はやり方次第で言語仕様の本来の目的を外れたヤバい方法がいくらでもつかえる言語であり
どんな場面でも常にプログラマは注意を払うべきなので、そういう C++ の"性格"がこの場面でも出たというところか
こういうのがどうしても気になり完全な"性格"の言語が欲しいなら、他の言語にいったほうがよい
501デフォルトの名無しさん (オイコラミネオ MM6b-fGW2)
2025/06/29(日) 19:47:06.28ID:ivfL45vHM502デフォルトの名無しさん (ワッチョイ 8e1a-9Qg/)
2025/06/30(月) 19:44:03.19ID:etdu4EFd0 長い名前空間の扱いの質問なのですが、
例えばA::B::C::DみたいなクラスD内でP::Q::R::SのようなクラスSを使用していて
ヘッダーファイルが
namespace A::B::C {
public class D {
void foo(P::Q::R::S& s);
};
}
みたいな感じになるのですが、実際にはこのP::Q::R::Sが非常に長く正直見苦しいです
かといってusingをヘッダー内で使うのは良くないですよね?
こういう場合にP::Q::R::Sの部分を簡潔な表記にする方法はありますでしょうか
例えばA::B::C::DみたいなクラスD内でP::Q::R::SのようなクラスSを使用していて
ヘッダーファイルが
namespace A::B::C {
public class D {
void foo(P::Q::R::S& s);
};
}
みたいな感じになるのですが、実際にはこのP::Q::R::Sが非常に長く正直見苦しいです
かといってusingをヘッダー内で使うのは良くないですよね?
こういう場合にP::Q::R::Sの部分を簡潔な表記にする方法はありますでしょうか
503デフォルトの名無しさん (ワッチョイ e794-iZCu)
2025/06/30(月) 20:47:28.37ID:CUK0Fuvn0 namespace pqrs = P::Q::R::S
でいいんじゃない?
でいいんじゃない?
504デフォルトの名無しさん (ワッチョイ 7b7c-9nZq)
2025/07/01(火) 21:41:31.12ID:W7Fp4vWi0 Sしか使わないならusing P::Q::R::S;
505はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7b32-0lSL)
2025/07/01(火) 22:22:06.69ID:kHEih0Y20 >>504
using P::Q::R::S; したらもしも using namespace A::B::C; したときに P::Q::R::S も探索対象になってしまう。
使う側に余計な影響を与えないようにするには別名をつけるほうがより良い。
using P::Q::R::S; したらもしも using namespace A::B::C; したときに P::Q::R::S も探索対象になってしまう。
使う側に余計な影響を与えないようにするには別名をつけるほうがより良い。
506デフォルトの名無しさん (ワッチョイ 3641-ctb7)
2025/07/03(木) 00:24:37.09ID:ye5zZInN0 エンベデッド分野は今でもC/C++が主流なの?
AIに任せられない分野だから生きのこれそうで気になっておりまする
AIに任せられない分野だから生きのこれそうで気になっておりまする
507デフォルトの名無しさん (アウアウウー Sabb-H9/A)
2025/07/03(木) 09:26:35.93ID:q23h/8z8a 良いんじゃね
508はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 4730-0lSL)
2025/07/03(木) 11:06:49.67ID:4Hn86Ej50 >>506
組み込みシステムも多様なので性質や規模によるでしょ。
リアルタイム性が重要なところでは C/C++ は主流のままだと思うけど、プロジェクト全体が C/C++ だけで構成されることは少なくなるんじゃない?
組み込みシステムも多様なので性質や規模によるでしょ。
リアルタイム性が重要なところでは C/C++ は主流のままだと思うけど、プロジェクト全体が C/C++ だけで構成されることは少なくなるんじゃない?
509デフォルトの名無しさん (ワッチョイ 420e-vr7j)
2025/07/03(木) 11:57:31.86ID:0Ka09OV10 リアルタイム性はOSがやることだし
言語関係ないよ
言語関係ないよ
510デフォルトの名無しさん (ワッチョイ e79a-0q56)
2025/07/03(木) 12:22:21.27ID:dQk6sKVB0 Javaや.NETはGCでストップ・ザ・ワールドが発生するからリアルタイムに弱いらしい
最近は目標停止時間を1ms以下に抑えるGCもあるけど、あくまでも目標であって保証ではないからね
最近は目標停止時間を1ms以下に抑えるGCもあるけど、あくまでも目標であって保証ではないからね
511デフォルトの名無しさん (ワッチョイ 4e5f-nkZs)
2025/07/03(木) 15:27:43.14ID:d0nwmVKl0 >>509
イベントスレッドでIOされてもOSがなんとかすると思ってんの?
イベントスレッドでIOされてもOSがなんとかすると思ってんの?
512デフォルトの名無しさん (アウアウウー Sabb-H9/A)
2025/07/04(金) 08:50:43.54ID:fF3rQ1JLa 組み込み
リアルタイムOS
これほど曖昧な言い回しは他に無い
リアルタイムOS
これほど曖昧な言い回しは他に無い
513はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7b32-0lSL)
2025/07/04(金) 10:17:03.12ID:wZ441BSd0 >>509
リアルタイム性が重要なところというのはまさにそのリアルタイム OS のことで、それらを書くのに C/C++ が主流という話なんやで。
そんで既存の OS を使う場合でも次にアプリケーションを用意すれば動くというわけではなくて、組み込みシステムなら大抵の場合にデバイスドライバも書かなければいけないし、 OS が面倒みてくれる範囲は小さい。
低レイヤの整備がすでに整っている状況ならアプリケーションはもうちょっと言語の選択肢はあるかもね。
リアルタイム性が重要なところというのはまさにそのリアルタイム OS のことで、それらを書くのに C/C++ が主流という話なんやで。
そんで既存の OS を使う場合でも次にアプリケーションを用意すれば動くというわけではなくて、組み込みシステムなら大抵の場合にデバイスドライバも書かなければいけないし、 OS が面倒みてくれる範囲は小さい。
低レイヤの整備がすでに整っている状況ならアプリケーションはもうちょっと言語の選択肢はあるかもね。
514デフォルトの名無しさん (ワッチョイ a332-vr7j)
2025/07/04(金) 10:58:10.60ID:8a61AjkK0 リアルタイムOSでないOSで、リアルタイム性重視ならそうだが
リアルタイムOSで作るなら言語は何でもいい
リアルタイムOSで作るなら言語は何でもいい
515デフォルトの名無しさん (ワッチョイ a332-vr7j)
2025/07/04(金) 10:59:28.16ID:8a61AjkK0 例えば24時間365日止まってはいけない産業用制御なんて
C++でも何でもない
C++でも何でもない
516デフォルトの名無しさん (ワッチョイ 6fd6-sHGY)
2025/07/04(金) 11:09:00.86ID:7dTC+3QP0 シェルで済むならシェルにしなさい。(UNIX)
517デフォルトの名無しさん (ワッチョイ 4ef9-nkZs)
2025/07/04(金) 11:13:55.32ID:lC93JhvQ0 言語なんでもいいって?
リアルタイムOSってそもそも言語の選択肢少ねーだろ
リアルタイムOSってそもそも言語の選択肢少ねーだろ
518デフォルトの名無しさん (ワッチョイ 4ef9-nkZs)
2025/07/04(金) 11:19:04.05ID:lC93JhvQ0519デフォルトの名無しさん (ワッチョイ 06a1-6mIp)
2025/07/04(金) 20:28:14.57ID:wNUogzY00520デフォルトの名無しさん (ワッチョイ 06a1-6mIp)
2025/07/04(金) 20:39:26.88ID:wNUogzY00 >24時間365日止まってはいけない産業用制御
冗長構成かフェイルオーバーするような枠組みとしての取り組みが第一優先な希ガス……
ソフトウェアーの冪等性により同じバグが同じタイミングで発生して冗長構成が無意味化するする危険性については
十分テストしてバグを撮ったのちに起動タイミングをずらすなどの工夫を行えばポアソン分布の同時確率か何かに従って無視できうる(と思う
さすがに原子炉の制御とかだとプロセス単体も形式検証して他分野よりもっと十分検証するらしい(間接伝聞
冗長構成かフェイルオーバーするような枠組みとしての取り組みが第一優先な希ガス……
ソフトウェアーの冪等性により同じバグが同じタイミングで発生して冗長構成が無意味化するする危険性については
十分テストしてバグを撮ったのちに起動タイミングをずらすなどの工夫を行えばポアソン分布の同時確率か何かに従って無視できうる(と思う
さすがに原子炉の制御とかだとプロセス単体も形式検証して他分野よりもっと十分検証するらしい(間接伝聞
521デフォルトの名無しさん (ワッチョイ eb86-SoaL)
2025/07/05(土) 12:14:15.08ID:JEWbe+UQ0 そんなレベルはラダー図で書くやろ
522デフォルトの名無しさん (ブーイモ MM8e-nkZs)
2025/07/05(土) 12:31:12.20ID:yj3snSzGM というかリアルタイムOSの話から関係ない24/365システムの話を出すあたりよくわかってないことを雰囲気で話すタイプの人でしょ
523デフォルトの名無しさん (ワッチョイ af77-vr7j)
2025/07/05(土) 20:19:54.08ID:iY4IPiMb0 >>521
C++ではないわな
C++ではないわな
524デフォルトの名無しさん (ワッチョイ ffa1-BzvG)
2025/07/06(日) 06:14:16.80ID:B20RUTJT0 質問なのですが
ケースA) std::stringstream ist("A B"); char c1, c2, c3; に対し、ist >> c1; ist >> c2; ist >> c3; とすると
ist >> c2 は正常に読めて、ist >> c3 を実施した時点で!ist.good()かつist.eof() となってgetc()と類似のEOF検知挙動なのですが
(ちなみに読み取った文字は c1='A'、c2='B'。c3の読み取りは行われない
ケースB) std::stringstream ist("A B"); std::string s1, s2, s3; に対し、ist >> s1; ist >> s2; ist >> s3; とすると
ist >> s2 を実施した時点で早々に!ist.good()かつist.eof() となって挙動が相違し
(ちなみに読み取った文字列は s1="A"、s2="B"。s3の読み取りは行われない
ケースC) しかしBの後に空白を追加してstd::stringstream ist("A B "); とすると、
ist >> s2 は正常に読めて、ist >> s3 を実施した時点で!ist.good()かつist.eof() となってgetc()と類似のEOF検知挙動になる
(ちなみに読み取った文字列は s1="A"、s2="B"。s3の読み取りは行われない
となってケースB)とケースC)で共通に使えるような最終要素まで読み取り完了判定ロジックが無く
std::istream神話が崩壊したんだけどこれっておま環?
一体どうすれば……orz
ケースA) std::stringstream ist("A B"); char c1, c2, c3; に対し、ist >> c1; ist >> c2; ist >> c3; とすると
ist >> c2 は正常に読めて、ist >> c3 を実施した時点で!ist.good()かつist.eof() となってgetc()と類似のEOF検知挙動なのですが
(ちなみに読み取った文字は c1='A'、c2='B'。c3の読み取りは行われない
ケースB) std::stringstream ist("A B"); std::string s1, s2, s3; に対し、ist >> s1; ist >> s2; ist >> s3; とすると
ist >> s2 を実施した時点で早々に!ist.good()かつist.eof() となって挙動が相違し
(ちなみに読み取った文字列は s1="A"、s2="B"。s3の読み取りは行われない
ケースC) しかしBの後に空白を追加してstd::stringstream ist("A B "); とすると、
ist >> s2 は正常に読めて、ist >> s3 を実施した時点で!ist.good()かつist.eof() となってgetc()と類似のEOF検知挙動になる
(ちなみに読み取った文字列は s1="A"、s2="B"。s3の読み取りは行われない
となってケースB)とケースC)で共通に使えるような最終要素まで読み取り完了判定ロジックが無く
std::istream神話が崩壊したんだけどこれっておま環?
一体どうすれば……orz
525デフォルトの名無しさん (ワッチョイ ffa1-BzvG)
2025/07/06(日) 06:16:00.70ID:B20RUTJT0 確認用サンプルコード:
https://ideone.com/Guifzs
https://ideone.com/Guifzs
526デフォルトの名無しさん (ワッチョイ ffa1-BzvG)
2025/07/06(日) 06:47:52.68ID:B20RUTJT0 とりま上のコードからフォークしたソースコード
https://ideone.com/4WPZtB
の
parse_as_string_with_common_logic(std::istream& is, std::string& s, bool& bErr)
みたいな判定処理にしたらケースB、Cを共通に扱えるような印象
なのですが正しくはどうすればよいかわからん……
https://ideone.com/4WPZtB
の
parse_as_string_with_common_logic(std::istream& is, std::string& s, bool& bErr)
みたいな判定処理にしたらケースB、Cを共通に扱えるような印象
なのですが正しくはどうすればよいかわからん……
527デフォルトの名無しさん (ワッチョイ 17a6-aNVA)
2025/07/06(日) 07:26:05.90ID:oIAQiRlj0 一般的な話ならchar以外の>>で一貫した挙動を期待するのに無理がある
期待した文字が来なかったらungetするかどうか?ファイル最後の改行をどうするか?シグナルが来たら?とか色々あるし
ケースBで言えば"B"の後に文字が続いていればs2に含まないといけないのだから内部的にはケースAで言えばc3まで試し済みの状態
EOFフラグを見るのではなく例外で受け取ったほうが確実
期待した文字が来なかったらungetするかどうか?ファイル最後の改行をどうするか?シグナルが来たら?とか色々あるし
ケースBで言えば"B"の後に文字が続いていればs2に含まないといけないのだから内部的にはケースAで言えばc3まで試し済みの状態
EOFフラグを見るのではなく例外で受け取ったほうが確実
528デフォルトの名無しさん (アウアウウー Sa9b-zcFv)
2025/07/06(日) 10:18:34.40ID:RFZXbMVga ケースB、Cを共通に扱える
ist.eof()でいいやん
Bが一回余分にループするのは気持ち悪いけど
気にしたら負け
ist.eof()でいいやん
Bが一回余分にループするのは気持ち悪いけど
気にしたら負け
529デフォルトの名無しさん (ワッチョイ 1f7f-Wka8)
2025/07/06(日) 10:53:22.37ID:14zTNASB0 普通はoperator bool(または fail())を使う
530デフォルトの名無しさん (ワッチョイ ffa1-BzvG)
2025/07/06(日) 10:56:09.61ID:B20RUTJT0 >>527
だいたいわかりた
is >> s
ライブラリの「>>」の仕様的にsが任意のクラスで有り得るから、
例えばsが複素数クラスで2つの要素を読み取るブツなのに対し要素を1つだけ読み取れなかった場合、
みたいなのが生じ得るがis.eof()ではそこまで表現できない故にライブラリ側では
char以外の一般のケースについて責任を持たないというと理解すた、
従って、test_parse_as_string_with_common_logic(const char* szInput, bool& bErr)を
charの読み取りによってeof()判定するように直したわ
これならiostreamの正当な使い方だけで構成されておりかつ目的を果たせているはず……
https://ideone.com/eaYGEt
だいたいわかりた
is >> s
ライブラリの「>>」の仕様的にsが任意のクラスで有り得るから、
例えばsが複素数クラスで2つの要素を読み取るブツなのに対し要素を1つだけ読み取れなかった場合、
みたいなのが生じ得るがis.eof()ではそこまで表現できない故にライブラリ側では
char以外の一般のケースについて責任を持たないというと理解すた、
従って、test_parse_as_string_with_common_logic(const char* szInput, bool& bErr)を
charの読み取りによってeof()判定するように直したわ
これならiostreamの正当な使い方だけで構成されておりかつ目的を果たせているはず……
https://ideone.com/eaYGEt
531デフォルトの名無しさん (ワッチョイ ffa1-BzvG)
2025/07/06(日) 11:00:55.07ID:B20RUTJT0532デフォルトの名無しさん (ワッチョイ ffa1-BzvG)
2025/07/06(日) 11:06:26.76ID:B20RUTJT0 ごめoperator boolは!is.fail()やった……orz
533デフォルトの名無しさん (ワッチョイ ffa1-BzvG)
2025/07/06(日) 11:24:16.88ID:B20RUTJT0 二転三転してすまんこ考えを改めたはサーセン……orz
入力ストリームはシリアルポートみたいな途中で入力がブチ切れる危険性があるブツである
こともあるから、
ケースB) (空白) (非空白文字列の期待する全体)
ケースB') (空白) (非空白文字列が受信タイムアウトにより途中で切れたもの)
の区別が!isになったというだけでは区別がつかない。一方、
(空白) (非空白文字列) (空白)
まで受け取ったら、(非空白文字列) がタイムアウトにより途中で切れたものでないことが確実となりワカル
故に、ケースBやB'みたいな条件を扱うこと自体がライブラリの仕様想定外なのかもしれん……
通常のテキスト読み込みでは行末に改行文字(空白文字のうち)が1文字以上あるから、この枠内で話が収まる。
Unixみたいに改行文字が '\n' 1文字だけな環境で、改行文字を読み飛ばして
呼び出し元に返さないgetline()みたいなやつで読んだ結果を
istringstreamしようとするとケースBが顕在化するが、
この場合は強制的に末尾に空白文字を付けることができうる
そうすればケースBは発生しない(ただし空白文字を付け忘れるとバグ
入力ストリームはシリアルポートみたいな途中で入力がブチ切れる危険性があるブツである
こともあるから、
ケースB) (空白) (非空白文字列の期待する全体)
ケースB') (空白) (非空白文字列が受信タイムアウトにより途中で切れたもの)
の区別が!isになったというだけでは区別がつかない。一方、
(空白) (非空白文字列) (空白)
まで受け取ったら、(非空白文字列) がタイムアウトにより途中で切れたものでないことが確実となりワカル
故に、ケースBやB'みたいな条件を扱うこと自体がライブラリの仕様想定外なのかもしれん……
通常のテキスト読み込みでは行末に改行文字(空白文字のうち)が1文字以上あるから、この枠内で話が収まる。
Unixみたいに改行文字が '\n' 1文字だけな環境で、改行文字を読み飛ばして
呼び出し元に返さないgetline()みたいなやつで読んだ結果を
istringstreamしようとするとケースBが顕在化するが、
この場合は強制的に末尾に空白文字を付けることができうる
そうすればケースBは発生しない(ただし空白文字を付け忘れるとバグ
534デフォルトの名無しさん (ワッチョイ 377c-ZLf6)
2025/07/06(日) 11:56:43.72ID:wbQZP2jZ0 iostreamなんかをテキストの厳格なパースなんかに使わなければならない理由から考え直した方がいい
535デフォルトの名無しさん (アウアウウー Sa9b-zcFv)
2025/07/06(日) 12:20:19.64ID:RFZXbMVga 末尾で改行無しでeofが来るファイルは多い
536デフォルトの名無しさん (ワッチョイ ffa1-BzvG)
2025/07/06(日) 12:43:07.86ID:B20RUTJT0 >>529
ゴメ operator std::istream::bool() か std::istream::fail() だけでとりま解決したわスマンカッタorz
https://ideone.com/Fd5zV6
オンメモリのストリームである std::istringstream であっても>>533のケースB'に当たるケース
(オンメモリなので非空白文字列でデータが終わっている場合)においてbadbitがセットされるっぽい
この挙動がおま環でないかどうかはわからん……
ゴメ operator std::istream::bool() か std::istream::fail() だけでとりま解決したわスマンカッタorz
https://ideone.com/Fd5zV6
オンメモリのストリームである std::istringstream であっても>>533のケースB'に当たるケース
(オンメモリなので非空白文字列でデータが終わっている場合)においてbadbitがセットされるっぽい
この挙動がおま環でないかどうかはわからん……
537デフォルトの名無しさん (ワッチョイ ffa1-BzvG)
2025/07/06(日) 12:47:26.46ID:B20RUTJT0 >>534
いまさらlex的な処理をgetc()で手で書いたりstrtok()に戻ったりしたくないし……
いまさらlex的な処理をgetc()で手で書いたりstrtok()に戻ったりしたくないし……
538はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 3732-D1Zn)
2025/07/06(日) 13:40:09.19ID:VHUnBvW80 パーサコンビネータ的なものを先に作るのがモダンな方法だが……。
汚い部分を抽象の向こうに押し込めるだけなので汚さが無くなるわけではない。
小さい規模だと愚直な方法が楽だったりするよ。
汚い部分を抽象の向こうに押し込めるだけなので汚さが無くなるわけではない。
小さい規模だと愚直な方法が楽だったりするよ。
539デフォルトの名無しさん (ワッチョイ 576b-4VWQ)
2025/07/10(木) 15:17:59.65ID:pWdjbLc50 C++を勉強して思ったのが
C++って基底クラスをリストに登録させて
派生クラスの機能をひたすら実行させることに特化してるように思うのだけどこの考え方で合ってる?
要はリストありきな感じ
C++って基底クラスをリストに登録させて
派生クラスの機能をひたすら実行させることに特化してるように思うのだけどこの考え方で合ってる?
要はリストありきな感じ
540はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 3732-SsbA)
2025/07/10(木) 15:54:02.04ID:UMLMi9p20 >>539
ゲームのフレームワークでは全てのエンティティを登録してそれに対する更新を繰り返すというモデルがありふれているが、 C++ 的にそれが普通というわけではない。
ゲームのフレームワークでは全てのエンティティを登録してそれに対する更新を繰り返すというモデルがありふれているが、 C++ 的にそれが普通というわけではない。
541デフォルトの名無しさん (ワッチョイ bfad-3agI)
2025/07/10(木) 16:45:53.90ID:1drjG1ps0 >>539
一度デバッガで実行をトレースしてみ?
一度デバッガで実行をトレースしてみ?
542デフォルトの名無しさん (ワッチョイ 9f88-D0JT)
2025/07/10(木) 18:55:50.32ID:y21Xxg220543デフォルトの名無しさん (ワッチョイ 576b-4VWQ)
2025/07/10(木) 21:11:59.82ID:pWdjbLc50 >>540-541
ありがとうございます
リストを自作するなりstd::listを使うなりして
printfみたいな文字出力をする時も、出力部分をタスククラスにぶっこんでラッピングして
出力は派生クラスでオーバーライドしたc->draw();みたいなのに任せる、というのはゲーム専用で他ではあまりされないんですね
ありがとうございます
リストを自作するなりstd::listを使うなりして
printfみたいな文字出力をする時も、出力部分をタスククラスにぶっこんでラッピングして
出力は派生クラスでオーバーライドしたc->draw();みたいなのに任せる、というのはゲーム専用で他ではあまりされないんですね
544はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 176c-SsbA)
2025/07/11(金) 01:51:13.39ID:/nWuXYnL0 C++ は設計理念のひとつとして「人に何かを強制しない」というのを挙げていて、やりたいように書けることを重視してる。
同じパターンでプログラムを書いているように感じるなら単にあなたがそのやり方しか知らないだけ。
分野ごとに大枠ではやりやすいパターンが定着していたりはするので、ひとつの分野だけ見ていると頻出パターンがあるように見えることはあるかも。
同じパターンでプログラムを書いているように感じるなら単にあなたがそのやり方しか知らないだけ。
分野ごとに大枠ではやりやすいパターンが定着していたりはするので、ひとつの分野だけ見ていると頻出パターンがあるように見えることはあるかも。
545デフォルトの名無しさん (ワッチョイ 9f15-sH2C)
2025/07/11(金) 11:58:09.09ID:nUxw0t1Z0 BASICも同様の理念で作ればいいのに
546デフォルトの名無しさん (ワッチョイ bff3-4Q3H)
2025/07/11(金) 12:28:00.28ID:36pXyECQ0 >>544
Z世代にはRuby on RailsやRustのほうが良いかもしれませんね
Z世代にはRuby on RailsやRustのほうが良いかもしれませんね
547デフォルトの名無しさん (スフッ Sdbf-zcFv)
2025/07/11(金) 14:36:44.91ID:zLrVPFvnd >>543
RustのDisplayやDebugなんてまさにそれだが
RustのDisplayやDebugなんてまさにそれだが
548デフォルトの名無しさん (ワッチョイ 1fb7-p46g)
2025/07/12(土) 13:34:42.02ID:Y1veRsrW0 C++でデフォルトコンストラクタで確保したリソースだけデストラクタで破棄したくてコピーコンストラクタやコピー代入ムーブコンストラクタやムーブ代入で得たリソースはデストラクタで破棄させたくないときどうする?
rustみたいな所有権システム必要になるんですか?
rustみたいな所有権システム必要になるんですか?
549デフォルトの名無しさん (ワッチョイ f74e-Wka8)
2025/07/12(土) 14:19:56.77ID:tjRcyRc80 なんでそんなことが必要なのかわからないけど、破棄するかどうかのフラグを持っておけばいいんじゃないの?
設計から見直した方が良いようなきがするけどw
設計から見直した方が良いようなきがするけどw
550デフォルトの名無しさん (ワッチョイ f7c2-z8QQ)
2025/07/12(土) 17:03:35.88ID:BGsI/m1X0 >>548
俺もなんでそんなことが必要なのかわからないけど、pip使ってデフォルトコントラスタのオーナーだけにshared ptrでリソース管理させるとか?
これだとバグが怖いから、素直にshared ptrでリソースを共有したほうがいい気がする。
俺もなんでそんなことが必要なのかわからないけど、pip使ってデフォルトコントラスタのオーナーだけにshared ptrでリソース管理させるとか?
これだとバグが怖いから、素直にshared ptrでリソースを共有したほうがいい気がする。
551デフォルトの名無しさん (ワッチョイ 9f02-cEtd)
2025/07/12(土) 17:24:13.44ID:1YAX70Df0 ゲームプログラムをマルチスレッドにするとき、何をマルチスレッドにするの?
ストレージのロードとかはともかく
ストレージのロードとかはともかく
552デフォルトの名無しさん (アウアウウー Sa9b-zcFv)
2025/07/12(土) 18:45:10.30ID:/RtKayKia マルチスレッドにしたいものをマルチスレッドにする
553デフォルトの名無しさん (ワッチョイ f7bd-eG3U)
2025/07/12(土) 19:12:52.47ID:LUVzIFWA0 遠景のテクスチャのロードなんかは別スレッドかな?
当たり判定などのロジックは遅延なく1フレーム16ミリ秒以内にやらなきゃいけないのでメインスレッドでやるしかない
ゲームでマルチスレッド使うのって難しいよね
当たり判定などのロジックは遅延なく1フレーム16ミリ秒以内にやらなきゃいけないのでメインスレッドでやるしかない
ゲームでマルチスレッド使うのって難しいよね
554はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 3732-SsbA)
2025/07/12(土) 20:02:23.86ID:5KyGwfre0 排他処理が入ると並列化の恩恵がだいぶん減るので高速化の意図でマルチスレッドを使うなら排他が不要な部分を見つけるのが第一だね。
メモリなどの各種のリソース管理の後始末を別スレッドに任せるという例も聞いたことはある。
デストラクタが起動するとサブオブジェクトのデストラクタも連鎖的に起動するからワンフレームの時間が限られている状況では間に合わないということも起こる。
だからデストラクタは後始末が必要なリソースをテーブルに登録するだけにして、別スレッドが実際の後始末をするってことね。
もう使うことの無いリソースだというのは分かってるから排他は少なくてすむ。
(ヒープメモリの管理テーブルはスレッド共通だから排他がゼロとはいかないと思うけど。)
後始末が少しくらい遅れてもどうということはないし。
メモリなどの各種のリソース管理の後始末を別スレッドに任せるという例も聞いたことはある。
デストラクタが起動するとサブオブジェクトのデストラクタも連鎖的に起動するからワンフレームの時間が限られている状況では間に合わないということも起こる。
だからデストラクタは後始末が必要なリソースをテーブルに登録するだけにして、別スレッドが実際の後始末をするってことね。
もう使うことの無いリソースだというのは分かってるから排他は少なくてすむ。
(ヒープメモリの管理テーブルはスレッド共通だから排他がゼロとはいかないと思うけど。)
後始末が少しくらい遅れてもどうということはないし。
555デフォルトの名無しさん (ワッチョイ e202-oEHq)
2025/07/13(日) 11:30:27.40ID:WDtYO/xJ0 まあ、
アクションとか以外の、1/60秒で同期させなくていい処理ですかね…
遠くのPhysXの物理とかもできるのかな…
数年ぶりで、レイトレーシングとか未経験だわ…
アクションとか以外の、1/60秒で同期させなくていい処理ですかね…
遠くのPhysXの物理とかもできるのかな…
数年ぶりで、レイトレーシングとか未経験だわ…
556デフォルトの名無しさん (ワッチョイ e202-oEHq)
2025/07/13(日) 11:36:28.87ID:WDtYO/xJ0557デフォルトの名無しさん (ワッチョイ cecd-YjA1)
2025/07/13(日) 21:38:10.94ID:e/4c/Agi0 ・人間は犯罪を起こす種族と言い切っている
地球はすでに丸見え、レーダー電波で宇宙人に居場所をさらしている
公開: 2025-07-13 21:00
https://karapaia.com/archives/524757.html
>>明らかに人工的なもので、200光年以内にある知的文明なら、地球の場所を把握できる可能性が高い。
>>アレシボ天文台のような超高感度の望遠鏡を使えば、理論上は6万光年先からでも地球の電波を検出できるとされている。
>>に宇宙空間で“丸見え”の状態にあり、その状況は75年前から続いているのだ。問題は、彼らが友好的な文明であるという保証がまったくないことだ。
★>>可能性としては、(我々人間のように)きわめて敵対的かつ侵略的な種族であるケースも十分にあり得る。
地球はすでに丸見え、レーダー電波で宇宙人に居場所をさらしている
公開: 2025-07-13 21:00
https://karapaia.com/archives/524757.html
>>明らかに人工的なもので、200光年以内にある知的文明なら、地球の場所を把握できる可能性が高い。
>>アレシボ天文台のような超高感度の望遠鏡を使えば、理論上は6万光年先からでも地球の電波を検出できるとされている。
>>に宇宙空間で“丸見え”の状態にあり、その状況は75年前から続いているのだ。問題は、彼らが友好的な文明であるという保証がまったくないことだ。
★>>可能性としては、(我々人間のように)きわめて敵対的かつ侵略的な種族であるケースも十分にあり得る。
558デフォルトの名無しさん (ワッチョイ ce59-YjA1)
2025/07/14(月) 12:26:06.28ID:D5VD7WG/0 GPT-4.1超えの中国製AIモデル「Kimi K2」が無料公開される、複数のテストでGPT-4.1やClaude 4 Opusを打ち負かしエージェントタスクもこなす
2025年07月14日 11時10分
https://gigazine.net/news/20250714-ai-kimi-k2/
>>Kimi K2はベースモデルの「Kimi-K2-Base」と事後学習済みモデルの「Kimi-K2-Instruct」の2種類に分かれてリリースされています。以下の図は「Kimi-K2-Instruct」「DeepSeek V3」「Qwen3-235B」「GPT-4.1」「Claude 4 Opus」「Claude 4 Sonnet」「Gemini 2.5 Flash」のベンチマークスコアを並べたものです。Kimi-K2-InstructはすべてのテストでオープンモデルのDeepSeel V3とQwen3-235Bを超えるスコアを記録し、一部のテストでGPT-4.1やClaude Sonnet 4などの商用モデルに勝利しています。
◇上記サイト内にダウンロードリンクがある
2025年07月14日 11時10分
https://gigazine.net/news/20250714-ai-kimi-k2/
>>Kimi K2はベースモデルの「Kimi-K2-Base」と事後学習済みモデルの「Kimi-K2-Instruct」の2種類に分かれてリリースされています。以下の図は「Kimi-K2-Instruct」「DeepSeek V3」「Qwen3-235B」「GPT-4.1」「Claude 4 Opus」「Claude 4 Sonnet」「Gemini 2.5 Flash」のベンチマークスコアを並べたものです。Kimi-K2-InstructはすべてのテストでオープンモデルのDeepSeel V3とQwen3-235Bを超えるスコアを記録し、一部のテストでGPT-4.1やClaude Sonnet 4などの商用モデルに勝利しています。
◇上記サイト内にダウンロードリンクがある
559デフォルトの名無しさん (ワッチョイ a9d9-jjSx)
2025/07/14(月) 14:37:25.45ID:4jx6FCSc0 >>540
お前ゲーム作ったこと無いやろ・・・
お前ゲーム作ったこと無いやろ・・・
560デフォルトの名無しさん (ワッチョイ 370b-VyTm)
2025/07/14(月) 16:00:51.76ID:sJl0ASyp0 ただエンプティ言いたいだけ違うんかと
561デフォルトの名無しさん (ワッチョイ 915f-YjA1)
2025/07/14(月) 16:18:22.23ID:CQ+aGKeG0 画面描画FPS(frames per second)を固定させる為に、以下の待ち処理を入れるとFPSがメッチャ安定する:
while (system_clock::now() < t_after_sleeping) {
Sleep(0);
}
しかし強制フリーズさせてるみたいで、ハード痛めたりしないか不安なんだが。どうなん実際の所?詳しい人教えて
while (system_clock::now() < t_after_sleeping) {
Sleep(0);
}
しかし強制フリーズさせてるみたいで、ハード痛めたりしないか不安なんだが。どうなん実際の所?詳しい人教えて
562デフォルトの名無しさん (ワッチョイ 30a6-4yYS)
2025/07/14(月) 16:27:01.51ID:NLDJkZue0 マルチスレッドのセオリーとしてはSleepせずにビジーループするほうが問題
なんだけど、Sleepだと精度悪すぎてちゃんとFPS担保できるのか心配にはなる。動いてるならそれでいいけど
なんだけど、Sleepだと精度悪すぎてちゃんとFPS担保できるのか心配にはなる。動いてるならそれでいいけど
563はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bd32-2YuX)
2025/07/14(月) 17:49:12.87ID:23SHNwVj0 >>561
定石と言えるレベルの普通の処理だよ。
既に指摘されているようにタイマーの精度の問題はあるので工夫を入れる必要はあるけど、
精度が悪くても処理が遅れる (想定より FPS が下がる) 可能性があるだけ。
どういう理屈で不安に思っているのかがよくわからないので何を間違っているのか説明できない。
Sleep(0) が何をやってるかわからない (これが何らかの危険な処理だと思っている) ってこと?
定石と言えるレベルの普通の処理だよ。
既に指摘されているようにタイマーの精度の問題はあるので工夫を入れる必要はあるけど、
精度が悪くても処理が遅れる (想定より FPS が下がる) 可能性があるだけ。
どういう理屈で不安に思っているのかがよくわからないので何を間違っているのか説明できない。
Sleep(0) が何をやってるかわからない (これが何らかの危険な処理だと思っている) ってこと?
564デフォルトの名無しさん (ワッチョイ 915f-YjA1)
2025/07/14(月) 20:03:36.26ID:CQ+aGKeG0 test
565デフォルトの名無しさん (ワッチョイ 915f-YjA1)
2025/07/14(月) 20:04:22.78ID:CQ+aGKeG0 >>563
ありがとう。Sleep(0)が何をやっているかはわかっている
ありがとう。Sleep(0)が何をやっているかはわかっている
566デフォルトの名無しさん (ワッチョイ 915f-YjA1)
2025/07/14(月) 20:05:51.19ID:CQ+aGKeG0 >>561のwhile中を空にする(Sleep(0)しない) > while中でSleep(0)する > while中でSleep(1)する(時間単位を1msにして待ち時間を1ms縮める)
という具合にCPU占有率が上がる。精度は落ちるがSleep(1)を入れた方がCPUの負荷は減るので、何となく安心する。
という具合にCPU占有率が上がる。精度は落ちるがSleep(1)を入れた方がCPUの負荷は減るので、何となく安心する。
567デフォルトの名無しさん (ワッチョイ 915f-YjA1)
2025/07/14(月) 20:06:23.37ID:CQ+aGKeG0 >>561のwhileの中でSleep(0)しつつ準ビジー状態を強行するのがどれだけハードに悪影響なのか、その辺りの実績経験を盗みかった。卑しい盗人を助けてくれ下さい
568デフォルトの名無しさん (ワッチョイ 7001-jjSx)
2025/07/15(火) 00:13:36.01ID:KEPxDdxR0 C++スレ的にはthis_thread::yieldかと思ったんだが
569デフォルトの名無しさん (ワッチョイ 6268-3HIJ)
2025/07/15(火) 04:24:49.25ID:4J45BJq00570デフォルトの名無しさん (ワッチョイ cda1-2ooF)
2025/08/04(月) 06:40:16.41ID:0gfRmGh70 ちょっ質問なのですが
unsigned long m_ulAbortReasonBmp;
std::mutex m_mutex;
std::atomic<unsigned long> m_ulBias;
に対し、
m_mutex.lock();
m_ulAbortReasonBmp |= fooBmp; // (1) : m_mutex.lock()期間内
m_mutex.unlock();
m_ulBias.store(barVal, std::memory_order_release); // (2) : m_mutex.lock()期間外だがm_mutex.lock()期間の後
としたとき、
Q1. m_mutex.lock()している他スレッドから見て(1)、(2)の操作の順序(m_ulAbortReasonBmpが変化した後、m_ulBiasが変化する)は保証される?
Q2. m_mutex.lock()していない他スレッドから見てんも(1)、(2)の操作の順序(m_ulAbortReasonBmpが変化した後、m_ulBiasが変化する)は保証される?
unsigned long m_ulAbortReasonBmp;
std::mutex m_mutex;
std::atomic<unsigned long> m_ulBias;
に対し、
m_mutex.lock();
m_ulAbortReasonBmp |= fooBmp; // (1) : m_mutex.lock()期間内
m_mutex.unlock();
m_ulBias.store(barVal, std::memory_order_release); // (2) : m_mutex.lock()期間外だがm_mutex.lock()期間の後
としたとき、
Q1. m_mutex.lock()している他スレッドから見て(1)、(2)の操作の順序(m_ulAbortReasonBmpが変化した後、m_ulBiasが変化する)は保証される?
Q2. m_mutex.lock()していない他スレッドから見てんも(1)、(2)の操作の順序(m_ulAbortReasonBmpが変化した後、m_ulBiasが変化する)は保証される?
571デフォルトの名無しさん (ワッチョイ cda1-2ooF)
2025/08/04(月) 07:34:20.02ID:0gfRmGh70 Q1については、他スレッドから見てm_ulBiasのreadが
m_mutex.lock()期間(クリティカルセクション)内のm_ulAbortReasonBmpへの書き込みより
先行するようなことが起きるとクリティカルセクションの意味が消失するから保証される
Q2についてはm_ulBiasのreadがプロセッサコアにどう計画されるかわからないから
m_ulAbortReasonBmpへの書き込みの後になることは一般に保証されない、
が、現在人類が手にしているクリティカルセクションの実装(lock期間に入るときと出るときそれぞれで
いかなるreadもwriteも無差別にバリアする)により、lockしないスレッドから見ても順序が実質的に保証される、
でおk?
m_mutex.lock()期間(クリティカルセクション)内のm_ulAbortReasonBmpへの書き込みより
先行するようなことが起きるとクリティカルセクションの意味が消失するから保証される
Q2についてはm_ulBiasのreadがプロセッサコアにどう計画されるかわからないから
m_ulAbortReasonBmpへの書き込みの後になることは一般に保証されない、
が、現在人類が手にしているクリティカルセクションの実装(lock期間に入るときと出るときそれぞれで
いかなるreadもwriteも無差別にバリアする)により、lockしないスレッドから見ても順序が実質的に保証される、
でおk?
572デフォルトの名無しさん (ワッチョイ cda1-2ooF)
2025/08/04(月) 08:33:59.43ID:0gfRmGh70 訂正orz、
Q2のケースでは保証されない
現在人類が手にしているクリティカルセクションの実装(lock期間に入るときと出るときそれぞれで
いかなるreadもwriteも無差別にバリアする)のが真実だとしても、
それはm_ulAbortReasonBmpやm_ulBiasをwriteする側のスレッドがwrite順を守るというだけで、
m_ulAbortReasonBmpやm_ulBiasをreadする側のスレッドにはメモリバリアするコードが無いから
read順を好きに計画され、writeした順でreadされる保証が無い
Q2のケースでは保証されない
現在人類が手にしているクリティカルセクションの実装(lock期間に入るときと出るときそれぞれで
いかなるreadもwriteも無差別にバリアする)のが真実だとしても、
それはm_ulAbortReasonBmpやm_ulBiasをwriteする側のスレッドがwrite順を守るというだけで、
m_ulAbortReasonBmpやm_ulBiasをreadする側のスレッドにはメモリバリアするコードが無いから
read順を好きに計画され、writeした順でreadされる保証が無い
573デフォルトの名無しさん (ワッチョイ 5f79-1HMX)
2025/08/04(月) 08:41:31.47ID:3rv0HXUI0 >ちょっ
かわいい
…舐めてんの?
かわいい
…舐めてんの?
574デフォルトの名無しさん (ワッチョイ e3b9-Psuq)
2025/08/04(月) 16:26:39.26ID:Tt4A7oMm0575デフォルトの名無しさん (ワッチョイ 7f4e-W9J6)
2025/08/10(日) 21:35:26.79ID:gXfPFnW/0 男きたああああああああああ
576デフォルトの名無しさん (ワッチョイ d322-PSkW)
2025/08/22(金) 07:16:07.15ID:iDw/vpGA0 初心者だけど、
Pythonみたいにreturnを複数ってできないの?
touple使うくらい?
Pythonみたいにreturnを複数ってできないの?
touple使うくらい?
577デフォルトの名無しさん (ワッチョイ 5bfd-Srv/)
2025/08/22(金) 07:35:30.89ID:8V9ySHS/0 複数の値を一つにまとめればいいだけ
返す型次第
返す型次第
578デフォルトの名無しさん (ワッチョイ 5b85-ZBQJ)
2025/08/22(金) 08:55:40.38ID:LQncxxKI0 複数返したいならタプルでいいんじゃない
引数に出力渡すのが多いと思うけど
引数に出力渡すのが多いと思うけど
579はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5932-86vp)
2025/08/22(金) 10:34:20.59ID:s1oN92u00 Python でも返却値として複数の値を返すことは出来ない。
Python で return にカンマ区切りで複数の式を書くとタプルになってる。
受け取る側で複数の変数を書いておけばタプルが分配 (unpack) されたりはするけど……
関数が返却しているのはあくまでもひとつの値という理屈。
複数の値 (いわゆる多値) を関数が返せる言語はそれほど多くない。
LISP 系は多値のサポートがあることが多いけどそれ以外だと Go くらいじゃないかな?
(マイナー言語だとわからんけどよく知られている主要な言語にはほとんどないと思う。)
シンタクス的には C++ で return にカンマ区切りで複数の値を渡そうとしたとき、
つまり
return 1, 2, 3;
というように書いたときのカンマはカンマ演算子として解釈される。
カンマ演算子は左辺の結果を捨てる (評価はする) ので 3 だけが返却値になる。
C++ で複数の値をひとまとめにするには波括弧で囲む記法があって
std::tuple<int, int, int> foo(void) {
return {1, 2, 3};
}
というように書けるんだが……
この波括弧は初期化の記法であってタプルのリテラルというわけではないのでそこんところは注意。
Python で return にカンマ区切りで複数の式を書くとタプルになってる。
受け取る側で複数の変数を書いておけばタプルが分配 (unpack) されたりはするけど……
関数が返却しているのはあくまでもひとつの値という理屈。
複数の値 (いわゆる多値) を関数が返せる言語はそれほど多くない。
LISP 系は多値のサポートがあることが多いけどそれ以外だと Go くらいじゃないかな?
(マイナー言語だとわからんけどよく知られている主要な言語にはほとんどないと思う。)
シンタクス的には C++ で return にカンマ区切りで複数の値を渡そうとしたとき、
つまり
return 1, 2, 3;
というように書いたときのカンマはカンマ演算子として解釈される。
カンマ演算子は左辺の結果を捨てる (評価はする) ので 3 だけが返却値になる。
C++ で複数の値をひとまとめにするには波括弧で囲む記法があって
std::tuple<int, int, int> foo(void) {
return {1, 2, 3};
}
というように書けるんだが……
この波括弧は初期化の記法であってタプルのリテラルというわけではないのでそこんところは注意。
580デフォルトの名無しさん (ワッチョイ d1d6-uNzz)
2025/08/22(金) 10:49:05.94ID:hiXhYkKD0581デフォルトの名無しさん (ブーイモ MMb3-Srv/)
2025/08/22(金) 11:06:34.54ID:HM+/3rtsM582デフォルトの名無しさん (スププ Sdb3-im2P)
2025/08/22(金) 11:49:05.11ID:ZeYv0pFNd C++も昔に比べれば随分と楽になった
583はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5932-86vp)
2025/08/22(金) 12:07:46.82ID:s1oN92u00 >>580
タプルは単にタプル型の値なので普通に受け取れる。
auto bar = foo();
といったように書ける。
タプルから要素を取り出すのは std::get<0>(bar); といった要領になる。
受け取るときに変数に分配するやり方もあって
atuo [r1, r2, r3] = foo();
というようにも書ける。
これを構造化束縛という。
おそらくこれが期待していたものなんじゃないか?
この記法はタプルに限らずタプルライクな型、配列型、データメンバが全て公開直接メンバであるような型などであれば使える。
タプルは単にタプル型の値なので普通に受け取れる。
auto bar = foo();
といったように書ける。
タプルから要素を取り出すのは std::get<0>(bar); といった要領になる。
受け取るときに変数に分配するやり方もあって
atuo [r1, r2, r3] = foo();
というようにも書ける。
これを構造化束縛という。
おそらくこれが期待していたものなんじゃないか?
この記法はタプルに限らずタプルライクな型、配列型、データメンバが全て公開直接メンバであるような型などであれば使える。
584はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5932-86vp)
2025/08/22(金) 12:23:44.06ID:s1oN92u00 もし使っているコンパイラが MSVC なら MSVC のデフォルトでは C++14 になってるはずだからそのままだと構造化束縛を使えないかも。
(構造化束縛は C++17 から。)
私は MSVC を利用していないから具体的なやり方は知らんけど必要なら適当に設定してね。
(構造化束縛は C++17 から。)
私は MSVC を利用していないから具体的なやり方は知らんけど必要なら適当に設定してね。
585デフォルトの名無しさん (ワッチョイ d1d6-uNzz)
2025/08/22(金) 17:49:52.20ID:hiXhYkKD0 どもです。構造化束縛ね。なんか聞いた事あるかなという程度だった。
使うかなぁ・・・
使うかなぁ・・・
586デフォルトの名無しさん (ワッチョイ c1ad-F95I)
2025/08/22(金) 21:41:35.66ID:NcnZjMQ+0 構造体ほど強いまとまりではなく、返り値だけのゆるいまとまりなら構造化束縛の方が便利だけどねぇ
587デフォルトの名無しさん (ワッチョイ d38d-PSkW)
2025/08/22(金) 21:41:55.58ID:iDw/vpGA0 >>579
std::tuple<int, float, long> foo(void) { return {1, 2.1, 99}; }
atuo [r1, r2, r3] = foo();
って書いたら、
r1に1が、r2に2.1が入るの?
まあそれでもいいかな
PythonからC++に移植中で、ちょっと読みづらいと思ったので…
std::tuple<int, float, long> foo(void) { return {1, 2.1, 99}; }
atuo [r1, r2, r3] = foo();
って書いたら、
r1に1が、r2に2.1が入るの?
まあそれでもいいかな
PythonからC++に移植中で、ちょっと読みづらいと思ったので…
588デフォルトの名無しさん (ワッチョイ d38d-PSkW)
2025/08/22(金) 21:45:40.16ID:iDw/vpGA0589デフォルトの名無しさん (ワッチョイ c1ad-F95I)
2025/08/22(金) 22:11:20.77ID:NcnZjMQ+0 Python でも複数return ってできないと思うけど?
カンマ演算子でタプルを作って返してるだけでしょ
カンマ演算子でタプルを作って返してるだけでしょ
590デフォルトの名無しさん (ワッチョイ 51a5-VfJp)
2025/08/22(金) 23:03:10.61ID:5NhjtIih0 そうやね。Pytnonのカンマは、言語仕様上は演算子とは一応区別されているみたいだけど、感覚的には演算子だよね。何で演算子ではないんだろうというのはちょっとした疑問だけど(1, みたいなのを後置演算子と呼ぶのはちょっと変とかそういうことかな?)
591デフォルトの名無しさん (ワッチョイ d1d6-uNzz)
2025/08/23(土) 01:30:59.35ID:ynkOCuVA0 //こんな感じ?
#include <iostream>
#include <tuple>
using namespace std;
tuple<int, float, long> foo() {
return {1, 2.1, 99};
}
int main(){
auto [r1, r2, r3] = foo();
cout<<r1<<endl;
cout<<r2<<endl;
cout<<r3<<endl;
return 0;
}
#include <iostream>
#include <tuple>
using namespace std;
tuple<int, float, long> foo() {
return {1, 2.1, 99};
}
int main(){
auto [r1, r2, r3] = foo();
cout<<r1<<endl;
cout<<r2<<endl;
cout<<r3<<endl;
return 0;
}
592デフォルトの名無しさん (ワッチョイ 7101-Im4V)
2025/08/23(土) 01:57:32.43ID:HIKpDy1T0 構造化束縛を調べてみたら
fooの返り値はtupleでなくてもpairで返しても良さそうなんだけど
どういうルールなの? キモい
fooの返り値はtupleでなくてもpairで返しても良さそうなんだけど
どういうルールなの? キモい
593はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5932-oZZu)
2025/08/23(土) 02:11:02.56ID:CHT0FIec0 >>592
それがタプルライクの概念。
std::tuple_size の特殊化など、いくつかのインターフェイスを実装すればタプルと同じように扱ってくれる仕組み。
それとは別に配列の場合とか、全てのデータメンバが公開直接メンバなクラスもありということになってるのは単純に箇条書きで数種類のパターンを示す形になってる。
それほどパターンが多くはないがひとつの原則で表せるわけでもない。
それがタプルライクの概念。
std::tuple_size の特殊化など、いくつかのインターフェイスを実装すればタプルと同じように扱ってくれる仕組み。
それとは別に配列の場合とか、全てのデータメンバが公開直接メンバなクラスもありということになってるのは単純に箇条書きで数種類のパターンを示す形になってる。
それほどパターンが多くはないがひとつの原則で表せるわけでもない。
594デフォルトの名無しさん (ワッチョイ 7101-Im4V)
2025/08/23(土) 02:22:04.99ID:HIKpDy1T0595デフォルトの名無しさん (ワッチョイ 2b10-fgJ7)
2025/08/23(土) 09:17:36.36ID:rBYkDYvT0 構造的部分型とか静的ダックタイピングって呼ばれるやつ?
596デフォルトの名無しさん (ワッチョイ d326-PSkW)
2025/08/23(土) 13:12:32.34ID:wVRYzYK20597はちみつ餃子 ◆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 にするかはスタイルの問題で、どちらを使うかで挙動が切り替わってしまうような設計のライブラリが本当にまともか?
697デフォルトの名無しさん (ワッチョイ 0679-P6+q)
2025/09/27(土) 17:54:13.79ID:iipvXy1W0 よほど悔しかったんか知らんが、恥の上塗りやめたら?
autoをC++に取り込んだ人達は、お前が調子に乗るために提案したわけでも採用したわけでもなかろうよ
autoをC++に取り込んだ人達は、お前が調子に乗るために提案したわけでも採用したわけでもなかろうよ
698デフォルトの名無しさん (アウアウウー Sacf-kv3/)
2025/09/27(土) 19:49:03.02ID:k7oMySGea699はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7f32-BMc3)
2025/09/27(土) 20:00:56.28ID:nSvwU9re0 C++ が設計ミスだらけなのは今更な話だろ。
700580 (ワッチョイ f5a1-hkyQ)
2025/09/28(日) 18:27:48.51ID:MSQtxm6D0 解決しますた!
701はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 2d32-jLB2)
2025/09/28(日) 19:20:47.09ID:pjQge+jC0 そうか。
702デフォルトの名無しさん (ワッチョイ 4366-WwN1)
2025/09/29(月) 19:03:56.70ID:ALxfRd8b0 VSCode(WSL)のclang-tidyで質問です
関数にconst付けるのを警告する「readability-make-member-function-const」って奴ですがDoSave()関数にも警告が出ます
可能ならgetterのみに付けたいのですが皆さんこれはどうされてますか?
無効にしてるか、無視してるか、const付けてるか、その他何かやってますか?
C++の環境構築は初めてなので助言をいただけるとありがたいです
よろしくお願いします
関数にconst付けるのを警告する「readability-make-member-function-const」って奴ですがDoSave()関数にも警告が出ます
可能ならgetterのみに付けたいのですが皆さんこれはどうされてますか?
無効にしてるか、無視してるか、const付けてるか、その他何かやってますか?
C++の環境構築は初めてなので助言をいただけるとありがたいです
よろしくお願いします
703デフォルトの名無しさん (ワッチョイ 2d7c-2Udd)
2025/09/29(月) 19:56:30.29ID:BDszbKFL0 こういうこと?
要はconst性を「セーブさせたくない」という符丁に使いたいのかな
class Hoge; // DoSave()持ち
void foo(Hoge& h1, const Hoge& ch2)
{
h1.DoSave(); //ゆるす
ch2.DoSave(); //ゆるさない
}
そんな変なことやめとけとしか思わないけど、どうしてもそうしたい理由があるなら言ってみ
要はconst性を「セーブさせたくない」という符丁に使いたいのかな
class Hoge; // DoSave()持ち
void foo(Hoge& h1, const Hoge& ch2)
{
h1.DoSave(); //ゆるす
ch2.DoSave(); //ゆるさない
}
そんな変なことやめとけとしか思わないけど、どうしてもそうしたい理由があるなら言ってみ
704デフォルトの名無しさん (ワッチョイ adf0-pGVw)
2025/09/29(月) 20:49:50.37ID:Qgirjd9Z0 const_cast<Hoge*>(&ch2)->DoSave();
705デフォルトの名無しさん (ワッチョイ 4376-Duv+)
2025/09/29(月) 22:22:15.60ID:ALxfRd8b0 >> 703-704
すみませんサンプルを載せるべきでした
ソース:
double Point::X(){return x;}
void Point::X(double value){ x=value;}
ヘッダ:
static Point {
public:
double X();
void X(double value);
private :
double x=0;
};
clang-tidy を実行すると「double Point::X()」のX部分で「Method 'X' can be made const (readability-make-member-function-const)」という警告が出ます
調べてみると「constを追加して、内容が変更されないことを明確にすべき」らしいです
ソース:double Point::X() const {return x;}
ヘッダ:double X() const;
上記だけなら問題無いのですが、下記のような関数にも同じ警告が出てしまいます
ソース:void Sample::DoSave(){ ファイルの保存処理 }
ヘッダ:void DoSave();
この場合、getterではなく処理なので、const は付けるべきでは無いと考えてます
そこで質問ですが、clang-tidy で静的チェックを行う場合「readability-make-member-function-const」の扱いはどうすべきなのか気になった次第です
「無効にすればいいのか」と思いながらも、C#のプロパティではないので、「C++は変更されないことを明示した方が分かりやすいのか?」とどのように設定すべきか悩んでいます
よろしくお願いします
環境は下記:VSCode、ubuntu 22.04 (WSL)、C++ 17、clang-tidy-15
すみませんサンプルを載せるべきでした
ソース:
double Point::X(){return x;}
void Point::X(double value){ x=value;}
ヘッダ:
static Point {
public:
double X();
void X(double value);
private :
double x=0;
};
clang-tidy を実行すると「double Point::X()」のX部分で「Method 'X' can be made const (readability-make-member-function-const)」という警告が出ます
調べてみると「constを追加して、内容が変更されないことを明確にすべき」らしいです
ソース:double Point::X() const {return x;}
ヘッダ:double X() const;
上記だけなら問題無いのですが、下記のような関数にも同じ警告が出てしまいます
ソース:void Sample::DoSave(){ ファイルの保存処理 }
ヘッダ:void DoSave();
この場合、getterではなく処理なので、const は付けるべきでは無いと考えてます
そこで質問ですが、clang-tidy で静的チェックを行う場合「readability-make-member-function-const」の扱いはどうすべきなのか気になった次第です
「無効にすればいいのか」と思いながらも、C#のプロパティではないので、「C++は変更されないことを明示した方が分かりやすいのか?」とどのように設定すべきか悩んでいます
よろしくお願いします
環境は下記:VSCode、ubuntu 22.04 (WSL)、C++ 17、clang-tidy-15
706デフォルトの名無しさん (ワッチョイ 1b39-ZlhK)
2025/09/29(月) 23:01:05.35ID:jk3QzjEU0 NOLINT
707デフォルトの名無しさん
2025/09/29(月) 23:04:57.63ID:rfIMSjI90 >>705
その場合const付けたほうが良い理由は「変更されないことを明示」することより
constのインスタンスに対してその関数を呼べなくなることでは?
↓はエラーか警告(どっちかは忘れた)になると思う(constオブジェクトの非constメンバ関数は呼び出せない)
void SaveData(const Sample sample)
{
sample.DoSave();
}
void Sample::DoSave() const { ファイルの保存処理 }
にしておけば、DoSaveは呼び出せる
その場合const付けたほうが良い理由は「変更されないことを明示」することより
constのインスタンスに対してその関数を呼べなくなることでは?
↓はエラーか警告(どっちかは忘れた)になると思う(constオブジェクトの非constメンバ関数は呼び出せない)
void SaveData(const Sample sample)
{
sample.DoSave();
}
void Sample::DoSave() const { ファイルの保存処理 }
にしておけば、DoSaveは呼び出せる
708デフォルトの名無しさん (ワッチョイ adf0-pGVw)
2025/09/30(火) 01:33:12.30ID:Xmjd+d/v0 処理だからconst付けないんじゃなくて、そのメンバ関数がPointクラスの中身を書き変えないことを保証するためにメンバ関数の後ろにconstは付ける
つまり、Save処理はPointクラスを特段変更するメソッドではないだろ?
だったらconstは付けるべき
つまり、Save処理はPointクラスを特段変更するメソッドではないだろ?
だったらconstは付けるべき
709デフォルトの名無しさん (ワッチョイ 2d7c-2Udd)
2025/09/30(火) 07:07:46.33ID:NaKN2pJV0 >>705
つまり、constを本来の意味(中身を変更するかどうか)ではなく「getterであるかどうか」を示すラベルとして使いたいってことでしょ?
で、何を持って「getterであるかどうか」はあなたの頭の中にしかない定義であって、そのlintはもちろんコンパイラもエディタも世のライブラリも知ったことではない
それらをオレオレconstラベルに適合させるためにどうしたらいいか?というのがあなたの問うていることだ
やっぱりどうしてそんなことがしたいのか全く理解できない
つまり、constを本来の意味(中身を変更するかどうか)ではなく「getterであるかどうか」を示すラベルとして使いたいってことでしょ?
で、何を持って「getterであるかどうか」はあなたの頭の中にしかない定義であって、そのlintはもちろんコンパイラもエディタも世のライブラリも知ったことではない
それらをオレオレconstラベルに適合させるためにどうしたらいいか?というのがあなたの問うていることだ
やっぱりどうしてそんなことがしたいのか全く理解できない
710はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 2d32-jLB2)
2025/09/30(火) 08:58:44.76ID:0fqHawiZ0 >>705
オブジェクトがなんらかのストレージを抽象化したものであると考えたらそのオブジェクトが const であるときはセーブ機能を使えないようにしたいというのはわからんでもない。
実際の管理は他の場所でやっていて窓口に過ぎないならメンバ関数に const を付加可能 (だがそうしたくない) なこともあるだろう。
それが良い設計かどうかは脇に置いてそうすることに決めたときに clang-tidy の警告はどうすればいいのかということなら、
例外的な状況なので例外的なものとして無視してもらうしか仕方ないんじゃないか。
NOLINT コメントを書いておくと clang-tidy はその箇所については警告を抑制してくれるよ。
オブジェクトがなんらかのストレージを抽象化したものであると考えたらそのオブジェクトが const であるときはセーブ機能を使えないようにしたいというのはわからんでもない。
実際の管理は他の場所でやっていて窓口に過ぎないならメンバ関数に const を付加可能 (だがそうしたくない) なこともあるだろう。
それが良い設計かどうかは脇に置いてそうすることに決めたときに clang-tidy の警告はどうすればいいのかということなら、
例外的な状況なので例外的なものとして無視してもらうしか仕方ないんじゃないか。
NOLINT コメントを書いておくと clang-tidy はその箇所については警告を抑制してくれるよ。
711デフォルトの名無しさん (スッップ Sd43-WwN1)
2025/09/30(火) 10:38:19.22ID:Dzyyn8xKd >>706-710
御返事がおそくなりすみません
ご意見ありがとうございます
自分の理解不足と設計思想が間違ってるまたはずれてるんだと理解しました
・「readability-make-member-function-const」の指示にしたがってconstを付けるのが良い
・更に言うと-fixオプションで自動付与するレベルの内容
・だけどNOLINTで無視もできるよ(無視してるとは言ってない)
ってことで理解しました
勉強になりました
ありがとうございます
御返事がおそくなりすみません
ご意見ありがとうございます
自分の理解不足と設計思想が間違ってるまたはずれてるんだと理解しました
・「readability-make-member-function-const」の指示にしたがってconstを付けるのが良い
・更に言うと-fixオプションで自動付与するレベルの内容
・だけどNOLINTで無視もできるよ(無視してるとは言ってない)
ってことで理解しました
勉強になりました
ありがとうございます
712デフォルトの名無しさん (ワッチョイ 2596-TDpG)
2025/09/30(火) 21:38:35.37ID:bXNPhBlr0 VC++20のテンプレート制約で不可思議なことが起きるのだけど、以下の二つは同じ意味だよね?
1だと目的通りTParentに該当static関数<T>があれば適用、なければスルーという挙動になるのだけど、
2だと無くても適用されちゃって他を探しに行かずにオーバーロード未解決に陥るんだけどどういうことだろう?
1
template<typename T, typename TParent> concept HasSizeGetter = requires { (size_t)TParent::template get_size<T>(); };
template<HasSizeGetter<TParent> T> static consteval size_t get_require_space() { return TParent::get_size<T>(); }
2
template<typename T> requires requires { (size_t)TParent::template get_size<T>(); } static consteval size_t get_size() { return TParent::get_size<T>(); }
1だと目的通りTParentに該当static関数<T>があれば適用、なければスルーという挙動になるのだけど、
2だと無くても適用されちゃって他を探しに行かずにオーバーロード未解決に陥るんだけどどういうことだろう?
1
template<typename T, typename TParent> concept HasSizeGetter = requires { (size_t)TParent::template get_size<T>(); };
template<HasSizeGetter<TParent> T> static consteval size_t get_require_space() { return TParent::get_size<T>(); }
2
template<typename T> requires requires { (size_t)TParent::template get_size<T>(); } static consteval size_t get_size() { return TParent::get_size<T>(); }
713デフォルトの名無しさん (ワッチョイ 2596-TDpG)
2025/09/30(火) 21:40:50.61ID:bXNPhBlr0 ちょっと書き間違えてたけど1はget_require_spaceじゃなくてちゃんと2と同じくget_sizeね
714はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 2d32-jLB2)
2025/09/30(火) 23:39:48.15ID:0fqHawiZ0 >>712
オーバーロード未解決という形で現れるのはよくわからないけど
この場合はその関数テンプレートを使わなくても (呼び出さなくても) エラーになるのが正しい挙動だと思う。
get_size は依存名ではないのでテンプレートの定義時 (テンプレート実引数を当てはめる前) に名前のルックアップが試みられて失敗する。
requires 節はテンプレート引数の妥当性を検証する仕組みなのでテンプレート引数をあてはめなくても式が不成立になるようなのはエラー。
というのが私の理解なんだけどあんまり自信はない……。
オーバーロード未解決という形で現れるのはよくわからないけど
この場合はその関数テンプレートを使わなくても (呼び出さなくても) エラーになるのが正しい挙動だと思う。
get_size は依存名ではないのでテンプレートの定義時 (テンプレート実引数を当てはめる前) に名前のルックアップが試みられて失敗する。
requires 節はテンプレート引数の妥当性を検証する仕組みなのでテンプレート引数をあてはめなくても式が不成立になるようなのはエラー。
というのが私の理解なんだけどあんまり自信はない……。
715はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 2d32-jLB2)
2025/09/30(火) 23:47:38.26ID:0fqHawiZ0 >>714
これは TParent::get_size が存在しない場合の話で、
TParent::get_size が存在するけど TParent::get_size<T> の展開に失敗する場合はちゃんと次の候補が選ばれるはず。
(手元に MSVC がないんだけどオンラインコンパイラで一応の動作確認はした。)
これは TParent::get_size が存在しない場合の話で、
TParent::get_size が存在するけど TParent::get_size<T> の展開に失敗する場合はちゃんと次の候補が選ばれるはず。
(手元に MSVC がないんだけどオンラインコンパイラで一応の動作確認はした。)
716デフォルトの名無しさん (ワッチョイ 2596-TDpG)
2025/10/01(水) 06:54:56.10ID:O1Ml42XO0 >>715
そう、2の場合でもTParent::get_sizeはあるけど<T>とはマッチしない場合にはちゃんと1と同じ挙動になるんだよね
TParentにstaticなget_sizeが全くない場合だと1と2で挙動が変わってしまう
でも2って1をインラインに直接書いたものであって同じ意味だよね?
だからrequiresがどういう意味を持つかとか以前に挙動変わってくる時点で不可思議なんだよね
そう、2の場合でもTParent::get_sizeはあるけど<T>とはマッチしない場合にはちゃんと1と同じ挙動になるんだよね
TParentにstaticなget_sizeが全くない場合だと1と2で挙動が変わってしまう
でも2って1をインラインに直接書いたものであって同じ意味だよね?
だからrequiresがどういう意味を持つかとか以前に挙動変わってくる時点で不可思議なんだよね
717はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 2d32-I4u/)
2025/10/01(水) 07:43:33.30ID:XKqCU3PC0718デフォルトの名無しさん (ワッチョイ faa6-/eJP)
2025/10/22(水) 12:58:32.68ID:6nuMV8zc0 C++26から入るらしい^^と[::]という二つの演算子はどういう用途に使うものなのでしょうか?
719はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 4132-ctWl)
2025/10/22(水) 13:31:13.53ID:/iXiQCcE0720デフォルトの名無しさん (アウアウウー Sa09-u8G0)
2025/10/22(水) 19:35:11.69ID:t2Chdy11a ^^
↑ちょっと顔にみえる
↑ちょっと顔にみえる
721デフォルトの名無しさん (ワッチョイ aa71-zeRK)
2025/10/22(水) 21:43:50.71ID:q+0a8lK20 ^^;
722デフォルトの名無しさん (アウアウウー Sa09-HZvd)
2025/10/22(水) 21:55:39.76ID:tW3LNod+a ^^;ゞ
723デフォルトの名無しさん (ワッチョイ 417c-ib/k)
2025/10/22(水) 22:05:42.67ID:b6F/3uj70 ^^::←グローバル名前空間のリフレクション値
724デフォルトの名無しさん (ワッチョイ d6d6-9FkA)
2025/10/23(木) 05:29:13.93ID:HOQCmR4+0 v^^
725デフォルトの名無しさん (ワッチョイ c1ef-6mJJ)
2025/10/23(木) 21:41:47.99ID:FPW1mHao0 山崎渉
726デフォルトの名無しさん (アウアウウー Sa09-6N1s)
2025/10/24(金) 14:17:57.63ID:nAYKU6CIa GGは
へへ
ミミ
へへ
ミミ
727デフォルトの名無しさん (JP 0Hab-oW0m)
2025/10/29(水) 17:48:11.20ID:KY7jGttbH Y(^_^)Y なんすかこれ
口が違う。覚えてる人修正して
口が違う。覚えてる人修正して
728デフォルトの名無しさん (アウアウウー Sae3-N4yN)
2025/11/11(火) 14:16:42.56ID:crDtfQHZa バルタン星人のひと元気かな
729デフォルトの名無しさん (ブーイモ MM9f-lDbn)
2025/11/13(木) 14:20:45.09ID:jo2+4JNJM 多分基本的な質問ですまんけど、参照型のメンバー持ったクラスをmove対応させるのってどうやんのが定石?
ポインタにするしかない?
ポインタにするしかない?
730はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 9f32-jcp5)
2025/11/13(木) 14:53:55.31ID:bJCWdXAy0 >>729
その参照が差す先のオブジェクトの所有権 (最終的に後始末する責任) を持っている状況ということ?
ポインタを交換する手法がよく使われるのはヌルで無効を表現してるだけなので所有権を持ってるかどうかわかるフラグを立てれるならなんでもいいよ。
型システム的に表現するなら optional と reference_wrapper を組み合わせるのがよいかな。(optional は参照を直接には保持できない。)
その参照が差す先のオブジェクトの所有権 (最終的に後始末する責任) を持っている状況ということ?
ポインタを交換する手法がよく使われるのはヌルで無効を表現してるだけなので所有権を持ってるかどうかわかるフラグを立てれるならなんでもいいよ。
型システム的に表現するなら optional と reference_wrapper を組み合わせるのがよいかな。(optional は参照を直接には保持できない。)
731デフォルトの名無しさん (ワッチョイ ffd6-UeF3)
2025/11/13(木) 22:00:10.45ID:oKSfQs8Q0 いきなりわからんorz
732デフォルトの名無しさん (ブーイモ MMd3-lDbn)
2025/11/13(木) 22:38:55.22ID:PBCTneT3M >>730
なるほどサンキュー
でもoptionは省きたいところ
moveしたあとは使わない前提でこれはUBになる?
class A {
std::reference_wrapper<const std::string> m_s;
public:
A(const std::string& s) : m_s(s) {}
A(A&& rhs) : m_s(std::exchange(rhs.m_s, *(const std::string*)nullptr)) { }
};
なるほどサンキュー
でもoptionは省きたいところ
moveしたあとは使わない前提でこれはUBになる?
class A {
std::reference_wrapper<const std::string> m_s;
public:
A(const std::string& s) : m_s(s) {}
A(A&& rhs) : m_s(std::exchange(rhs.m_s, *(const std::string*)nullptr)) { }
};
733デフォルトの名無しさん (ワッチョイ 9f7c-18cq)
2025/11/13(木) 22:48:43.43ID:qvmNyT2p0 ・T*(ナマポ)にする
Pros: 一番素直、ムーブ後状態をぬるぽで自然に表現できる。
Cons: メンバ使ってるとこで*付けたり.を->に書き換えたりが必要。deleteとか加減算とか好き勝手できちゃう。今どきナマポとかダサい。
・std::unique_ptr<T>やstd::shared_ptr<T>にする
Cons: 多分セマンティクス違う(もともとはヨソのオブジェクト覗いてるだけでしょ?)
・std::referrence_wrapper<T>にする
Pros: 参照の置き換えという意味でこれも素直。
Cons: メンバ使ってるとこに.get()をつける書き換えが必要。ムーブがコピーになるので抜け殻に参照が残って潔癖な人だとキショい。
・std::optional<std::referrence_wrapper<T>>にする
Pros: 型的に一番真面目なので型マニアにっこり。
Cons: 書くのめんどい。「何これ?」って聞かれたときに説明めんどい(未来の自分含む)。.get()必要。
・メンバはT&のままにしてムーブコンストラクタとムーブop=の方で対応する
Pros: 既に使われてる所の書き換え不要。
Cons: ムーブ関数書くのとメンテし続けるのがめんどい。抜け殻に参照先残る。
どれも完璧じゃないから好きなの選んでいいよ
Pros: 一番素直、ムーブ後状態をぬるぽで自然に表現できる。
Cons: メンバ使ってるとこで*付けたり.を->に書き換えたりが必要。deleteとか加減算とか好き勝手できちゃう。今どきナマポとかダサい。
・std::unique_ptr<T>やstd::shared_ptr<T>にする
Cons: 多分セマンティクス違う(もともとはヨソのオブジェクト覗いてるだけでしょ?)
・std::referrence_wrapper<T>にする
Pros: 参照の置き換えという意味でこれも素直。
Cons: メンバ使ってるとこに.get()をつける書き換えが必要。ムーブがコピーになるので抜け殻に参照が残って潔癖な人だとキショい。
・std::optional<std::referrence_wrapper<T>>にする
Pros: 型的に一番真面目なので型マニアにっこり。
Cons: 書くのめんどい。「何これ?」って聞かれたときに説明めんどい(未来の自分含む)。.get()必要。
・メンバはT&のままにしてムーブコンストラクタとムーブop=の方で対応する
Pros: 既に使われてる所の書き換え不要。
Cons: ムーブ関数書くのとメンテし続けるのがめんどい。抜け殻に参照先残る。
どれも完璧じゃないから好きなの選んでいいよ
734デフォルトの名無しさん (ワッチョイ 1f01-/Hnv)
2025/11/13(木) 23:01:27.30ID:/tchf03X0 unique_ptrと同様のもの(unique_ref)を作ればいいんじゃねえのって話だろ
ただしptrはnullptrで無効を表現してるから
代わりにフラグを用意する
class unique_ref{
T& ref;//参照
bool isValid;//無効判定
//コンストラクタ
unique_ref(T&r):ref(r), isValid(true){}
//ムーブ コンストラクタ
unique_ref(unique_ref&& a){move(a);}
//ムーブ代入
unique_ref& operator=(unique_ref&& a){move(a);}
move(unique_ref&&a){if(this!=&a && a.isValid) ref=a.ref; a.isValid=false;}
}
てなかんじかと
知らんけど
ただしptrはnullptrで無効を表現してるから
代わりにフラグを用意する
class unique_ref{
T& ref;//参照
bool isValid;//無効判定
//コンストラクタ
unique_ref(T&r):ref(r), isValid(true){}
//ムーブ コンストラクタ
unique_ref(unique_ref&& a){move(a);}
//ムーブ代入
unique_ref& operator=(unique_ref&& a){move(a);}
move(unique_ref&&a){if(this!=&a && a.isValid) ref=a.ref; a.isValid=false;}
}
てなかんじかと
知らんけど
735デフォルトの名無しさん (ワッチョイ 1fa6-0yYo)
2025/11/13(木) 23:06:32.01ID:pKRh1I850 参照なんて引数と演算子オーバーロード以外で使ってもいいこと無くね?
736デフォルトの名無しさん (ワッチョイ 9f7c-18cq)
2025/11/13(木) 23:07:03.58ID:qvmNyT2p0 そもそも所有権自分で保持してるメンバがもともとT&ってことはないだろ
どっか遠くのオブジェクトを見えるようにしてるだけでしょ?
(それはそれで設計的に焦げ臭いけど置いとく)
どっか遠くのオブジェクトを見えるようにしてるだけでしょ?
(それはそれで設計的に焦げ臭いけど置いとく)
737デフォルトの名無しさん (ワッチョイ 1f01-/Hnv)
2025/11/13(木) 23:07:46.30ID:/tchf03X0 もしくはunique_ptrをunique_refでラップしてしまうのが楽か
738デフォルトの名無しさん (ワッチョイ 1f01-/Hnv)
2025/11/13(木) 23:10:58.33ID:/tchf03X0739デフォルトの名無しさん (ワッチョイ 9f7c-18cq)
2025/11/13(木) 23:14:39.55ID:qvmNyT2p0740はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 9f32-jcp5)
2025/11/13(木) 23:20:38.76ID:bJCWdXAy0 >>732
UB になる。
ポインタと違って参照自体は無効を表現できないのが C++ の基本ルールであり、 reference_wrapper でもそれは同じ。
それでもあえてやるなら適当にダミーのオブジェクトを作っておいてそれを参照していたら無効ということにするというようなことをできなくはないが……それはそれでちょっと不恰好だよね。
UB になる。
ポインタと違って参照自体は無効を表現できないのが C++ の基本ルールであり、 reference_wrapper でもそれは同じ。
それでもあえてやるなら適当にダミーのオブジェクトを作っておいてそれを参照していたら無効ということにするというようなことをできなくはないが……それはそれでちょっと不恰好だよね。
741デフォルトの名無しさん (ワッチョイ 1f01-/Hnv)
2025/11/13(木) 23:22:41.52ID:/tchf03X0742デフォルトの名無しさん (ワッチョイ 9f7c-18cq)
2025/11/13(木) 23:30:06.73ID:qvmNyT2p0 >>741
ハンドルは外部で持ったままで、その関数内クラスにはハンドルの参照を渡す(関数内クラスの参照メンバを外部のハンドルで初期化する)って言ってる?それ委譲とは言わないよ
委譲したからにはそのリソースはその関数内クラスの消滅とともに消えないといけないけど、そうなったら外部で持ってたハンドルの実体はどうなるの?
どんなケースを想定してるのか全然わかんない
ハンドルは外部で持ったままで、その関数内クラスにはハンドルの参照を渡す(関数内クラスの参照メンバを外部のハンドルで初期化する)って言ってる?それ委譲とは言わないよ
委譲したからにはそのリソースはその関数内クラスの消滅とともに消えないといけないけど、そうなったら外部で持ってたハンドルの実体はどうなるの?
どんなケースを想定してるのか全然わかんない
743デフォルトの名無しさん (ブーイモ MM0f-lDbn)
2025/11/14(金) 12:19:28.56ID:YW3kWFexM >>740
までもnull objectはよく使ってるからそれにするわ
個人的にはすっきり
でもc++の参照っていらん子やん?って気がしてならない
class A {
static constexpr std::string s_empty_str{""};
std::reference_wrapper<const std::string> m_s;
public:
A(const std::string& s) : m_s(s) {}
A(A&& rhs) : m_s(std::exchange(rhs.m_s, s_empty_str)) { }
};
までもnull objectはよく使ってるからそれにするわ
個人的にはすっきり
でもc++の参照っていらん子やん?って気がしてならない
class A {
static constexpr std::string s_empty_str{""};
std::reference_wrapper<const std::string> m_s;
public:
A(const std::string& s) : m_s(s) {}
A(A&& rhs) : m_s(std::exchange(rhs.m_s, s_empty_str)) { }
};
744デフォルトの名無しさん (ワッチョイ ff36-TpjX)
2025/11/14(金) 17:06:33.25ID:sw2A38eb0 >>743
型無しのnullpointerが型システム(機能保証)を破壊しているから、型を強要する参照は必要。
型無しのnullpointerが型システム(機能保証)を破壊しているから、型を強要する参照は必要。
745デフォルトの名無しさん (ブーイモ MM0f-lDbn)
2025/11/14(金) 17:48:56.23ID:d/VpWy+aM746はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 9f32-jcp5)
2025/11/14(金) 19:18:46.50ID:YeCIJNF30 >>743
参照は色々な場面で有用ではあるが、 D&E によれば最初の動機は演算子オーバーロードだと書かれている。
オブジェクトをコピーする必要がない (値をコピーせずに場所を渡せば充分) ような状況で参照がなくポインタを使うならいちいち &a+&b みたいにして書く必要が生じる。
いかにも煩わしいだろう。
参照は色々な場面で有用ではあるが、 D&E によれば最初の動機は演算子オーバーロードだと書かれている。
オブジェクトをコピーする必要がない (値をコピーせずに場所を渡せば充分) ような状況で参照がなくポインタを使うならいちいち &a+&b みたいにして書く必要が生じる。
いかにも煩わしいだろう。
747デフォルトの名無しさん (ワッチョイ 1fa6-0yYo)
2025/11/14(金) 19:55:59.90ID:p/1JbX4j0 C++より古いの新しいの含めて多くの言語が採用してるように参照は引数でのみ使用可能で良かったと思うよ
748デフォルトの名無しさん (ワッチョイ 9fda-V2U1)
2025/11/14(金) 20:35:30.63ID:/xnnTPah0749デフォルトの名無しさん (ワッチョイ 1f42-q6Sd)
2025/11/15(土) 10:22:10.37ID:ncudN0/g0 747は、(実際の仕様はそうなっていないけど)引数でのみ使用可能なら良かったのに……という意味だと思うぞ。
750デフォルトの名無しさん (ワッチョイ 9fda-V2U1)
2025/11/15(土) 19:11:12.30ID:lfrbAWbT0 ああ
>使用可能で良かったと思うよ
ではなく、
>使用可能だったら良かったのにと思うよ
って事ですか
>使用可能で良かったと思うよ
ではなく、
>使用可能だったら良かったのにと思うよ
って事ですか
751デフォルトの名無しさん (ワッチョイ ffa1-lDbn)
2025/11/15(土) 19:25:57.81ID:3JdS/6Ib0 カスみたいな読解力
752デフォルトの名無しさん (オッペケ Srf3-rRus)
2025/11/15(土) 19:35:13.09ID:QqRirP4Fr そんなコミュ力高かったら、石が友達なんて言わない
753デフォルトの名無しさん (ワッチョイ 1f42-q6Sd)
2025/11/15(土) 19:39:44.33ID:ncudN0/g0 分かりやすいように749みたいに書いたけど、747で普通に意味が通じるので、「ではなく」というとちょっと違う気がするかな。言葉って難しい。
754デフォルトの名無しさん (ワッチョイ 4d7c-2tyn)
2025/11/16(日) 01:00:07.67ID:oagsDxeg0 こういう人が仕様書読んで実装すると思うとこわい
755デフォルトの名無しさん (アウアウウー Sa85-H7iN)
2025/11/16(日) 13:18:16.47ID:0LN83zrSa756デフォルトの名無しさん (ワッチョイ 7901-djhR)
2025/11/16(日) 13:32:50.84ID:Xh/GBEYv0 C++ばっかりやっとるからだよ
日本語を使え
日本語を使え
757デフォルトの名無しさん (ワッチョイ 0dda-43h0)
2025/11/16(日) 16:38:31.73ID:r6khXsKc0758デフォルトの名無しさん (ワッチョイ 22f2-43h0)
2025/11/16(日) 16:49:19.65ID:D8AV/AUw0 あんたは機能的非識字なんでしょ
歳とか関係ないって
歳とか関係ないって
759デフォルトの名無しさん (ワッチョイ 91df-iLwu)
2025/11/16(日) 18:20:15.84ID:fnmgx6dT0 747は、日本語の文法としておかしなところは別にないけれども、748のような読み方も許すという点で多義的な文にはなっているかな。
「C++より〜ように」という前半の文脈があるので748のような受け取り方はしない方が普通だと思うが、文法的には748のような読み方も一応可能だろう。
「使用可能(ということ)で良かった」としたら、完全に一義的になっているとまでは言えないまでも、多少ニュアンスは明確になっているかな。そうでもないか。
「C++より〜ように」という前半の文脈があるので748のような受け取り方はしない方が普通だと思うが、文法的には748のような読み方も一応可能だろう。
「使用可能(ということ)で良かった」としたら、完全に一義的になっているとまでは言えないまでも、多少ニュアンスは明確になっているかな。そうでもないか。
760デフォルトの名無しさん (ワッチョイ 11da-ZOUt)
2025/11/16(日) 19:06:28.66ID:B8gkzotY0 >>757
文字なんでニュアンスが伝わりづらいだけだよ
「この前の件だけど、両方出来るようになったよ」
「他と同じように片方のみで良かったと思うよ」
まあ誤解を与えない書き方とすると
「他と同じように片方のみで良かったのにと思うよ」
って感じで「のに」をいれた方が残念がっている様子が伝わってくるよね
文字なんでニュアンスが伝わりづらいだけだよ
「この前の件だけど、両方出来るようになったよ」
「他と同じように片方のみで良かったと思うよ」
まあ誤解を与えない書き方とすると
「他と同じように片方のみで良かったのにと思うよ」
って感じで「のに」をいれた方が残念がっている様子が伝わってくるよね
761デフォルトの名無しさん (ワッチョイ e9f6-iLwu)
2025/11/17(月) 09:06:44.31ID:g7E0m0EQ0 C++はよく分からないので、cpprefjpにはいつもお世話になっているんだけど、生文字列リテラルのところにある「改行が入力された場合、改行の制御文字 '\n' に変換される」というのは説明として正確なのかな。
raw文字列リテラルのところの規格にはそれっぽいことは書いていないように思うし、改行文字は通常の文字としてそのままraw文字列リテラルに含められるだけであって、別に「変換」とかはされていないんじゃないかと思うんだけど。
raw文字列リテラルのところの規格にはそれっぽいことは書いていないように思うし、改行文字は通常の文字としてそのままraw文字列リテラルに含められるだけであって、別に「変換」とかはされていないんじゃないかと思うんだけど。
762はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 4d32-o1Ob)
2025/11/17(月) 10:18:46.23ID:DdlSQj440 >>761
'\n' に変換するという説明は誤りだと私も思う。
規格内の例中では \n と同等というような説明はあるのでこれを変換と誤解したのかも?
https://timsong-cpp.github.io/cppwp/n4950/lex.string#5
'\n' に変換するという説明は誤りだと私も思う。
規格内の例中では \n と同等というような説明はあるのでこれを変換と誤解したのかも?
https://timsong-cpp.github.io/cppwp/n4950/lex.string#5
763はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 4d32-o1Ob)
2025/11/17(月) 10:27:40.74ID:DdlSQj440 余談だけど生文字列リテラルの扱いにはちょっと変な特別扱いがある。
C++ では処理の初期段階で行を連結 (改行を削除) してしまうことになっていて、その時点では各改行が生文字列リテラルの中なのかどうか認識してない。
https://timsong-cpp.github.io/cppwp/n4950/lex#phases-1.2
後でトークンを分割するときになって生文字列リテラルを認識したらその範囲では連結を「取り消す」という処理が入る。
https://timsong-cpp.github.io/cppwp/n4950/lex#pptoken-3.1
結果としては改行はそのまま含まれるだけなんだけど、理屈としては色々な操作 (変換?) はされてる。
ただ、これは C++ の言語の解釈の話であって処理系の実装方法ではない。
つまり結果が同じであれば実装方法は問わないので連結してから取り消すのではなく連結の例外にしてもかまわないし、
生文字列リテラルを普通の文字列リテラルに変換するような手法もあるのかもしれない。
C++ では処理の初期段階で行を連結 (改行を削除) してしまうことになっていて、その時点では各改行が生文字列リテラルの中なのかどうか認識してない。
https://timsong-cpp.github.io/cppwp/n4950/lex#phases-1.2
後でトークンを分割するときになって生文字列リテラルを認識したらその範囲では連結を「取り消す」という処理が入る。
https://timsong-cpp.github.io/cppwp/n4950/lex#pptoken-3.1
結果としては改行はそのまま含まれるだけなんだけど、理屈としては色々な操作 (変換?) はされてる。
ただ、これは C++ の言語の解釈の話であって処理系の実装方法ではない。
つまり結果が同じであれば実装方法は問わないので連結してから取り消すのではなく連結の例外にしてもかまわないし、
生文字列リテラルを普通の文字列リテラルに変換するような手法もあるのかもしれない。
764デフォルトの名無しさん (ワッチョイ e9a6-Bso2)
2025/11/17(月) 20:16:57.16ID:3c799E+W0765デフォルトの名無しさん (ワッチョイ 6e10-iLwu)
2025/11/18(火) 02:43:23.41ID:oTdu6LNz0レスを投稿する
ニュース
- 橋下徹氏 外務省幹部の訪中受け「口だけ番長」へ痛烈指摘 「喧嘩は日本の完敗…なんとかっこ悪い日本か」 [冬月記者★]
- 習政権、高市首相への態度硬化 台湾有事発言で連日非難 中国 ★11 [ぐれ★]
- 【外国人問題】小野田紀美担当相「不法就労や不法滞在は許さない」 [シャチ★]
- 【野球】井端監督 大谷翔平、山本由伸らのWBCへの参加 「1日も早く返事ほしい」「待っててといっても、国内組が遅くなってしまう」★3 [冬月記者★]
- 経団連会長、日中は建設的対話を 経済3団体が高市首相と初会談も日中関係は話題に登らず… [BFU★]
- 東京株式市場 インバウンド関連株が下落 中国政府の渡航自粛要請で [バイト歴50年★]
- 橋下徹「口だけ番長の日本が中国に喧嘩負け。なんとカッコ悪い日本か!」高市にバチーン!✴ [153490809]
- 【高市早苗】習近平激怒か [115996789]
- 中国「高市が頭を下げて謝罪しない限り、絶対に許さない」 [329329848]
- 🏡
- ワンピースの評価ガタ落ちしてるけど尾田っちのメンタルが心配
- ガンダム←名言ばかり エバー(笑)←こいつ(笑)
