探検


C++相談室 part167

2026/01/26(月) 11:20:43.46ID:SIfTs9j80
!extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512
↑同じ内容を3行貼り付けること

次スレは>>980が立てること
無理なら細かく安価指定

※前スレ
C++相談室 part165
https://mevius.5ch.net/test/read.cgi/tech/1698705458/
C++相談室 part166
https://mevius.5ch.net/test/read.cgi/tech/1745631298/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2デフォルトの名無しさん (アウアウウー Sacd-Bm+i)
垢版 |
2026/01/27(火) 20:46:05.57ID:EarFEz5Ka
>>1
O2
2026/01/29(木) 16:49:57.40ID:YJ+F37lYM
通常、"xxx.h" の中に、static 修飾されたグローバル変数
(内部リンケージ)を書くのはおかしい。
しかし、はちみつ餃子によれば、
const int g_a = 5; //(1)
は、static を付けて無くても内部リンケージなんだそうだ。
しかるに、(1) は、"xxx.h" の中に書く習慣がある。
なんかもやもやする。
2026/01/29(木) 16:51:36.41ID:YJ+F37lYM
>>3
C++ Draft になんて書いてあるのかは知らないが、
内部リンケージと考えずに、COMDAT ANY Section だとすれば、
納得がいく。その場合、同じ定義を書くと、1つの section だけ
ガ残る。
2026/01/29(木) 17:02:39.69ID:QeUvzik40
内部リンケージとなる const int をヘッダに書いてると、定数式として使われる分には問題無いけど
左辺値としてアドレスを取るようなことをすると無駄な重複定義が生まれたり、
それをインライン関数内でやるとODR違反になったりして問題になることがある。

今なら constexpr int としておくことで暗黙に inline 変数となり暗黙の内部リンケージからも外れるので問題無くなっている。
2026/01/29(木) 17:07:48.31ID:YJ+F37lYM
>>5
でも、C++ の教本では constexpr キーワードが導入されるより
ずっと前から、const 修飾のグローバル変数をマクロの代わりに
使うことが推奨されていた。
マクロの代わりになると言うのであれば、"xxx.h" の中に
書いて良いはずだったはずなのに。
2026/01/29(木) 17:31:08.04ID:Dsvv29Gw0
なんだかんだで整数程度はマクロで定義したほうが扱いやすいことが多かった。
正直言って C++03 時代に定数の定義のために const を推奨するのは理想論が過ぎると思う。
(そうしたいと思ってた人は多かったが言語機能が充分に噛み合ってなかった。)
実際に駄目だったからこんな基本的なところで改良が付け加えられてるわけだし。
2026/01/29(木) 18:09:54.29ID:YJ+F37lYM
>>77
>(そうしたいと思ってた人は多かったが言語機能が充分に噛み合ってなかった。)
しかし、C言語の算術定数の場合、整数、float、double が
定数自体の書き方で区別が出来るようになっているから、それほど
欲しいとは思わなかった。
それに、定数の型が char と int で全く動作が変わってしまうような
プログラムは、そもそも推奨されないというか、バグの元になる。
例えば、FILE *fp; に対して、

FlexibleWrite( fp, g_a );

で g_a の型が char なら、1 バイト、int なら 4 バイトの書き込みが行われる
という書き方は、好きな人もいるらしいが、不安定で見つけにくいバグの原因に
なりがちなので、推奨されない。
2026/01/29(木) 18:21:44.75ID:7sXa6UKh0
>>3
>通常、"xxx.h" の中に、static 修飾されたグローバル変数
>(内部リンケージ)を書くのはおかしい。
何で?
2026/01/30(金) 00:10:33.51ID:Bxxvh+lXM
>>9
1. 「内部リンケージ」のグローバル変数は、その翻訳単位 A に
 のみにローカルな変数の事である。
2. xxx.h に書くグローバル変数は、複数の翻訳単位で
 共有されるものを書くのが基本。
 なぜなら、翻訳単位 A だけに必要な情報であるならば、
 A のソースファイル a.cpp に書けばいいから。
2026/01/30(金) 00:26:25.98ID:Bxxvh+lXM
>>10
(xxx.h)
static int s_a = 5; //内部リンケージのグローバル変数!!!
としておいて、
(t1.cpp)
#include "xxx.h"
・・・
(t2.cpp)
#include "xxx.h"
・・・
(t3.cpp)
#include "xxx.h"
・・・
と書いたとすると、これは、
[続く]
2026/01/30(金) 00:27:18.38ID:Bxxvh+lXM
>>11
[続き]
(t1.cpp)
static int s_a = 5;
・・・
(t2.cpp)
static int s_a = 5;
・・・
(t3.cpp)
static int s_a = 5;
・・・
と書いたのと同じ。
これだと、「5」を初期値に持つ4バイトの領域が、3つ分確保されてしま
うので、xxx.exe は、12バイトの領域が含まれてしまうことになる。
それならいっそう、static 属性を付けず、
(xxx.h)
extern int g_a; //定義なしの宣言
とし、t1.cpp、t2.cpp、t3.cpp のどれかひとつのファイルで、
int g_a = 5;
と書いた方が効率的。そうすれば、xxx.exe では、4バイトしか
消費しないで済むから。
2026/01/30(金) 01:00:19.86ID:pYms0bIf0
selectany使いの俺、低見の見物
2026/01/30(金) 01:50:20.70ID:qpG5Mp2u0
>>10
>2. xxx.h に書くグローバル変数は、複数の翻訳単位で
> 共有されるものを書くのが基本。
それが思い込みだよ
2026/01/30(金) 03:47:22.30ID:CPUPz1Lh0
>>14
内部リンケージとなる名前をヘッダで宣言した時点で >>5 で挙げたように
重複定義やODR違反の可能性が生じてしまうから、それが適切となるケースは思い当たらないんだけど
一つでも有用な例を挙げられる?
2026/01/30(金) 08:43:46.92ID:DcZwhPHt0
>>10
それが「噛み合ってない」と述べた内訳のひとつ。
C++ の仕組みでは各翻訳単位でのコンパイルが完了してからリンクするというフェイズの分け方が解釈に強力に癒着していて変えられないので変数を定数式として使うためには定義である必要がある。
他の翻訳単位に定義がある変数が定数式になることはない。
この前提では内容が同じであってもそれぞれの翻訳単位で定義する必要が生じる。

>>12
が、それぞれの翻訳単位で定義しても変更されることがないことがなくアドレスを使うこともない変数は最適化でほぼ消えることをあてにして良い。
むしろ const な変数を外部リンケージにすると翻訳単位の中だけでは消せるはずのものを (他の翻訳単位で使う可能性があるから) 消せないということが起こって不利になる。

後から導入されたインライン変数は定義が複数あってもよく、しかも他の翻訳単位にある定義と統合されてひとつの実体を持つ (つまり全て同じアドレスを持つ) ことを保証するということで楽な運用を出来るようにした。
C++ のインライン関数の考え方をそのまま変数に延長しているのでわかりやすい。
ただ、オブジェクトの実体がどこかの翻訳単位に属して他の翻訳単位からはそれを参照するという (C から引き継いだ) 考え方はぶっ壊れてる。
テンプレートの導入の時点でもうぶっ壊れてるけど。
2026/01/30(金) 10:33:46.55ID:bR/FJ/XSM
ところで、関数の戻り値のところに書く場合の constexpr は、
関数の内部のコンパイルの仕方まで変更してまうので、
const と書いた場合とは働きが明確に異なるけど、
グローバル変数の場合、型名の直前に書く場合は、
const と constexpr でどんな違いが有るんかいな?
18デフォルトの名無しさん (ワッチョイ 69f0-5F09)
垢版 |
2026/01/30(金) 10:43:22.05ID:chCVP8PL0
constexprは計算式が書いてあればコンパイラが解いて計算結果を返す。constexprの即値を返す関数のみ計算が可能。
constは、単に値を変更できないことを表す。本来の意味は定数でもなんでもない。リードオンリーという意味。
2026/01/30(金) 10:51:53.45ID:bR/FJ/XSM
>>18
なお、global 変数において、constexpr でなくても、
const int g_a = 初期値;
と書いてあれば、初期値部分に関数呼び出しや変数が書いて
無い限りは、定数になるまで計算されている。
この場合に限り、g_a マクロの様に振舞える。
2026/01/30(金) 11:45:47.16ID:DcZwhPHt0
>>17
const 付きの変数は初期化子が定数式のときは定数式として使える規則なのでそのときは constexpr との差はほとんどない。
そうでない場合 (初期化子が定数式でない場合) は const は単に書き換えられない変数というだけで定数式としては使えなくなる。
constexpr は初期化子が常に定数式であることを要求し、そうでない場合はエラー。
(より厳密な用語で言えば不適格。)

あとはシンタクス的な違いがちょっとある。
const int* p = &a;
と書いたときは p が指す先の型が const int で p 自体には const 性はない。
constexpr int* p = &a;
と書いた場合には p が指す先は int で、 constexpr は p 自体にかかっているという解釈になる。

>>19
C++ にグローバル変数なんて分類はないし、関数スコープでも const 付き変数の初期化子が定数式だったら定数式として使える。
再度強調しておくがマクロと同列に考えるのはやめてくれ。
字句的な規則と式評価の規則は全く別のレイヤなので結果的な動作が似て見えたとしてもメカニズムの話には持ち込むべきではない。
2026/01/30(金) 12:29:33.70ID:YBozMkZgM
>>20
>C++ にグローバル変数なんて分類はないし
C++ の Draft では、余り使われて無い気がするが、
昔から習慣的に global variable と言われている
ものを C++ Draft 的に言うとどうなるとあなたは考える?
なお、関連するものとして、
namespace scope、global scope という言葉がある。
2026/01/30(金) 13:45:17.40ID:DcZwhPHt0
>>21
慣例も尊重はするけど伝わらなかったり曖昧だったりするなら話は変わってくる。
慣例はそんなに統一されてないんだよ……
この場合は推察は出来るからあまり強くは言わないけど気を付けてねくらいの感じ。

グローバル変数という言葉は余り使われていないというか、仕様の中ではスコープの分類とは違う意味で使われてる。
明瞭な用語の定義はないものの文脈的には思わぬところで変更されるような (つまり公開範囲やアクセス経路の設計に失敗している) 変数くらいの意味で使われてる。

翻訳単位の外に公開されているようなものに限ってグローバルと称している事例などもあるし、その定義ならクラススコープの public で static なデータメンバはグローバル変数と読んでもおかしくないことになる。
2026/01/30(金) 14:10:45.08ID:YBozMkZgM
>>22
むしろ、namespace scope という言葉が逆に話を複雑にすることもある
名前なし namespace の scope と global scope が別の概念であったりもする。
複雑さは異常なくらいで、namespace、scope、life time の言葉も非常に
微妙なニュアンスや定義の差があったりするが、共通する部分も有り
そもそも C++ Draft が良い書き方なのかにも疑問が持たれている。
24デフォルトの名無しさん (JP 0H12-Bm+i)
垢版 |
2026/01/30(金) 14:26:25.16ID:VqKwakPAH
>B.cでg_aにアクセスする必要があるときにはA.hをincludeする
>絶対にB.cにextern const int g_a;と書いてはいけない

そんな作法無い
2026/01/30(金) 14:35:58.59ID:YBozMkZgM
>>24
それは、前スレの以下の投稿の事だね。
(ちなみに、私の発言ではない)

988 デフォルトの名無しさん (ワッチョイ 8101-ma3r)
2026/01/29(木) 14:11:34.91ID:7sXa6UKh0
>>986
g_aの宣言はA.hで行う
extern const int g_a; とするか extern int g_a;とするかの選択が強制される

B.cでg_aにアクセスする必要があるときにはA.hをincludeする
絶対にB.cにextern const int g_a;と書いてはいけない

これは作法の範疇だよ
作法を破れば何でもできるさ
2026/01/30(金) 14:41:35.01ID:1IzfVQ9H0
なんつーか、関係ない話だけどさ

最初に疑問を投げた人が、おそらく回答したであろう人のレスに「なお、」って付け加えるのって凄く変に思うんだよな
2026/01/30(金) 14:43:02.51ID:DcZwhPHt0
>>23
global scope は global namespace scope の別名で、 namespace scope の一種。 (包含関係)
https://timsong-cpp.github.io/cppwp/n3337/basic.scope#namespace-3
多少の特別扱いはあるけど別の概念というわけではないよ。

仕様書が分かり難いのは C++ が分かり難いからで、 C++ が C++ である限りどう表現したって分かりやすくはならない。
そんなのは参考書で補えというのが委員会の立場。
というか普通は単なるユーザが仕様書をガッツリとは読まなないのが普通だし、わかりやすいことよりも曖昧さがないことが仕様書としてあるべき姿でしょ。
2026/01/30(金) 15:20:00.26ID:Lh5nXkOq0
最後にどなたかまとめてくれると嬉しい
2026/01/30(金) 15:25:23.73ID:YBozMkZgM
>>27
>global scope は global namespace scope の別名で、 namespace scope の一種。 (包含関係)
これは正しいが、
「名前なし namespace の scope」と「global scope」は別の概念
ということはまた正しい。
2026/01/30(金) 15:28:19.22ID:YBozMkZgM
>>27
>わかりやすいことよりも曖昧さがないことが仕様書としてあるべき姿でしょ。
定評のある C++ の本を書いている人が、C++ の Draft が仕様書として曖昧さが
無い、とは思ってないようだったが。
少なくとも、彼が自分で呼んでも不明瞭な事が一杯有った、ので、
詳しそうな人に沢山の質問をしたと書いていた。
つまり、仕様書を読んだだけでは理解できないようになっている
可能性が高い。
2026/01/30(金) 15:36:43.24ID:F1IQee9fM
定数定義はenum使う派いる?
2026/01/30(金) 16:07:38.88ID:DcZwhPHt0
>>30
曖昧さが無いようにという指針が実現できていないのは事実だよ。
曖昧さに関する欠陥報告はたくさん出てる。

ただそれは批判したところでどうにもならん。
正確な記述のために努力してなお曖昧なのでこれ以上にできることがあるわけではない。
2026/01/30(金) 16:25:14.88ID:DcZwhPHt0
>>31
enum が妥当な場合、選択肢として複数の整数がありうるような場合ならもちろん enum を使うけど……
特定の数値のためにひとつひとつ異なる列挙型を作るという意味ならやらないな。
C++ の列挙子は個々の列挙型なので (underlying type とある程度の互換性はあるものの) 型を本来あるべきものに出来ない。
統合開発環境で型を表示させたときに意味のない列挙型が出てくるとはかなり嫌な感じがする。
34デフォルトの名無しさん (ワッチョイ 69f0-5F09)
垢版 |
2026/01/30(金) 16:37:02.25ID:chCVP8PL0
constexprは、他に条件文のクエリとしても有効

if constexpr ( 真偽の定数式 ) {

  真ならコード生成されるが、偽ならコード生成されない

}else {

  偽ならコード生成されるが、真ならコード生成されない

}
2026/01/30(金) 16:38:24.89ID:YBozMkZgM
>>32
かなり高度で評判の良い C++ の教本を書いている人の間でも、
C++ Draft の書き方には問題があるんじゃないか、という説もある
2026/01/30(金) 17:03:37.59ID:ExkhX6LU0
>>35
主張は何? 何が言いたいのかわからない。
2026/01/30(金) 17:25:43.44ID:YBozMkZgM
>>36
C++ Draft が分かりづらいのは、曖昧さの除去に役立ってない
2026/01/30(金) 17:30:50.02ID:ExkhX6LU0
>>37
現状をそう解釈したとして、その上でどうすべきと考えているのかを明瞭にして。
2026/01/30(金) 17:35:29.73ID:YBozMkZgM
>>38
どうすべきかは彼らの問題だ。
C++委員会を手伝うことはしたくない。
彼らの事の進め方が、私の思想とは全く異なるから。
2026/01/30(金) 17:53:13.76ID:YBozMkZgM
ある委員会がありました。その人達が決めた仕様が全体的に
おかしく、分かりにくく、評判も時と共にどんどん悪くなっていきました。
「それを直すことは人類に役立つから直すべき」
などと考える人がいますが、そうすると、委員会が得をしてえらそうに振舞う
だけで、画期的な良い提案をした人には何のメリットもありません。
2026/01/30(金) 18:11:04.87ID:F1IQee9fM
ガイキチはほっとこ
2026/01/30(金) 18:30:39.90ID:CxLU3aXx0
仕様で盛り上がるなんていつぞやのrustスレ
2026/01/30(金) 18:31:08.85ID:ExkhX6LU0
>>40
委員会が諸悪の根元で、自分たちの利益のために改悪してるとても言いたげだな。
委員会を運営するために金を出してるスポンサーが誰で、何のためにやってるかわかってんのか?
2026/01/30(金) 19:09:40.19ID:YBozMkZgM
>>43
>委員会を運営するために金を出してるスポンサーが誰で、何のためにやってるかわかってんのか?
教えて。
2026/01/30(金) 19:10:28.22ID:YBozMkZgM
>>43
>自分たちの利益のために改悪してるとても言いたげだな。
そういうことでは全く無い。
物事を行うシステムの問題を言っている。
2026/01/30(金) 19:18:26.73ID:F1IQee9fM
ずいぶんふわっとした内容なことで
2026/01/31(土) 04:22:55.46ID:2I2AM33H0
C言語だと単にconst int foo = 10; と書いたら外部リンケージになるため
複数の箇所からインクルードされるヘッダファイルbar.hにそれを書く場合は
extern const int foo;
とせねばリンカーか何かに起こられる。(もちろん=10は.c の方に const int foo = 10; と定義を書かねばならない
従って、C++とから
extern "C" {
#inclue "bar.h"
}
としたときにbar.hにexternの無いconst int宣言が含まれることは事実上無いからでextern "C" の曖昧さの問題は事実上無いハズ……

それよかむしろ関数の宣言のexternを省略したやつをextern "C" { } で囲った場合どうーなちゃうの?!
と言うのが疑問ではある(Visual Studioだと経験上問題なさげ……
2026/01/31(土) 10:20:31.67ID:M2GZ7tW4M
>>47
>それよかむしろ関数の宣言のexternを省略したやつをextern "C" { } で囲った場合どうーなちゃうの?!
「関数プロトタイプ宣言」の場合、
extern 書いても書かなくても同じはずだが。
49デフォルトの名無しさん (ブーイモ MMb2-BZjK)
垢版 |
2026/01/31(土) 11:05:46.93ID:ju7CGQayM
まだやってんのか
初学者ならともかく暫く書いていたら
自然と身に付くことやろw
50デフォルトの名無しさん (ワッチョイ 0104-DqSr)
垢版 |
2026/01/31(土) 12:01:19.45ID:A/7Hjx4l0
>>39
ならc++を捨てて自分で言語を開発すればいいんじゃない?Rustみたいに。
思想も名誉も自分のものだよ。
2026/01/31(土) 15:12:43.19ID:2I2AM33H0
>>48
前スレで
>つまり、extern "C" の直後を中括弧で囲ってないものは、extern 宣言であるが、
>extern "C" の直後を中括弧で囲っていて、中に extern で修飾してないものは、
>(原則として)「狭義の定義」である。
と書いたあった、
すわなちextern "C" { } のブロック内に
externを省略した(extern で修飾してない)関数宣言がある場合、
>(原則として)「狭義の定義」である。
に該当しそう(((( ;゚Д゚)))ガクガクブルブル
2026/01/31(土) 15:12:44.53ID:2I2AM33H0
>>48
前スレで
>つまり、extern "C" の直後を中括弧で囲ってないものは、extern 宣言であるが、
>extern "C" の直後を中括弧で囲っていて、中に extern で修飾してないものは、
>(原則として)「狭義の定義」である。
と書いたあった、
すわなちextern "C" { } のブロック内に
externを省略した(extern で修飾してない)関数宣言がある場合、
>(原則として)「狭義の定義」である。
に該当しそう(((( ;゚Д゚)))ガクガクブルブル
2026/01/31(土) 15:14:23.42ID:2I2AM33H0
大事なことなので2回言いました
大事なことなので2回言いました
2026/01/31(土) 15:24:25.64ID:chqzbMKW0
関数の場合と変数の場合で意味が違ったりするという一貫性の無さも C++ の持ち味
2026/01/31(土) 15:33:33.02ID:xbiMgchEM
>>51
それは変数の場合。
関数の(プロトタイプ)宣言の場合は、問題にならない。
なぜなら、static 修飾した同名の関数と混在して宣言するなどの
特殊なことをしない限りは、
extern void func();

void func();
は、同じ扱いになるから。
56デフォルトの名無しさん (スップ Sdb2-b5qU)
垢版 |
2026/01/31(土) 16:46:04.67ID:gRAiPVlwd
バカが揃うと一気にスレが進むんだよね
たまにこういうタイミングがある
しかも抑えが効かないのかきまって長文
2026/01/31(土) 17:08:18.07ID:2I2AM33H0
心しますサーセンwwwwwwwwwwwwwwww
2026/01/31(土) 21:46:14.29ID:gdR5TKrU0
このスレだとだいたいオイコラミネオかごめ;;の人やな
2026/01/31(土) 23:18:39.52ID:2I2AM33H0
いやそこらのミジンコより目立ってしまってスマンコ(キリ
60デフォルトの名無しさん (ワッチョイ 4df8-19gu)
垢版 |
2026/02/01(日) 09:30:28.20ID:X3l3PQDV0
いや、相談の範疇ならスレタイ通りだろ。
変な主張始めたらスレ違いカエレだけど。
2026/02/01(日) 11:51:43.24ID:ThGRad1xr
いまさら人に聞けない
酒席とかでネタにするために、経緯を押さえたい話

C#のTAPと、C++のコルーチン。偶然、ほぼ同時期に学ぶことになって、うん、だいたい一緒。って思ってる
これって結局、投票とかで、C#の書き方でいいよもう、ってなったってこと?
それとも、両方に共通の祖先とか居る?
2026/02/01(日) 13:12:31.29ID:d7kS7Cwc0
>>61
C# でそのへんに関与してた人が知見を持って C++ にも提案した。
結果的には色々と違いも大きいので実際には単純ではないけどキーマンが共通しているというのは特に大きい要因だと思う。
2026/02/01(日) 13:47:41.49ID:PoLs1CKYM
>>62
ずいぶん詳しいんだね
2026/02/02(月) 10:17:23.35ID:K9nGdm110
>>63
私が回答を付けるときはだいたい資料を確認してるよ。
詳しいというより手間をかけてる。

規格を追ってる人のブログを普段からざっと目を通すくらいのことはしてるけど。
2026/02/02(月) 18:00:38.10ID:ZPnCKFkTa
わりと昔からちょいちょいこのスレは見てるが、はちみつはわりとちゃんとした知識で解答しとる印象ある
趣味人でプロとしてはC++のコーディングはしてないと言ってるが、ホンマかいな?と思うぐらいにはちゃんとしてる
66デフォルトの名無しさん (ワッチョイ 9b90-E3cC)
垢版 |
2026/02/02(月) 19:13:29.58ID:5Ct0wTtc0
はちみつの中の人は江添だからな


というボケを考えたがさすがにキャラが違いすぎか
2026/02/02(月) 20:51:17.33ID:MTHjQakI0
>>65
まあ、
日曜プログラマーレベルだな
2026/02/02(月) 22:58:30.24ID:XsTyxrek0
江添さんの本で勉強しました。ここにいるの?
2026/02/03(火) 07:12:58.79ID:LeQRRChy0
もう人間がプログラミング言語の仕様なんか意識する時代じゃないって言ってたよ
2026/02/03(火) 07:44:49.32ID:H0S3M+nBr
そうだけど気が早いw 移行期の間は勉強しとくと役に立つ
2026/02/03(火) 08:59:50.61ID:3l7bFFEG0
>>65
そりゃガチの素人は関係のある資料を探すことも解釈することも出来ないから……
私はそれが出来る程度にはちゃんとした言語仕様の知識がある自信はあるけど
言語仕様をそれなりに知ってるという程度でプログラミングが十全に出来るというわけではないだろう。

私がちゃんとしているように見えるならそれは知識が優れているからではなく、
ちゃんと調査してちゃんと言語化するのを丁寧にやってるからだと思う。

>>66
キャラもそうだが、以前から私の言葉を見ているなら世代的に私が江添氏より古いことはわかると思う。
私が最初に江添氏を知ったとき、彼は C++ のことなんか全然知らなかったよ。
2026/02/03(火) 10:14:08.75ID:DGQwG7Ey0
たとえ規約書を完全に読みこなし、完全無欠に言語を操れるとしても、
俺らの駄文愚問に向き合って lex&parse して、推定・回答までしてくれるとは限らない
自分で学べ、さもなくは去れみたいなカルチャのC++ならなおのこと

はちみつたんのような御仁を、我々中級者は大事にすべき

初級者は…ありがたみがわからんか…。
73デフォルトの名無しさん (スフッ Sd43-WtQD)
垢版 |
2026/02/03(火) 11:01:49.24ID:iuWGrVubd
きもいわ
74デフォルトの名無しさん (ワッチョイ 9d18-pigu)
垢版 |
2026/02/03(火) 11:08:40.70ID:xllFvPwA0
他の言語スレと比べてみるとよく分かる
有識者のいないスレは閑散としてるからね
C++スレは恵まれてるよ
2026/02/03(火) 11:52:24.53ID:H4cRTHa/a
八光さんのhageは自分で剃ってるのかどうかは気になる
お薬のせい?
76デフォルトの名無しさん (ワッチョイ 2302-F92t)
垢版 |
2026/02/03(火) 15:51:51.64ID:yko8fGlg0
スレ潰しの荒らしはスルーしようぜ
2026/02/04(水) 11:36:21.08ID:poajZd7m0
有識者っていうか質問者の代わりにしっぽ振って調べに行く手動クローラみたいな感じよ
体のいい初心者にはいいように使われて実務者からはバカにされてる
78デフォルトの名無しさん (ワッチョイ 4346-19gu)
垢版 |
2026/02/04(水) 12:28:12.98ID:3m9ejRBE0
「相談室」スレなんだから、初心者の質問に答えるのは妥当じゃないかな。
79デフォルトの名無しさん (ワッチョイ 9d02-pigu)
垢版 |
2026/02/04(水) 13:36:28.09ID:fXUySTwF0
>>77
「調べに行く」はちょっと違うと思う
「たしかこうだったよな」という見込みはあって、それでも一応確認して正確な情報を提供してくれてる
こんなに頼りになる人そうそういないぞ
2026/02/04(水) 16:40:22.17ID:geH/6/Tr0
実務者ってMFCでUI作ってる人みたいなの?
2026/02/04(水) 18:16:44.72ID:2OgvshiTM
Linuxでも、WineでWin32やMFCのアプリは動くけど、使っている
フレームワークや技術が新しくなればなるほど、動きにくくなる
2026/02/04(水) 21:38:29.77ID:ATChicRZ0
>>80
それくらいしかバカに出来る対象がいないんだろうけど
そういうことしててもお前の腕は上がらんよ
83デフォルトの名無しさん (アウアウウー Sa29-lnpu)
垢版 |
2026/02/04(水) 22:17:16.50ID:z+Wn9TMIa
MFCでUI造ってると指摘すると馬鹿にしたことになるのか?
2026/02/05(木) 07:50:24.52ID:jOvU5Odi0
デバドラのコンパネなので、MFCでUI造れ。と言われたら、粛々と作る。それが実務者
2026/02/05(木) 08:55:58.41ID:qvfWxJUj0
デバドラのコンパネなので

理由になってない
ことがわからないんだよなこのジジイは
86デフォルトの名無しさん (アウアウウー Sa29-pigu)
垢版 |
2026/02/05(木) 10:24:54.51ID:2XNFlf4Va
以前はデバイスドライバーのインストーラーで100MB超えてたりすると嫌だなーって感じた
たぶん、.NETでユーティリティとか作ってたんじゃないかと思う

いまはデバイスドライバーで100MBとかあっても気にならない
作りやすいツールキットでUI作ってくれていいよ
2026/02/05(木) 11:02:05.16ID:P9Ruml2FM
>>86
C#は、「自己完結型」にすると、*.exe のファイル中、または、同じ
ディレクトリの中に *.dll を同梱することになり、ユーザーに
配布するファイルのバイト数が、100MB を超えるらしいね。
2026/02/05(木) 11:04:51.55ID:KDeSa5ll0
DLLって本来はアプリ側が巨大にならないようにOSが提供する名目だったのに
依存性爆発のDLL同梱しないといけない馬鹿アプリが大量生産されて
どうしてこうなった
2026/02/05(木) 11:08:33.00ID:OGW1VDx9d
いつもMFCのことはバカにしてるけど
MFCを使って開発してる人のことを
バカにしてる訳じゃ無いんだ
判ってくれ
90デフォルトの名無しさん (アウアウウー Sa29-pigu)
垢版 |
2026/02/05(木) 12:28:12.22ID:2XNFlf4Va
>>88
DLLやランタイム同梱は歓迎だけどなー
昔は、vcruntime12入れてくれとか、.net3.5入れてくれとかあって面倒だった
依存関係まるごと全部入りでZIPを展開するだけで動かせるのは正義だよ
2026/02/05(木) 12:33:09.22ID:q0CeoxvW0
それって同一システム内に重複したDLLが散らばっているってこと?
2026/02/05(木) 12:41:18.46ID:Msz/ntZbM
そもそも、.NET の DLL って何種類くらいのバージョン(?)
があるんかいね? .Net Core とか .Net なんたら とか沢山
有って、その中で Version 数値も色々有るんだろうけども
2026/02/05(木) 13:15:51.96ID:Msz/ntZbM
>>92
例えば、
.NET
.NET Framework
.NET Core
.NET 5
.NET Standard
のようなものや
Mono
が有るらしいね。
94デフォルトの名無しさん (ワッチョイ 9d65-YiKw)
垢版 |
2026/02/05(木) 14:44:02.57ID:ZR/9hmKd0
おれネイティブはライブラリのみで使ってるわ
95デフォルトの名無しさん (ラクッペペ MM4b-SFFH)
垢版 |
2026/02/05(木) 15:40:53.78ID:NyeK8nyBM
>>91
そういうことだろね
俺もシステムフォルダに入れるより重複してでもアプリ直下にいれるのが好き
それ使ってるアプリ削除するときにゴースト化しなくて済むし
2026/02/05(木) 16:07:09.76ID:Msz/ntZbM
VSは、C/C++でも、CRT や MFC の DLL 版をリンクした場合、
*.exe の中に、どのバージョンの DLL が必要化の情報が
入っているらしい。MSVCR80.dll や MSVCP140.dll、msvcr100.dll
みたいな。だから、間違って動的リンクされる心配は無いらしい。
ただ、その DLL が見つからないと起動できない。
2026/02/05(木) 16:26:30.68ID:YN57lSUV0
今の Windows のインストーラ (MSI) は依存関係のあるコンポーネントが入って無ければ入れるような形にすることは出来る。
古い世代の人間はインストーラを全然信用しないから ZIP 版を落してきて適当なところに置くみたいなことをしちゃうんだよ。
「レジストリが汚れる」みたいなことを言ってる人がまだいる。
Windows の管理化に入ってるコンポーネントと入ってないコンポーネントが入り乱れてよくわからん環境が出来上がる。
かといって各アプリケーションのインストーラが本当にきちんと定義されてるかというとあまり信用できないのも本当なんだよな……
2026/02/05(木) 17:34:21.10ID:jOvU5Odi0
msvcr/ucrt/mfc/atlは、システムが管理しているものは、WUの対象になるから、
まさかのセキュリティホールを突かれるリスクだの、ランタイムを責任もって更新する手間だのの分がラクになる
2026/02/05(木) 17:42:20.66ID:z3qOCzHUM
もうd5
2026/02/06(金) 00:01:58.73ID:HoR8cF32M
MSVCR80.dll、MSVCR100.dll、MSVCP140.dll などを全部入れても
大した容量ではないはずなのに、OS には最初からは入ってない
のは、なんでなんだろうね?
2026/02/06(金) 07:44:13.76ID:W74qwHEv0
>>88
その発想の延長上にdockerがあり、いまやごく当たり前
2026/02/06(金) 09:50:35.84ID:Qy2h/jss0
>>100
同じ名前でも微修正された異なるものがある。
それらも含めてとなるとそこそこの分量になるし、修正が必要だったもの (問題があったもの) を残すのは良くないだろう。
過去のバージョンを際限なくメンテナンスというわけにもいかない。

本来なら最新版に合わせてアプリケーションを修正して欲しいに違いないが、古いバージョンのランタイムに依存し続ける選択をするならそれはアプリケーションかユーザーの責任でやれ (Windows は面倒を見ない) ということだと私は理解してる。
2026/02/06(金) 11:41:22.65ID:w8JkwYhH0
Microsoft Visual C++ Redistributable latest supported downloads
https://learn.microsoft.com/cpp/windows/latest-supported-vc-redist
2026/02/06(金) 13:19:22.49ID:hlWyHt0b0
>>101
>>98を否定する考え方だな
管理不可能なセキュリティーホールを散らばらせることになる
2026/02/06(金) 14:31:30.96ID:OS2ysny00
Docker の役割は環境を定義することが本筋。
依存関係の解決に使うのも用途のひとつとして間違っているとは言い切れない。
だけど Docker コンテナに古いバージョンの依存関係を閉じ込めたままでずっと使い続けているのだとしたら間違った運用だと思う。
メンテナンスしなくて良いわけではない。

依存関係がどうこう言うくらいならなるべく全部を静的リンクしたほうが良くない? という思想が現代的潮流かも。
2026/02/06(金) 14:57:28.94ID:hlWyHt0b0
確率されたシステムをよりセキュアに保つ方法を
ユーザのインストールの利便性と天秤に掛けて前者を捨てている
Docker流行ってるのは軽率だと思うよ
2026/02/06(金) 15:26:44.73ID:w8JkwYhH0
ちょっとバージョンが違うと、もう動かない、ってのが多発すると、防衛的に、そうなっちゃうのもわかるけど

そのためにテストってあるんじゃない?
と、テストをいまだ自信をもって書けない俺が思う
2026/02/06(金) 17:22:29.72ID:rc9CZ8oCM
今は動的ライブラリのメリットほとんどないよな
ストレージの節約は今や誤差レベル
バグフィクスが意味あるのは極一部でほぼ幻想、バイナリ互換を保つのは地獄
意味あるのはプラグインの機能拡張ぐらいか
2026/02/06(金) 21:34:41.16ID:wi+ohStw0
CUDAみたいなギガサイズのライブラリもあるんですよ
2026/02/06(金) 22:03:13.28ID:rLfMUQhK0
フロッピーディスクでも使ってんの?
2026/02/06(金) 22:05:19.36ID:QGk+ZWjk0
>>109
バージョン合わせるのめんどくさいね
CUDAとnvidiaドライバー
2026/02/06(金) 22:33:41.35ID:w8JkwYhH0
あのCUDAとか、LLVMとかのクソデカさは、C++のtemplate のフリーダムさのせいだと信じてる
すっごい重複があるんだろうと

もしRustになったら、コンパクトになるように書き方が強制されるので、ずいぶん小さくなりそう
それでまた、C++が馬鹿にされるんだ

ああ、いやだいやだ もちろんC++派です
2026/02/06(金) 23:34:24.28ID:lQT7eq5gM
>>108
個人的には、開発中は DLL 版でビルドしている。
リリースする時だけは、static リンク版にするつもり。
Debug の *.exe のサイズが小さくなって良い気がするから。
複雑だけど。
2026/02/06(金) 23:58:36.10ID:Qy2h/jss0
正しく書けていればそれでよいんだけど未定義を踏んでたりするのがコンパイルオプションの違いで顕現することもあるから開発中でもたまにはリリース用のビルドをしてテストを通したほうが良いよ。
工程の最後の方で問題が発見されるとしんどい。
2026/02/07(土) 15:12:38.29ID:/kjFAAWeF
構造体や配列の初期値が0を期待したコードは書くべきではない(C++でも)
2026/02/07(土) 17:15:26.87ID:hrSBdeS50
この唐突な言いっぱなし何なの?w
staticなストレージなら規格で決まってる
OSのローダーの動作としても決まっている
そんなとこ疑うのはむしろ素人
2026/02/07(土) 17:51:34.52ID:Qq1UdZ3k0
そなの? 
int data[10]{0};
char *str{nullptr};
とか入れてるけど。
2026/02/07(土) 18:12:26.00ID:U6SLdBI20
プロジェクト単位でちゃんと決めたらよろし
2026/02/08(日) 10:03:13.33ID:HUCbwVuC0
組込み系とかだとスタートアップルーチンを書く立場になりうるから言語仕様の保証を受けられない (というか自分が保証する側) ということも無いとは言えないが、保証されているときに保証を信じられないと言い始めると何も出来なくなる。

① 期待できるときには期待すべき。
② 期待できるときかどうか判断する能力がないなら判断できるように学ぶべき。学んだ上で人は間違えるものであるからレビューやテストの体制を整えるべき。
③ それができない人員と組織であるときは一律に期待しないルールを課すのが仕方ないときはあるかもしれない。
120デフォルトの名無しさん (アウアウウー Sa3b-4kCU)
垢版 |
2026/02/08(日) 11:34:26.54ID:RiV+vMvUa
struct Hoge; // 前方参照
struct Hage {
Hoge hoge;
};
struct Hoge {
int hage;
};
↑これは期待通りコンパイル出来るのですが
struct Hoge; // 前方参照
struct Hage {
Hoge hoge;
};
typedef struct _Hoge {
int hage;
} Hoge;
↑これだとエラーになります
struct _Hoge; // 前方参照
struct Hage {
struct _Hoge hoge;
};
typedef struct _Hoge {
int hage;
} Hoge;
↑こうすればコンパイルは通るのですが
typedefはそのまま残して2番目の書き方でコンパイル通すにはどう書くのが正しい?
2026/02/08(日) 12:37:36.36ID:mRtj2PDq0
>>120
3つとも通らないよ
コンパイラは何?
2026/02/08(日) 12:42:02.25ID:mRtj2PDq0
struct Hoge; // 前方参照
struct Hage {
Hoge *hoge;
};
struct Hoge {
int hage;
};
2026/02/08(日) 13:18:45.85ID:vqX/dBJ10
>>120
細々とした規則はあるけど、覚えて置くと楽な規則は「クラスの定義はそれによって大きさが確定する」ってことだ。
逆に言えば大きさを確定できないようなクラス定義を書くことはできないように規則が定められている。

その最初の例で言えば struct Hoge; で Hoge がクラスであることはわかるようになったが大きさを決めるのに必要な情報がない。
なので
struct Hage {
Hoge hoge;
};
としたときに Hage の大きさもわからない。
そういう書き方は許されないようになっている。

二番目の例も三番目の例も同じ。
2026/02/08(日) 13:20:08.05ID:vqX/dBJ10
>>120
そして型名と型名のエイリアスは違うものなので二番目の例は前方宣言と異なる定義をしたと見做される。
C++ では C に有った構造体タグの概念が消滅したのでそういう typedef の使い方は無意味。

この場合にどうして前方宣言を使いたいのかわからない。
普通にこう書けるのに。

struct Hoge {
int hage;
};
struct Hage {
Hoge hoge;
};
2026/02/08(日) 15:55:59.30ID:V+ZijclFa
訂正です
struct Hoge; // 前方参照
struct Hage {
Hoge *hoge;
};
struct Hoge {
int hage;
};
↑これは期待通りコンパイル出来るのですが
struct Hoge; // 前方参照
struct Hage {
Hoge *hoge;
};
typedef struct _Hoge {
int hage;
} Hoge;
↑これだとエラーになります
struct _Hoge; // 前方参照
struct Hage {
struct _Hoge *hoge;
};
typedef struct _Hoge {
int hage;
} Hoge;
↑こうすればコンパイルは通るのですが
typedefはそのまま残して2番目の書き方でコンパイル通すにはどう書くのが正しい?
>そして型名と型名のエイリアスは違うものなので二番目の例は前方宣言と異なる定義をしたと見做される。
>C++ では C に有った構造体タグの概念が消滅したのでそういう typedef の使い方は無意味。
別物なら仕方無いですね
>この場合にどうして前方宣言を使いたいのかわからない。
これは再現する必要最小限のコードにしたからそうなっただけで
前方宣言にしないといけなり理由が別にありますね
2026/02/08(日) 16:24:33.54ID:vqX/dBJ10
>>125
どうしても Hoge とは別に _Hoge が必要なら _Hoge のほうを別名にすればいいんじゃね?

struct Hoge; // 前方宣言
struct Hage {
Hoge *hoge;
};
typedef struct Hoge {
int hage;
} _Hoge;

あるいは typedef に強い意味があって _Hoge に意味がないなら

struct Hoge; // 前方宣言
struct Hage {
Hoge *hoge;
};
typedef struct Hoge {
int hage;
} Hoge;

とか。
C との互換性のためだけの無意味な文法だけど。
2026/02/08(日) 16:59:18.60ID:mRtj2PDq0
何が譲れない制約なのかがいまいちわからん
2026/02/08(日) 18:09:22.79ID:JfudPjcf0
>>125
意図が分からないまま発言ですが
2番目の例、1行目の「struct Hoge;」が後方と不一致だから「typedef struct _Hoge Hoge;」に直すのはどうですか
2026/02/08(日) 20:28:39.19ID:rYAAwU23a
こんなのこそAIにやらせたらいいんじゃないの?とかやってみもせず提案する(鼻ホジ)
コード貼りつけて「コンパイル通るようにして」
2026/02/08(日) 21:32:46.54ID:/MlSm7K00
クラスや構造体の前方宣言は
1. FooとBarがそれぞれBarとFooを参照する、みたいな相互参照する場合
2 Barを参照するFooを定義するヘッダファイルでBarのヘッダファイルをインクルードしたくないという
 気まぐれな要望を満たす場合
というのが動機の97%を占める(脳内調べ
2026/02/08(日) 22:17:03.38ID:/MlSm7K00
ていうかC言語における構造体のタグは構造体の前方宣言のためにあると言っても過言ではない
でC++においても構造体の前方宣言が同じ構文でできるのだから、構造体のタグは言語の精神として存続している(適当
struct Hoge;
struct Hage {
  struct Hoge* m_pHoge;
};
struct Hoge {
  struct Hage* m_pHage;
};
Hage x;
Hoge y;
x.m_pHoge = &y;
y.m_pHage = &x;
2026/02/08(日) 22:54:52.15ID:HUCbwVuC0
>>131
ヘッダを C と C++ とで共用できるようにある程度は記法を近づけておかないといけないという現実的な理由だよ。
133デフォルトの名無しさん (ワッチョイ 7bef-vmQg)
垢版 |
2026/02/09(月) 05:43:11.05ID:+STeSbOS0
>>125
蛇足だけど、
「_(アンダースコア)で始まり、大文字が続く名前」
は予約済みだからユーザー定義では使えないよ。
2026/02/09(月) 09:28:55.09ID:tiXp1BFN0
>>128
それでイケた気がする
struct _Hoge; // 前方参照
typedef struct _Hoge Hoge;
struct Hage {
Hoge *hoge;
};
typedef struct _Hoge {
int hage;
} Hoge;
135デフォルトの名無しさん (ワッチョイ fff6-4kCU)
垢版 |
2026/02/09(月) 09:39:18.08ID:tiXp1BFN0
>>130
>2.Barを参照するFooを定義するヘッダファイルでBarのヘッダファイルをインクルードしたくない
まさにそれです!
2026/02/09(月) 09:44:24.40ID:tiXp1BFN0
>>133
struct __Hoge; という名前なら予約域回避出来るんですかね
2026/02/09(月) 10:14:01.80ID:WrT4NJol0
どうせなら後ろに付けては 全部読んでないけど
2026/02/09(月) 10:14:56.49ID:oKB0cnr50
>>136
二つ以上連続するアンダースコアが含まれる (←つまり先頭以外の場合も) ような名前も予約されてる。
2026/02/09(月) 10:19:18.22ID:tiXp1BFN0
>>137
そうしますありがとう
2026/02/09(月) 10:31:05.96ID:oKB0cnr50
>>135
モジュールの導入で依存関係の階層化が改善されているけど逆に言えばそれ以前は全然駄目だった。
どうせ駄目なので小細工は徒労だと思う。
2026/02/09(月) 21:00:59.91ID:uEdDgqTV0
CやC++で意図的にアンスコ始まりの名前をつけてる奴の異教徒な匂いはすごい
そのおかげでRustのように未使用変数名をアンスコから始めないと警告が出る言語は馴染めない
2026/02/10(火) 08:51:56.22ID:zw979AryM
>>130
>気まぐれな要望を満たす場合
include しても、言語的に class CXxx; という不完全定義が
存在していなければ、無理。
2026/02/10(火) 12:12:08.03ID:c/5lMsMQ0
インクルードガードのマクロを __HOGEFUGA_H__ みたいにしているライブラリめっちゃ多いけどあれ全部未定義動作踏んでることになるのかな
144デフォルトの名無しさん (アウアウ Sa1e-0WUS)
垢版 |
2026/02/10(火) 13:44:05.25ID:0hDV+OJXa
当たらなければどうということはない
2026/02/10(火) 13:44:30.91ID:JobwbJ0F0
>>143
未定義だよ。

ただ、 C++ の予約名は「標準ライブラリが」予約していることになってる。
https://timsong-cpp.github.io/cppwp/n3337/reserved.names#1
実装上の都合とかで標準ライブラリがそういう名前を使うかもしれないからユーザが使うと衝突してワヤになるかもしれんぞというのが予約名の意味。
だから標準ライブラリやそれに付随するような OS 関連のヘッダなどで予約名を使うのは OK 。 (そのための予約)

もし問題があるとしても大抵の場合に名前の衝突を引き起こす形で顕在化してコンパイル時にわかるので未定義と言っても実態としては比較的には害は小さい。

私自身は適当に生成した乱数でインクルードガード用の長い名前を作ったりしてる。
三十文字くらいのデタラメな名前なら衝突しないだろう。
2026/02/10(火) 21:01:52.36ID:S4BHSa1sa
インクルードガードはふたつかみっつ昔ぐらいはアンスコで始まるマクロで書くパターンはものすごく多かった
まだそのころはアンスコスタートの識別子は予約語っていうのは決まってなかった、ないし決まってても周知されてなかったからな
2026/02/10(火) 21:32:36.37ID:mkXRmEfkM
アンスコというより短いマクロ名は禁止にしてるわ
prefixを必ずつけるルール
templateのテンプレートパラメータを大文字1文字にするやついるけどあれも禁止
2026/02/10(火) 21:39:26.86ID:mkXRmEfkM
ちなインクルードガードはもうpragma onceしか使ってないわ
古いコンパイラは無視、そもそもテストしないし
2026/02/10(火) 22:53:09.89ID:JobwbJ0F0
ARM にアンダースコアに関する言及を見つけた。
ちゃんとルールとして書いてあったけどその頃の主な用途は関数名のエンコード (マングル) だったみたいだ。
用途はともかく予約するというルールは 1990 年頃にはおおよそ成立していた模様。
2026/02/11(水) 06:09:40.45ID:0WLHtnMZ0
>>140
ほんそれ
静的解析にかけたら盛んに文句言われるからやめた方がええ
クラスや構造体を前方宣言したらそのクラスや構造体の使用箇所全部で言われる……

しかしBarを参照するFooを定義するヘッダファイルでBarのヘッダファイルをインクルードしないことによって
テンプレートを駆使して超高速化を果たしたBarのソースコードをFooとBarを含むライブラリの利用者に対して
隠蔽するという要望は
気まぐれとはいえある……
2026/02/11(水) 06:30:09.86ID:0WLHtnMZ0
んまーそういう場合もBarのwrapperクラスBarWrpを定義したらだいたい前方宣言無しで済むが
ていうか前方宣言でないと駄目なケースがあったような気がするが思い出せんぬスマンコ……
2026/02/12(木) 00:01:23.18ID:vN2J3PIJ0
>>149
そなた、ここにもいたんか。extern "C"を使えば共存できるんだな。
2026/02/12(木) 17:26:01.55ID:ompyTT6BM
>>143
現実的には大丈夫。
__XXXのような名前は、現代では、コンパイラがSyntax Sugerを
展開する時などに使いたいからユーザーによる使用を禁止している
だけであり、__XXXX_H__ みたいな、誰でも広く使っていた
ような名前はコンパイラは生成しない努力はされているハズ。
どういうことかというと、__XXX_1AB5E32 見たいなのは駄目という
こと。このようなものは、コンパイラが内部で使う可能性が有るから。
2026/02/20(金) 19:51:24.93ID:mvvTma+J0
だれか試した人いる?Linuxしか対応してないみたいだけど

AMDがCPUで処理するプログラムをGPU向けに移植するためのライブラリ「hipThreads」を発表 - GIGAZINE
2026年02月20日 15時43分
https://gigazine.net/news/20260220-amd-hipthreads/
AMDがCPUで処理することを前提に書かれたC++コードをAMD製GPUで実行できるように移植できるC++スタイル並列処理ライブラリ「hipThreads」を発表しました。
155デフォルトの名無しさん (ワッチョイ 3752-DngD)
垢版 |
2026/02/20(金) 22:04:11.62ID:Jw2pgDfG0
サンプル見たら std::thread を hip::thread に書き換えるだけでいいみたいだ すごいね!
まあCPU前提のコードをGPUで実行したら遅くなりそうだけども、、、
2026/02/20(金) 22:13:04.13ID:+7x9lXF30
OpenMPみたいにどうーコンパイルされるか意識しながら書いたら
良いのでは(適当
2026/02/20(金) 22:32:58.70ID:7f1gS3Gi0
どれくらい速くなるのか知りたいね
2026/02/21(土) 07:37:19.60ID:V/bO66F30
CUDA使ったことあるならわかるけどCPU向けのロジックで実行しても思ったほど性能でないのは目に見えてる
GPU使いたい人は性能が欲しいわけ
CPUとの共通化なんて二の次
2026/02/21(土) 07:49:16.58ID:mud/uCXSr
まずはCPUでテストしたいしね ゆくゆくはGPUだのFPGAだのにオフロードするとして

あと、ヒネってないC++なら、AIに頼みやすかったりとかするんでは
数学に強いAIとか居るし
2026/02/21(土) 10:15:41.38ID:ftaqCpnX0
CPUではループするような場面を
GPUやFPGAは全部展開して並列して一気に計算終わらすイメージ
そこまで考慮してコンパイルしてくれるなら良いけど
あらかじめ意識して描いておかないといけないのなら
最初からGPUやFPGA用に描いた方が速いという人もそれなりに居るだろう
2026/02/21(土) 10:29:10.51ID:I/qCFaZg0
既存のプログラムが楽にちょっと良くなる (可能性がある) というのが肝心なんだろ。
GPU に任せてたいして高速にならなかったとしても GPU に任せた分だけ CPU が空くのが有り難いということもあるかもしれんし。
2026/02/21(土) 11:17:40.71ID:u2uo9vOXd
ドワンゴがFPGA創るって話あった気がするけど
あれどうなったん
2026/02/21(土) 17:41:29.78ID:s4F75T7K0
>>162
公式な発表をざっと検索したけどここ十年くらいは動きが無いっぽいので自然消滅したか部分的に色々なプロジェクトに吸収されるとかで落ち着いたくらいの感じじゃないのかな。
公式発表がない以上は中の人じゃないと状況はわからん。
164デフォルトの名無しさん (ワッチョイ 9f02-pwlK)
垢版 |
2026/02/21(土) 17:45:31.81ID:3uyLuZPO0
cudaでスレッドの足並み揃わなくなる
再帰呼び出しとかやると劇的に遅くなる
2026/02/21(土) 18:50:07.50ID:14g0k3qq0
>>164
cudasynchronyzeとか、
ちゃんと考えないから
2026/02/22(日) 01:52:17.87ID:Aftphswla
そうかGPUで今迄CPUで実行してたコードを動かすと速くなるのか!ピコーンひらめいた!!
もうCPU消してGPUだけ残してそれをCPUにしたらいいんじゃね?
2026/02/22(日) 08:32:21.42ID:EXCtdtEM0
中学生レベルのウイット能力
168デフォルトの名無しさん (ワッチョイ 8ada-xArS)
垢版 |
2026/02/22(日) 10:08:42.81ID:ilaTVlij0
CPUは汎用だからな
GPUにはそれができない
2026/02/22(日) 11:02:18.91ID:EXCtdtEM0
>>168
汎用とか知ったかかましてますなぁ?
汎用計算はとっくにGPUで可能
むしろGPGPUなんて当たり前すぎて死語になってる
単純に今のGPUはCPUにホストされる前提のデバイスだからCPUなしには成り立たない
2026/02/22(日) 11:22:29.00ID:3hDav/kpa
>>166
g/GPU/FPGA/s
改変してるが
>そうかFPGAで今迄CPUで実行してたコードを動かすと速くなるのか!ピコーンひらめいた!!
>もうCPU消してFPGAだけ残してそれをCPUにしたらいいんじゃね?
これはネラーより頭の良い人達がIPで何十年も前に実現してる
171デフォルトの名無しさん (ワッチョイ 8ada-xArS)
垢版 |
2026/02/22(日) 11:36:06.71ID:ilaTVlij0
>>169
計算しか取り柄の無いってわからんの?
CPUって計算以外もこなすからPCやスマホで役に立つ
2026/02/22(日) 13:55:23.88ID:EXCtdtEM0
>>171
汎用の説明になってないし
むしろ現代の標準的なコンピューターシステムに特化した機能を持っているのがCPU
言葉間違えましたで謝れば終わるのに愚かなやつ
2026/02/22(日) 14:01:28.74ID:8JYo9Wc10
iGPUのほうがこういう仕組みと相性良さそうに思えるがそうでもないのかな
2026/02/22(日) 14:52:04.69ID:qRehUlpyM
GPUの「Pixel Shader」というものを調べていたことが有るけど、
元々はテクスチャの各点(Texel)のカラー値を計算で求めるための
ものだったようだけど、それを汎用計算用に使うテクニックが
生み出されていた。
また、GPUはコア数が多いが、必ずしも各コアが独立して計算
できるわけではなく、まず、コードはあるブロックに属する
全コアで共通になっていて、if 文のようなものは、
条件に合っているコアだけが実行し、合ってないコアは、
何もせずに停止、といような仕組みになっているらしかった。
だから、if 文が有ると、例えばコアの半分くらいは実行を停止
しているような状態になるらしい。
再帰関数なども掛けるとのことだったが、どういう風に実行されるのは、
個人的にはまだちゃんと理解してない。
175デフォルトの名無しさん (ワッチョイ ce01-Z1/M)
垢版 |
2026/02/22(日) 15:23:54.87ID:Ep5H4V290
グラフィックにしろGPGPUにしろ大抵はメモリ帯域がネックになる
DDR5-6400でも51.2 GB/s x 2ch≒102GB/sとかで、
128bit GDDR6のRTX3050でも220GB/sとかだから基本iGPUは敵わない
コンピュートバウンドだとしてもそれはそれでdGPUに敵わない

dGPUのVRAMを超えるサイズのLLMを動かすケースとかは知らんけど
「iGPUとメインメモリを使ったGPGPU」は基本手間の割に性能は出ない印象
176デフォルトの名無しさん (ワッチョイ 96a5-pFk+)
垢版 |
2026/02/22(日) 15:57:35.96ID:fvh4YgMg0
CUDAの方のthrustみたいなもんだろ。saxpyみたいなのなら変更無しでそのまま高速化できるだろうけど
2026/02/22(日) 17:12:34.09ID:8JYo9Wc10
20年以上前にハイエンドGPUでしか最高画質FHDで遊べなかったハーフライフ2が現世代のiGPUなら最高画質4Kで快適に動くようになってる
178デフォルトの名無しさん (ワッチョイ ce01-Z1/M)
垢版 |
2026/02/22(日) 22:13:04.10ID:Ep5H4V290
メモリ帯域で言うと今のDDR5x2chの102GB/sに対して
2007年のGeForce 8800GTXが86GB/s、8800Ultraが103GB/sだから、
その頃のハイエンドくらいの性能は出るってことか。
(FLOPSは400GFLOPS未満くらいで、Alder Lake(12世代)のCorei最下位でクリアしてる)

今のiGPUすげーとも思うけど、どっちかというと20万円以下で
19年未来のiGPUと勝負できた当時のハイエンドすげーとも思う。
2026/02/23(月) 01:20:29.69ID:VeydFs230
ハーフライフ2は2004年リリースだけど新世代GPUが登場した時などにミニアップデートされ続けている
iGPUの性能向上だけではなく、22年間の保守でハーフライフ2そのものも軽量化・最適化されてきた結果だろう
最新のアップデートは2025年7月24日
AI需要によるメモリ高騰で新世代GPUが当分出ないようならアップデートも当分ないんじゃないかな
2026/02/23(月) 02:25:47.83ID:q8RdMOHeM
iGPUって、CPU内臓のGPUの事全般を言っているのかな?
AMD製のCPU内臓のGPUも、Intel製CPU内臓のGPUも、世代を問わず
全部まとめて iGPU ってことで合ってるの?
2026/02/23(月) 02:28:58.00ID:VeydFs230
消火器と消化器と小火器はぜんぜんちがう別のもの
182デフォルトの名無しさん (ワッチョイ a609-xArS)
垢版 |
2026/02/23(月) 09:44:57.81ID:6nUKEUC70
命令の実行の仕組みが全く別物なんだし
GPUがCPUの完全上位互換にはなれないんだからな
183デフォルトの名無しさん (ワイーワ2 FF7a-1TjL)
垢版 |
2026/02/23(月) 10:37:38.61ID:HoLZBWNFF
>>174
shaderはそもそも行列演算の塊だから「色の計算」以外に使えて当然だし
使えるものは使わないともったいない(決して「間違った使い方」ではない)
ループは苦手だと思う
2026/02/23(月) 12:20:51.92ID:8YxSPIrH0
ものすごく簡単に言うなら GPU は同じ計算を異なるデータに対して大量に並列処理するような用途のために設計されてる。
グラフィクスを効果的に表現するためにはそれが必要だったからだ。
しかし日常的に必要な計算はある処理を終えてから次の処理をするという順序関係があるのが普通だし、そういう処理では GPU は使い物にならない。
CPU を主体にしつつ並列計算が効果的なところでは GPU に任せるという構成が普通ということになる。

普通は GPU に任せるにしてもそもそもどこを GPU に割り当てると効果的なのかを検討するところから面倒なんだよ。
少し効果があるかもしれないという程度のために手間をかけるのも面倒だしな。
>>154 は「スレッドを使ってる箇所は (効果的というほどでないかもしれないが) ちょっとでも GPU で出来へんか?」という手軽な導入がキモなんだろ。
効果があることがわかったならガッツリとチューニングするのはそれからでもいい。
2026/02/23(月) 13:04:36.30ID:55PnKQ2NM
cudaでいいから
c++の複雑さは持ち込まないのが吉
186デフォルトの名無しさん (アウアウ Sa7e-iZCc)
垢版 |
2026/02/23(月) 14:13:49.88ID:BEjsJ4Cna
汎用処理をGPUにやらせるより、CPUの超省電力コアのほうがまし
187デフォルトの名無しさん (スフッ Sd94-RhiN)
垢版 |
2026/02/23(月) 14:34:07.65ID:zDq4dyP7d
SoCが流行り
2026/02/23(月) 14:49:42.48ID:FZZ9U96H0
SoCが今頃流行りだした地方があるのにびっくり
2026/02/23(月) 17:07:38.05ID:8CvTiL8f0
行列計算は行a_i_j (j=1..N)と列b_i_j (i=1..N)の積和の繰り返しで
多分これを同じブロックに属する複数のコアで並列計算するんだけんども
a_1_1、a_1_2が異なる値かb_1_1、b_2_1が異なる値だったりしたら
積の演算の中で桁上がりがtrueのコアとfalseのコアが混在して
if文の条件が合うコアと合わないコアが混在して計算を完遂できないのでは
とそこはかとなく疑問が(キリ
2026/02/23(月) 17:34:00.83ID:8CvTiL8f0
GPUでの計算は例えばこんな風に進行するらし
https://at-sushi.com/pukiwiki/index.php?Thought%20GPGPU%20%A4%C7%B5%D5%B9%D4%CE%F3%A4%CE%B7%D7%BB%BB
個々のコアはチューリングマシンていやーチューリングマシンなので汎用やが
こういう風に計算を組み立てないと1つのブロックで動作を完遂するのが1コアとかになって並列性が生かせんぬ
ていうかコアのshared memoryやキャッシュメモリは少なく(数MBぐらい
ホストCPUとGPUボード上のVRAM間のデータ転送もタダではないので
GPUをデータ転送計画と計算手順を示す前から汎用とみなすことは机上の空論……
2026/02/24(火) 02:38:57.46ID:npT981duM
GPUの「Pixel Shader」の場合に限定した話だと、あるブロックに属する32個のコアが、1つのコードを共有し、
if ( a[i] > 5 ) { (処理); }
というコードを32個のコアが、それぞれのコア番号「i」に対して実行しようとする。
a[0] は、10 だから実行、a[1] は、3 だから非実行、・・・
のように、それぞれのコアで、実行するか実行しないかが分かれる。
それで、実行するコアがその部分を実行している間は、実行しないコアは、完全にその場で停止している。
そして、(処理); の部分の実行が完了すると、全てのコアの IP(命令ポインタ、PC) が if ブロックの
次の行へと進むようになっている。
そのようにして、「IP」は全てのコアで共通して進められるが、上記の
2026/02/24(火) 02:40:50.92ID:npT981duM
>>191
そのようにして「IP」は全てのコアで共通して進められるが、上記のように、
あるコアは実行し、あるコアは実行しない、というような事になっている。
これは、通常の x86/x64 のような汎用 CPU の、マルチコア(マルチスレッド)とは全く
異なる処理方法である。
2026/02/24(火) 02:45:46.86ID:npT981duM
>>192
厳密に言うと、if の条件式を満たさないために「実行しないコア」も、その場で停止している訳ではなく、
if ブロックにおいて「IP」 は、実行するコアと全く同様に 1命令ずつ進んでいくのだろう。
しかし、そのコアにおいては「命令を実行するフラグ」が「0」になっているので、命令の場所に IP
が来ても、無視して処理しない、ということになっているのだと推定される。
x86/x64 の SIMD 命令のパックド命令において、BIT フラグが 1 になっている要素だけを add したり、
mul したりする命令と良く似ている。
2026/02/24(火) 11:14:20.81ID:kCIuJLLLa
>>190
Thought GPGPU で逆行列の計算
「GPUでの計算は例えばこんな風に進行する」とはちょっと話が違うんじゃないか
195デフォルトの名無しさん (ワッチョイ c7d6-xArS)
垢版 |
2026/02/24(火) 11:34:17.31ID:kg6I4yzW0
行列計算用の専用の枠があって
そこに数値突っ込めば、ハードウエアで行列計算して返してくれるっていうのの集合体でしょ
ハードウエア計算なんだからどうやったってソフトウエアと同じ汎用性は持ちえない
2026/02/24(火) 11:48:43.35ID:TQYsyvkaM
>>194
なんでこのページを貼り付けたのか謎すぎるよな
別にGPUの動きなんて何も説明してない
197デフォルトの名無しさん (ワッチョイ b8ae-iZCc)
垢版 |
2026/02/24(火) 11:50:40.87ID:PyiHuWdp0
CMakeでVisual Studioのソリューションも生成できてすごいと思ってたんだけど
CMakeLists.txtにset(CMAKE_CXX_STANDARD 17) とか set(CMAKE_CXX_FLAGS_RELEASE "/MT") 書いてもソリューション設定に反映されないじゃん
include_directories(include/win32) とか add_definitions(-D_UNICODE) 反映される設定もある
なんなのこれ? ポンコツ?
2026/02/24(火) 11:51:09.03ID:TQYsyvkaM
NvidiaとAMDでも実装方法違うからな
似てるけど一概にこうとは言えない
2026/02/24(火) 12:41:46.86ID:UR2wWNoS0
>>197
しばらくはModulesをgrepするようにしたほうがいい
最近CMake使ってないけど、俺の時はそうした 大した量でもないので
どうしてこうなってんだろ? と思うようなことがわかったりわからなかったり

ポンコツなのは、まあそうかなと内心思う これは使えるポンコツだ
2026/02/24(火) 12:58:27.91ID:9uqtqPgz0
CMake は autotools よりマシではあるだろ。
綺麗に整理しようとしても場当たり的な処理も必要な現実があるから、現実のほうを変えられない以上はどうにもならない。
現実の道具はだいたい汚いもんだ。
2026/02/24(火) 13:06:34.08ID:RgaUAetIM
>>195
GPU の Pixel Shader は、C言語に似た言語でプログラミングできるから、汎用性はある。
202デフォルトの名無しさん (ワッチョイ b8ae-iZCc)
垢版 |
2026/02/24(火) 13:42:43.62ID:PyiHuWdp0
CMakeで .sln 作って MSBuild コマンドでビルドしてたんだけど Makefile に戻ることにするよ
2026/02/24(火) 21:58:32.57ID:dOU65tTU0
CMakeは汚すぎるのでMesonに乗り換えた方がいいよ
2026/02/24(火) 22:12:02.61ID:jeK3cIDS0
mesonはmsbuild向けにはおすすめしない
複数configuration持てないから
xmakeのほうがよい
2026/02/24(火) 22:15:55.66ID:xlQkJLJS0
ビルドツールが乱立し始めたので
改めてautotoolsが良いと
俺は思ってるんだけどなぁ
2026/02/25(水) 07:31:32.45ID:NEmOE5Re0
老人にはそれでいいんじゃない
2026/02/25(水) 13:58:27.23ID:9g1YRgVnM
>>205
autotools は難しい印象がある。
2026/02/25(水) 14:51:44.92ID:7MpbV45r0
autotoolsは情報がウェブ上に多数あるので良いよ
スケルトンプロジェクトを生成するシェルスクリプト書いとくと捗る
2026/02/25(水) 15:16:06.49ID:RsqT4PDPM
githubでいろんなプロジェクト見るけどautotools使ってるやつなんか長らく見たことないわ
ここの住民は化石かなんかか
2026/02/25(水) 17:18:11.09ID:8lHGx4YK0
対象アーキテクチャが広いなら Autotools しか選択肢がない。
逆に言えば Linux と mac と Windows くらいだけサポートできれば上等だろうみたいに割り切るなら autotools は無駄に複雑なだけでとりたてて利点はないな。
2026/02/25(水) 19:06:00.47ID:7MpbV45r0
M4言語なんて謎言語素敵すぎやん?
2026/02/25(水) 19:25:59.32ID:GFjzhQH30
C++erならbjam使えよ()
2026/02/25(水) 23:16:11.91ID:Er07XCS00
autotoolsのために今どきPerlなんか入れたくない
複雑ならSConsで単純ならimakeでxmkmfすれば良いんだ
2026/02/26(木) 00:04:24.31ID:Aq9Ob8vt0
PerlはGit for Windowと一緒にインストールされるやつを使えばok
2026/02/26(木) 01:06:45.87ID:60+3tnP7M
BJ Stroustrup 氏って、長年、ウォールストリートかどっかの金融マンしていてそれが収入源なんだって。
だから言っている事が数学的に頓珍漢なことが有るのか。
納得。
2026/02/26(木) 01:11:31.56ID:60+3tnP7M
>>215
「ストラウストラップ氏は、長年金融大手の**モルガン・スタンレー(Morgan Stanley)**に勤務しています。
役職: マネジング・ディレクター(Managing Director)およびテクノロジー部門のフェロー。
ウォール街の大手金融機関のシニアエグゼクティブ」
2026/02/26(木) 01:33:43.68ID:60+3tnP7M
autotools は、Unix の非互換性を採るための、ほぼ Unix 特化のツールというイメージだな。
$ ./configure
# make
みたいなお約束になっていて、基本からして 前提。
Unix 互換OS だと各種インタプリタがインストール済みであることを仮定できるからそうなってるし、
ほぼ #include するヘッダファイルのマクロや関数郡の存在チェックや互換性チェックを主な目的に
しているような印象が有る。
しかも、出来上がったツールのコマンドラインオプションで動的に修正せずに、
configure スクリプトのコマンドラインを帰ることで、
makefile 自体を書き換えて、コンパイル段階で、別のバイナリを作れるようにC言語のマクロを変更する
ような仕組みになっている。
これは、C コンパイラがあらゆる環境でインストール済みであることを前提にした仕組みであり、
Unix 環境の前提に強く依存している。
2026/02/26(木) 01:35:03.28ID:60+3tnP7M
>>217
誤: 関数郡
正: 関数群
2026/02/26(木) 06:14:04.38ID:fttEQeAW0
また変なのが住みついたなあ
お前もコテハンつけろよ
2026/02/26(木) 07:03:21.62ID:NJOyhT0b0
autotoolsなんか21世紀に採用するようなもんじゃないだろ
2026/02/26(木) 08:17:16.82ID:CAp2ADca0
>>220
21世紀に採用するもんじゃないようなアーキテクチャがたくさんあってそういう環境でも使えなきゃならないから Autotools なんだよ。
現実は非情である。
2026/02/26(木) 10:30:48.48ID:YP16Qqa+0
UNIXを覚え始めた頃にだいたいトラウマなるパターンで
覚えると便利なもんだよ
223デフォルトの名無しさん (アウアウキー Sa18-iZCc)
垢版 |
2026/02/26(木) 10:38:57.64ID:ljNJFZcga
ごめん
CMakeLists.txtにset(CMAKE_CXX_FLAGS_RELEASE "/MT") を書いても .sln に反映されない原因が分かった

C++ ではなく C で書かれたものが 1つだけ混ざってたんだ
当たり前だけど、Cプロジェクトの場合は CMAKE_C_FLAGS_RELEASE を使わなきゃいけなかった💦
2026/02/26(木) 16:16:57.54ID:Uax0VAY3H
>>211
sendmail.cfのやつか?
それならルール理解すれば簡単
2026/02/26(木) 20:24:47.08ID:DphmPkE+0
>>215
そうなんだ
Stroustrupは天才だよな
2026/02/26(木) 20:55:42.07ID:xEadvgjw0
最初templateの文法見たとき冗長すぎるだろと思ったけど、ここまで言語が発展したんでそこだけみれば慧眼の持ち主と思ってる
2026/02/28(土) 09:25:52.34ID:TDhNLEPTa
「発展」ェー
2026/02/28(土) 10:20:03.52ID:sXyZkw1+0
うっかりチューリング完全になっちゃったテヘ
2026/02/28(土) 21:53:02.36ID:KOlHKMv00
>>194
>>196
そのリンクは創造で貼ったわサーセン;;;;;
GPGPUでググったら創造の斜め上の面倒くささやったわ(できあいのライブラリは使わないものとする
https://speakerdeck.com/primenumber/puroguramuwogao-su-hua-suruhua-ii-gpgpubian
行列の積ですら何も考えずに書いたらCPUより遅いという
しかしかんばれば6000倍の高速化というのは魅力……
230デフォルトの名無しさん (ワッチョイ 27db-bbb7)
垢版 |
2026/03/01(日) 09:11:17.17ID:QurfzvSr0
ラプラス変換とか理解できる頭じゃないとな
2026/03/19(木) 13:24:33.58ID:OW6NEtvkM
Xでは嫌がらせでC++で検索できないが、FaceBook だと「C, C++ Projects and tasks」というグループに
メンバーが56.6万人いる。Rust は、最大のグループの「Rust Developers」でも、1.1万人しかいない。
2026/03/19(木) 15:35:52.85ID:uMbiE9EB0
嫌がらせですか
2026/03/19(木) 18:06:18.21ID:UR+Iiml10
むしろ C++ と名付けたやつが嫌がらせだろ。
234デフォルトの名無しさん (ワッチョイ 47fe-0zda)
垢版 |
2026/03/19(木) 18:39:19.70ID:eWRiknk60
昔やってたゲームに「****」って曲があったんだけどタイトルのせいで全然検索に引っかからないの思い出した
2026/03/20(金) 01:06:25.94ID:cK3UAy7SM
いいこちゃんばっかりで、わざと検索できなくしていることが理解できないんだね。
2026/03/20(金) 01:13:54.78ID:TSAVJgdb0
C++が名付けられた時点でWeb検索なんて無かっただろ
MS-DOSはファイル名に+が使えなかったのでアンチDOSな意図はあったかもしれないが、結果拡張子は乱立したな
2026/03/20(金) 01:15:46.68ID:cK3UAy7SM
C++ の方がわざとやっているのではなく、X の方が検索できないのをわざと放置しているんだよ。
直そうと思えば直せるのに直してない。
2026/03/20(金) 01:21:23.15ID:TSAVJgdb0
そっちか。>>233-234に引きずられたようだすまんな
239デフォルトの名無しさん (JP 0H63-sFF2)
垢版 |
2026/03/20(金) 13:11:02.01ID:iXoBkJ/YH
C/C++についてならPHPが出た頃に一気に検索精度落ちた気がする
2026/03/20(金) 18:04:57.02ID:sEnh3i/SM
>>239
Googleの場合、検索窓に「C」「C++」とかも一緒に入れていると PHP と混同せずに検索できるよね。
2026/03/20(金) 19:26:18.69ID:2s9p7rm9a
そもそもX(旧Twitter)の検索は昔からいまひとつだったのが
ここ最近のアプデでガチでまるで使えない状態になってるのだ
242デフォルトの名無しさん (ワッチョイ b5cd-2zvD)
垢版 |
2026/03/21(土) 00:43:13.05ID:Tywu3RMI0
Xで何を期待してc++で検索するん?
その発想が謎すぎる
2026/03/21(土) 01:06:03.79ID:6lzvvI/BM
>>242
どのように使われてるかの調査。
2026/03/21(土) 01:12:17.64ID:npR0dtyV0
あの肥溜めで何の調査?
2026/03/21(土) 10:31:43.57ID:od9qWUfrM
>>244
匿名性掲示板よりかなりちゃんとしてる。ほとんど誹謗中傷も無いし。
2026/03/24(火) 12:08:59.14ID:bF1kMWlt0
247デフォルトの名無しさん (ワッチョイ 9a6a-8mSL)
垢版 |
2026/03/28(土) 20:16:21.04ID:6BxCcDUv0
相談室もいまやAI()のほうが使い勝手いいからなあ
すぐに返ってくるし、コードも書いてくれる
もちろん間違っている場合も多いが、それはここも変わらん
248デフォルトの名無しさん (ワッチョイ cafb-j+jh)
垢版 |
2026/03/28(土) 21:59:48.76ID:KqDsCgo40
いままではGoogleで検索してStackoverflowや個人開発者のブログを読んで回って解決策やサンプルコード探してたのに
いまはGoogle検索の先頭にAIの回答やサンプルコードが出てくるんだよね
すごい時代になったもんだ
2026/03/29(日) 08:14:13.45ID:Tqn250KaM
度忘れを検索する程度なら、だいたい当ててくるんだよな
「あーそれそれ、それでいいわ」程度のことなら、あのおまけのAIでいける

俺の愚問に毎度大量に電気喰ってるような気がしないでもないがw
250デフォルトの名無しさん (ワッチョイ 9325-ASpQ)
垢版 |
2026/03/29(日) 11:50:30.81ID:qGldwEbX0
AIは参考にする為にこのスレ見てるかも
2026/03/29(日) 13:34:01.27ID:aLQuosVy0
ロクな育ち方しなそうで草
252デフォルトの名無しさん (ブーイモ MM4b-igkI)
垢版 |
2026/03/29(日) 14:00:17.27ID:3Jc2pBQrM
今のところc++をAIに書かせたことないけどメモリオーダーとか理解して安全なロックフリー実装とかできんのかな
他言語でもマイクロオプティマイズに関してはAIは弱い印象
余裕でAIにダメ出ししてるわ
2026/03/29(日) 14:04:21.38ID:qtJ5xSDB0
並列プログラミングの微妙なニュアンスを言葉にして伝えるぐらいならコード書いたほうが早くね…?
AIにはデバッグのほうを手伝ってもらえば
254デフォルトの名無しさん (ブーイモ MM4b-igkI)
垢版 |
2026/03/29(日) 14:23:48.17ID:3Jc2pBQrM
>>253
それは並列に限らずどの領域でも言えるだろ
少なくともおれよりAIの方がコーディングスピードは上だから任せられるなら任せたい
あと網羅性の点でもAIの目聡さは評価できる
おれならテストしてようやく気づくような例外ケースも最初から考慮にいれていることが多い
2026/03/29(日) 14:47:18.40ID:Tqn250KaM
生ポを使うなって指示したらだめなんか
2026/03/29(日) 15:44:21.70ID:QigkLd7x0
楽しいプログラミングがAIに奪われ、苦しいデバッグが人間に押し付けられている現実
AI導入で品質維持のコストは増える
AI企業経営者は、裸の王様に透明な服を売りつける仕立て屋の能力が高い
257デフォルトの名無しさん (ワッチョイ 5b09-igkI)
垢版 |
2026/03/29(日) 17:22:31.91ID:ogom/qKE0
意味不明
なぜ人がやるより品質維持のコストが増える?
素人がバイブコーディングする話とプロがAI使う話をごっちゃにしてるだろ
2026/03/29(日) 17:29:43.33ID:zNJVhBJrM
せめて売りつける相手は女王様にしてほしぃ
2026/03/29(日) 17:51:24.67ID:QigkLd7x0
>>257
プロと素人の違いは給料の有無でしかないから、プロがいるとコストが大きくなってしまう現実
2026/03/29(日) 18:45:22.84ID:QigkLd7x0
AIを使うと頭が悪くなる?「脳の疲弊」を防いでより賢くなるための正しい付き合い方 | Forbes JAPAN 公式サイト(フォーブス ジャパン)
https://forbesjapan.com/articles/detail/94246
261デフォルトの名無しさん (ワッチョイ 5b09-igkI)
垢版 |
2026/03/29(日) 19:35:26.95ID:ogom/qKE0
>>259
意味不明連発だな

> AI導入で品質維持のコストは増える

これの言い訳になってない
その非論理的な思考方法ではソフトウェア開発無理だぞ
262デフォルトの名無しさん (アウアウウー Sa05-H1dW)
垢版 |
2026/03/29(日) 19:38:26.75ID:60xioQbFa
AI「書き書き〜。これが私の考えたコードです!次は何を実装します?」
ボク「ここはおかしいやろ。こうしないと不味い。」
AI「その指摘、まさに正論です!鋭いですね。」
ボク(うるせー黙れわかってたなら最初からやっとけ電気の無駄遣いすんなカス)
2026/03/29(日) 19:55:26.38ID:QigkLd7x0
【衝撃】AIはまだ生産性を上げていない?エコノミスト誌が暴く「AI革命」の不都合な真実|奥山真司の地政学「アメリカ通信」 - YouTube
https://www.youtube.com/watch?v=JKuzhoRqbBw
2026/03/30(月) 01:09:19.82ID:n7xZBPS2M
まだ移行期だからな なんだかんだあるさ

当面の課題は…RAMの高騰だわw
265デフォルトの名無しさん (ワッチョイ b11d-Cl87)
垢版 |
2026/03/30(月) 01:51:32.74ID:kBCZPTyr0
人間「○○するコードを書いたのでデバッグよろ、改善点などあれば挙げて」
AI「かしこまりました」

みたいな関係じゃないとだめだなんだけど、AIに学習させるために手取り足取り教える羽目になっている
金払ってAIに教育してるお人よしなバカが真っ先にリストラされる
266デフォルトの名無しさん (ワッチョイ 5b09-igkI)
垢版 |
2026/03/30(月) 02:46:22.35ID:BRBLO8xy0
そんなわけない
AI使ってないやつはそもそも論外
AIを使いたおして再現性のある開発手法を確立したやつが勝者
267デフォルトの名無しさん (アウアウウー Sa05-H1dW)
垢版 |
2026/03/30(月) 04:50:58.88ID:zCsuxdbqa
AI、戦争止めて来い
2026/03/30(月) 04:55:59.54ID:HHKxr0KtM
AIは、メモリー解放に関して危険なコードを書くことが多いようだ。
Win32 の場合、他のEXEのリソースを閲覧するために LoadLibraryEx() で HANDLE hModule を取得し、
リソースの構造体取得した場合、ID に整数IDと文字列 ID を共通化した LPCSTR 型のような変数が使われていることが有る。
それは、FreeLibrary() を呼び出すまでだけ有効な筈だが、FreeLibrary() を読んだ後も参照してしまうコードを
出してきたことが有る。
以前も、Shell API のパスの IDL で、先頭ではなく中間的な部分だけを配列変数に入れてしまい、
その変数のアドレスに対して解放関数を呼び出しているコードを書いてきた。
そのコードでは中間的な部分のアドレスも必要であはったが、開放するのは先頭アドレスでなくてはならない。
だから面倒でも両方のアドレスを記録しておく必要があったのだが、AI は、先頭アドレスを記憶せず、
中間的なドレスだけを記録してしまった。そして、最後に中間的なアドレスの方をメモリー解放関数に渡していた。
2026/03/30(月) 04:58:19.21ID:HHKxr0KtM
>>268
誤: そのコードでは中間的な部分のアドレスも必要であはったが、開放するのは先頭アドレスでなくてはならない。
正: そのコードでは中間的な部分のアドレスも必要ではあったが、解放するのは先頭アドレスでなくてはならない。
2026/03/30(月) 05:04:45.42ID:HHKxr0KtM
>>268
前半部分についてもう少し詳しく書いておくと、
既存のリソースのIDを全て列挙するために、Win32 のリソース関連の Enum 系の関数を使い、コールバック関数の中で、
リソースID を、std::vector<XXX> のグローバル変数に push_back() していた。
列挙が済んだら時点で FreeLibrary() を実行。
その後に、そのリソースID を、グローバル変数の std::vector<XXX> から取得して利用する、
といようなコードになっていた。
2026/03/30(月) 05:16:22.96ID:HHKxr0KtM
>>270
[さらに補足]
>リソースの構造体取得した場合、ID に整数IDと文字列 ID を共通化した LPCSTR 型のような変数が使われていることが有る。
>それは、FreeLibrary() を呼び出すまでだけ有効な筈だが、FreeLibrary() を読んだ後も参照してしまうコードを
>出してきたことが有る。
とあることのために、(自分のアプリでは無い)EXEの中のある種類のリソースを入れ替えたかったのだが、
そのEXEの中の既存のリソースを全て削除してから追加する作業をする必要があった。
Update や削除している最中には、当然予想されることとして、IDが文字列IDだった場合、「文字列ID」は破壊されてしまう
可能性がある。
削除したリソースの ID だけでなく、他の文字列 ID に対してもアドレス自体が変わってしまう可能性があるため、
他の文字列IDも含めて、全体的に文字列 ID(文字列へのアドレス)が無効になってしまう可能性も考えられる。
仕様書に書いてあるかどうかは不明だが、ある種の常識としてその危険性が想定される。
AI は、そういうことも配慮が難しいようだ。
2026/03/30(月) 05:21:13.62ID:HHKxr0KtM
>>271
>とあることのために、(自分のアプリでは無い)EXEの中のある種類のリソースを入れ替えたかったのだが、
誤解を招きそうなので断っておくが、「自分のアプリでは無い」と書いたが、実際には、リソース修正用の自作アプリ
そのものではなかったが、リソースを入れ替えたかった EXE も、自分が作ったアプリ。
他の人の作った EXE のリソースを改竄しようとしたわけではない。
「リソースを変更するために作った実行中の EXE ではない」という意味で「自分のアプリでは無い」と書いてしまった。
「自分」とは「リソースを変更す作業を行うために作ったアプリのEXE」の事で書いてしまった。
また、入れ替えたかったリソースは画像関連のものであり、アプリの実行を買えるようなものではない。
2026/03/30(月) 07:42:43.98ID:ZkyeK4bI0
>>267
戦争とは人同士の頃し合いである→せや!

後のスカイ・ネットである
274デフォルトの名無しさん (ワッチョイ f1e2-H1dW)
垢版 |
2026/03/30(月) 09:25:56.98ID:5wdn67hL0
ドレス
275デフォルトの名無しさん (ワッチョイ f1e2-H1dW)
垢版 |
2026/03/30(月) 09:27:47.50ID:5wdn67hL0
>AI は、そういうことも配慮が難しいようだ。
AIはそういうことは配慮しない
2026/03/30(月) 12:12:43.44ID:djt4okOl0
>AIを使いたおして再現性のある開発手法を確立したやつが勝者

違うな
AIを使いたおして再現性のある開発手法を確立したやつを雇っていたやつが勝者
2026/03/30(月) 13:47:22.47ID:/WOjEIro0
出力量がヒトと桁違いなのでいかにこれを上手に利用するかというゲームになっている
2026/03/30(月) 15:40:11.69ID:72GWB1/f0
低性能ドローンの大群による飽和攻撃を迎撃すべく高性能な精密兵器を使う非対称戦によく似てて面白いね
279デフォルトの名無しさん (ワイーワ2 FFa3-H1dW)
垢版 |
2026/03/31(火) 11:41:01.87ID:9sTeuD0WF
DDOSの反撃には使えそう
280デフォルトの名無しさん (ワッチョイ ca25-Myo1)
垢版 |
2026/04/06(月) 08:51:41.56ID:k99Sv6HP0
cudaはC/C++使ってんだから
コンパクトで高性能を追求するなら
こっちなんだろうけど
でも現場ではPythonなんだよな
2026/04/06(月) 10:08:03.40ID:aOgsjhir0
Pythonで計算論理を記述するけど、実計算はC/C++なんでしょ 全然しらんけど
2026/04/06(月) 11:03:05.09ID:kRlsz3gh0
pythonがチヤホヤされてるのでどれどれと試したけど、
マルチスレッド処理が遅くてガッカリした記憶しかないわ
やたらpythonをほめる人の気が知れない
283デフォルトの名無しさん (ワッチョイ a9cc-qTyV)
垢版 |
2026/04/06(月) 12:04:47.48ID:oPml/pyZ0
Numpy、Pandas、PyTorchぐらいは使ってからPythonを語りな
あとJupyter notebookとかさ
使ったことないのはエンジニアとしてダサすぎる
284デフォルトの名無しさん (ワッチョイ 39e7-XPKe)
垢版 |
2026/04/06(月) 12:12:27.70ID:NfIdJS0i0
Pythonは好きだけど、それは「楽に読める・書ける」という点であって、単体の性能ではそりゃ大幅に見劣りするのは当然じゃないかと。
285デフォルトの名無しさん (ワッチョイ 86e5-rymk)
垢版 |
2026/04/06(月) 12:16:54.12ID:AlX6s9FN0
>>282
用途を間違うのがださい
2026/04/06(月) 12:35:24.40ID:kRlsz3gh0
ライブラリを使う人とライブラリを作る人で見え方がまったく違うのはしかたない
287デフォルトの名無しさん (ワッチョイ 16aa-RHh+)
垢版 |
2026/04/06(月) 13:48:09.02ID:3I9e1Dxk0
性能劣っていいならBASICがいいんだが
2026/04/06(月) 21:51:37.70ID:W+LGbPHz0
それでいいのなら、それで構わない。
2026/04/07(火) 08:45:40.77ID:wKJkoA5G0
言語の良し悪しもあるけどエコシステムが充実していることも必要だよ。
ライブラリを組み合わせるグルー言語としての性質を利用するならライブラリを導入しやすいパッケージマネージャやバンドラがまともじゃないと話にならない。
言語として BASIC が良いなら Visual Basic .NET あたりが良かろう。
2026/04/07(火) 09:30:47.10ID:BouVe5qh0
Pythonの流行した当時はUNIX互換環境でまともに使えるインタプリタ言語なんてPerlとshくらいしかなかったし
構造的に書けるだけである程度インパクトがあった
それを20年以上引きずってるだけ
2026/04/07(火) 10:13:39.47ID:chYlTkry0
Pythonの流行しだしたときに(日本だけ?)勢いがあったのはrubyだったと思う
2026/04/07(火) 10:15:03.79ID:brkQfBH60
Pythonでスクリプト組んだは良いが速度に満足できずC++11以降で書き直すことになる
293デフォルトの名無しさん (ワッチョイ a9a5-qTyV)
垢版 |
2026/04/07(火) 11:23:49.10ID:pYxxuZfJ0
>>292
c++に書き直せるレベルのしょぼいものしか作ってないって白状してるようなもの
2026/04/07(火) 12:22:43.32ID:brkQfBH60
>>293
Cやアセンブラに書き直せるレベルならOKってこと?
2026/04/07(火) 20:54:47.29ID:lXV8OABn0
リフレクションやダックタイピングを駆使しないとpythonを使いこなしてることにはならない(キリッ
みたいな宗派でしょ
296デフォルトの名無しさん (ブーイモ MMea-qTyV)
垢版 |
2026/04/07(火) 21:15:17.58ID:h0Sx7YJpM
PythonおせーからC++とは普通ならんわな
最初のチョイス間違ってる
2026/04/07(火) 21:23:34.37ID:Opzbg5Fd0
可能なら先に見積もるのが望ましいけど常にはっきりわかるというわけでもないだろう。
検証のためにプロトタイプを Python で作ることも無いとは言えないんじゃね?
Python を使ったことがないからプロトタイプ用にどれくらい適しているかは知らんけど。
2026/04/07(火) 23:41:26.35ID:3+plfwss0
perlが糞すぎて辟易してたからPython出始めの頃は感動したもんだ
2026/04/08(水) 00:42:49.66ID:9ba3ogDj0
とりあえずCythonなにそれうまいのまで読んだ
2026/04/08(水) 06:54:05.97ID:J94Rhcm50
>>296

いつも、こういうバカが出てくるな

Pythonの問題を具体的に言えないバカ
2026/04/08(水) 06:55:27.99ID:J94Rhcm50
>>297

こういう、使ってないやつにはわからんだろうが、
なんでPythonが今でも使われてるか? って話。
302デフォルトの名無しさん (ワッチョイ a956-rio7)
垢版 |
2026/04/08(水) 08:32:02.06ID:/YHKUCUx0
pythonが使われているのは良くも悪くもガバガバなのと、過去のライブラリ蓄積のおかげじゃない?
個人的にはNimの方が優れていると思うけど、惰性にはなかなか勝てない。
2026/04/08(水) 09:22:50.46ID:1nbgZ9OK0
Perlはバッファデータが文字化けしてても処理続行してくれるけど、Pythonはすぐに例外スローするので文字コード処理は不便
2026/04/08(水) 10:19:32.84ID:OZGOB4N70
>>299
発音がむずくて知られてないかも説
305デフォルトの名無しさん (ワイーワ2 FFf2-rymk)
垢版 |
2026/04/08(水) 10:55:31.17ID:ydGAkrspF
>>303
逆だよ
例外スローすることで知らん間にバグが混入するのを防止出来る
306デフォルトの名無しさん (ワッチョイ ca25-Myo1)
垢版 |
2026/04/08(水) 13:40:35.89ID:yMvtqTZu0
おまいらpythonはC++で書かれてるんだぞ
307デフォルトの名無しさん (ラクッペペ MMde-93xu)
垢版 |
2026/04/08(水) 17:21:55.08ID:QB3ESTq9M
GUIアプリはいまだC++で作ってるけど
CUIはもうPythonで作るようになったワイ
308デフォルトの名無しさん (ブーイモ MMea-qTyV)
垢版 |
2026/04/08(水) 18:34:51.99ID:tWUvF42vM
CUIって単語もう使わんよね
ジジイ味を感じる
2026/04/08(水) 18:51:48.02ID:1nbgZ9OK0
>>308
普通に使うよ
情報価値の乏しい個人の感想はプログラマー板でどうぞ
310デフォルトの名無しさん (ブーイモ MMea-qTyV)
垢版 |
2026/04/08(水) 19:14:44.60ID:tWUvF42vM
今時CLIっていうのが普通だよ
昨今のコーディングAIツールもそういう名称になってるだろ?
まさか使ってないの?
そもそも英語圏でCUIという言葉がもともとマイナー
Googleトレンドでも見てみろよ
老いて情報収集してないからそういう昔覚えた言葉にロックインされたままになってる
教えてもらったんだから感謝しな
2026/04/08(水) 19:20:30.93ID:1nbgZ9OK0
>今時CLIっていうのが普通だよ
言わないぞ
スレ違いなのでこの話題はおしまい
2026/04/08(水) 20:04:26.45ID:VY5WA6UT0
CUI と CLI は違うものだよ。
2026/04/08(水) 20:09:45.40ID:XevV17Wkr
>>305
テキトーに読み捨ててほしいんだと思う
たぶん「まともに」使ってない&そんなもんでいいんだよ派
俺もそう
2026/04/08(水) 20:15:28.16ID:VbLZ80/Ia
まあ一般的なプログラマ認識として CUI と CLI はほぼ同じもんっていう認識だわなぁ
あえて厳密にいうなら大昔の Borland の Turbo Vision でつくったようなツール(もうガチでわしらみたいな老人しか知らんか・・・)
みたいなのが CUI で、コマンドラインで標準入出力だけで動作するツールが CLI てなところかね
2026/04/08(水) 20:31:53.80ID:XevV17Wkr
tvをCUIというかはちょっと微妙…w (速攻釣られとくw
2026/04/08(水) 21:05:42.31ID:VY5WA6UT0
TUI という言葉が生まれてしまったのも状況をややこしくしてるが CUI はデザインに関係なくテキスト画面を使ったインターフェイス全般を包括する用語と解釈すべきで、 CLI も TUI も CUI の一種ではあるだろう。

Windows だと実行ファイルの中のフラグで CUI か GUI かを指定する仕組みだからそれで CUI が指定されているもの (または Windows 以外でもそれに相当するような動作をするもの) を CUI と私は認識してる。
2026/04/08(水) 21:20:53.34ID:mnPm3/Nt0
webアプリはcuiなんよね
2026/04/08(水) 21:43:40.25ID:2ds8KOmg0
TurboVisionはCUA(Common User Access)なのでは
319デフォルトの名無しさん (ワッチョイ da80-LZ/T)
垢版 |
2026/04/08(水) 21:51:49.15ID:TRN3YLbe0
curses や vi は CLI ではなくCUI だね
2026/04/08(水) 22:27:07.44ID:OZGOB4N70
カーセズでアプリ作りたかったなぁ。遠い目
2026/04/09(木) 00:28:44.12ID:FQhbxq5n0
C++の文脈でCLIと言われるとC++/CLIが先に思い浮かんでしまう
322デフォルトの名無しさん (ワッチョイ 86e5-rymk)
垢版 |
2026/04/10(金) 11:39:43.50ID:1iTYWJHM0
ほんそれ
2026/04/10(金) 13:38:12.51ID:9ybhDF05M
>>312
どう違うの?
2026/04/10(金) 14:04:35.61ID:jBjpledE0
コマンドラインはEnterキー入力で命令を送る仕組みでありテキスト対話型AIサービスも含まれる
2026/04/10(金) 16:56:36.68ID:BElqmliE0
apt, aptitude
2026/04/10(金) 18:32:17.12ID:1WGGK8010
>>310
でもサブプロセスとして呼び出してGUIとパイプで入出力を行う場合コマンドラインインターフェイスではなくない?
コンソールから起動しコンソールから入力する場合はCLIでいいけど
2026/04/10(金) 19:37:08.04ID:AC0gqo4i0
その場合はUIですらないんだからCUIも不当
単なるバックグラウンドプロセスとかサービスとかデーモンとか
328デフォルトの名無しさん (ワッチョイ a9f1-cytQ)
垢版 |
2026/04/10(金) 19:59:52.50ID:BitphDUy0
コンストラクタで引数をメンバ変数にmoveする場合

Myclass(std::string str)
:member(std::move(str)) {}

としておけばMyclass(std::string&&)は必要ないって理解で正しい?
329デフォルトの名無しさん (ブーイモ MMea-qTyV)
垢版 |
2026/04/10(金) 20:16:56.62ID:3cdhJpJvM
>>328
strのmove渡しを強制する必要なければそれでいい
330デフォルトの名無しさん (ワッチョイ 21c0-cytQ)
垢版 |
2026/04/11(土) 08:52:57.49ID:KQZClB5Q0
>>329
ありがとうございます。シグネチャ合わないのかと思っていました。
2026/04/11(土) 15:41:43.74ID:70ztjdOy0
>>328
const 参照と右辺値参照のオーバーロードでいいじゃないかな

参照渡し or 値渡し?
https://yohhoy.hatenadiary.jp/entry/20120524/p1
332デフォルトの名無しさん (ワッチョイ 53c0-ICvS)
垢版 |
2026/04/12(日) 10:50:47.20ID:bl7FxWlO0
>>331
私も最初そうだと思っていたら、chatGPTに値渡しmoveで両方カバーできると言われたんです。
2026/04/12(日) 11:23:01.26ID:LoVmVFyT0
AIの回答が正しいか自分で調べず匿名掲示板に投げて他人に調べさせる人、今後も増えそうだね
2026/04/12(日) 11:33:00.35ID:LoVmVFyT0
【危険】AI活用で絶対やってはいけない6つのNG行為!信頼を失う「ワークスロップ」の恐怖。組織での予防がこれからのAI展開のカギ - YouTube
https://www.youtube.com/watch?v=SdO9w5i0_nU
2026/04/12(日) 11:36:54.43ID:sxZphVNM0
>>328
コピー省略を適用しない素朴な解釈だと参照渡しにしたほうが効率的になる。
https://wandbox.org/permlink/9EZ9rpRBtMucnuQw

しかし C++17 以降ではコピー省略が一部の場合に必須になり、この場合はそれに該当するのでどちらでも同じになる。
https://wandbox.org/permlink/D0akhuHAh6pXHTxE
336デフォルトの名無しさん (ワッチョイ 8f20-MZRz)
垢版 |
2026/04/12(日) 11:39:54.38ID:UzEscM2D0
参照渡しってCPUとかOSによって誤作動の要因にならんの?
はっきり値渡ししたほうがよくないの?
2026/04/12(日) 12:17:10.17ID:LoVmVFyT0
ヒープで作った巨大な構造体を値渡しするとスタックサイズが
338デフォルトの名無しさん (ワッチョイ b312-8p7k)
垢版 |
2026/04/12(日) 14:26:03.93ID:nJS2m8EI0
安心欲しいならC++は使わんでよろしい
339デフォルトの名無しさん (ワッチョイ 53c0-ICvS)
垢版 |
2026/04/12(日) 22:04:04.47ID:bl7FxWlO0
>>335
ありがとうございます。論より証拠ですね。さすがはちみつさん。C++17以降ならchatGPTの指摘が正しいわけですね
2026/04/12(日) 23:28:09.56ID:JgHCvaY20
プリミティブなオブジェクトは値渡しで、それ以外はconst参照がいいってどっかで。
341デフォルトの名無しさん (ワッチョイ b30b-ICvS)
垢版 |
2026/04/13(月) 08:09:39.78ID:M+FvsmoW0
>>333
じきにAI >> 匿名掲示板になって誰も聞かなくなるから大丈夫。stack overflowすら過疎る時代
342デフォルトの名無しさん (ワッチョイ 8ff5-F5O2)
垢版 |
2026/04/13(月) 09:13:29.64ID:gldAIokn0
元々Pythonから入ったけど、今度のプロジェクト(趣味)はもっと単純だからC++でやってみようと思って始めてみら
最初は混乱したけど、慣れると関数の引数と戻り値、型を意識するんで逆にわかりやすいね。

Pythonは名称がわかりやすいから入門で概念が全然わからないうちは良いが何やってるかわからなくなるけど、.hとか別にあると設計と照合しやすい
2026/04/13(月) 09:29:24.42ID:MzRvOdFm0
>>339
ChatGPT にそこまで尋ねたなら、どうせならメカニズムまで質問すればいいだろ。
質問さえすればコピー省略についてだって説明してくれたはずだ。
正しいか正しくないかだけ判定させても応用が効かん。
理屈を理解する努力はすべき。 (結果的に理解できるかどうかは知らんけど。)

C++17 以降で一部のコピー省略が必須になったが、それ以前でも許されてはいたので最適化をあてに出来るならあてにするのが間違っているわけではない。
344デフォルトの名無しさん (ワッチョイ b337-u5Qp)
垢版 |
2026/04/13(月) 09:38:26.63ID:/tIi4JvC0
いまどきはPythonでも静的に型付けするコードを書く方が多数派じゃない? 言語仕様として強制できる点がメリットという見方はありうるが。
.h を.cppと別に管理する必要があるのは単に時代遅れなだけだよ。だから、モジュールとかが導入されたわけで。
パフォーマンスには圧倒的な差があるからそれだけでC++を使う意味はあるけど、比較のポイントはだいぶズレているような。単にPythonを使いこなせていなかっただけの人に見える。
2026/04/13(月) 10:03:47.15ID:MzRvOdFm0
インターフェイス部分と実装部分に分離するという思想は良いでしょ。
分離の方法としてヘッダを使うのは破綻してるけど。
2026/04/13(月) 10:45:40.98ID:yugc5IEmM
>>345
でもJavaのimportとかも、メンドクサイで。
347デフォルトの名無しさん (アウアウウー Sa27-nrF1)
垢版 |
2026/04/13(月) 14:18:55.10ID:gO7FNaFaa
Rust使え
2026/04/13(月) 16:21:15.67ID:nEVNoJ7h0
Delphiとか同じファイル内でインターフェイスと実装の記述が分かれているけどちょっとめんどくせえと思った
でもPythonで別れていないのを見てなげえよって思った
2026/04/13(月) 16:46:01.07ID:w7utH7RK0
1ファイルを上下分割する形だと、エディタ側に支援がないとくそめんどくさいんだよな(DelphiのIDEには一発で行き来できる操作はもちろんある)
一般的には2ファイルのほうがどのエディタでも普通に編集できて良いと思う
2026/04/13(月) 18:08:17.98ID:Yf6BeJvI0
文字列検索で重複ヒットする安易な命名こそが問題派です
2026/04/13(月) 19:31:40.88ID:V0zyTtVM0
>>344

Pythonでも静的に型付けするコードを書くとは?
2026/04/13(月) 19:38:59.87ID:w7utH7RK0
>>351
今のpythonは型のヒントを書く記法があって、処理系単体だと意味はないがmypyなどの外部ツールで静的に型チェックできる
どれぐらい使われてるかはびみょー、プロジェクトによる
353デフォルトの名無しさん (アウアウウー Sa27-nrF1)
垢版 |
2026/04/14(火) 16:04:41.35ID:F7K01gbya
実行時に違う型入ってても何も起きないね
354デフォルトの名無しさん (ワッチョイ fe43-MAME)
垢版 |
2026/04/19(日) 13:45:35.19ID:XK6T/ydF0
コーディングAIなるものが出てきたな
何やるにもハイスペックPCが必要になってついていけない
355デフォルトの名無しさん (ワッチョイ fe43-MAME)
垢版 |
2026/04/19(日) 13:47:31.44ID:XK6T/ydF0
スマホアプリでも、高スペック持ちなら猿でも作れる時代
いまだスマホすら持ってない俺様は洋ナシ
2026/04/19(日) 15:55:15.46ID:QpsqGLxbr
じき、CLI程度でよければ、軽量AIに頼める時代がくるだろ

欲しい機能をぐぐったら、だいたいドンピシャなサンプルが出てくる、みたいな感じだろ
すでに設計まで経験してる人なら、軽量AIを使いこなせる、みたいな未来を想像してる
357デフォルトの名無しさん (ワッチョイ 4b1d-imSf)
垢版 |
2026/04/19(日) 15:55:37.67ID:PEabnKj50
🍐pearというより🥶poor
358デフォルトの名無しさん (アウアウウー Sa47-AZ9P)
垢版 |
2026/04/20(月) 06:23:51.18ID:p1bOR+Kka
loopy
359デフォルトの名無しさん (ワッチョイ cf1d-WxWK)
垢版 |
2026/04/26(日) 12:49:17.79ID:bmYc5s3r0
std::equal_range()って比較の所要時間が短い場合はかえって線形検索よりも遅くならない?
360デフォルトの名無しさん (ワッチョイ 8faa-3scA)
垢版 |
2026/04/26(日) 13:23:26.66ID:sOgf2tD30
Nが小さければ線形探索で十分ってのは常識でしょ
2026/04/27(月) 11:37:58.12ID:sH2rTm4P0
自己解決した
シーケンシャルアクセスが前提のstd::listをstd::equal_range()で使おうとしたのが良くなかった
std::equal_range()の誤用を避けるために、setやmultisetのメンバー関数equal_range()をvectorにも追加しつつstd::equal_range()を非推奨にしたほうがいいのではと思った
362デフォルトの名無しさん (ワッチョイ 8ffe-3scA)
垢版 |
2026/04/27(月) 12:20:23.58ID:eqtqQcUJ0
なんだその中途半端な理解は
それはstd::listのデータ構造の問題であって、仮にメンバー関数にしても何も解決しない
2026/04/27(月) 14:23:34.50ID:sH2rTm4P0
どういう意味?
364デフォルトの名無しさん (ブーイモ MM5f-3scA)
垢版 |
2026/04/27(月) 15:59:23.55ID:B0t8e6CUM
誤用?じゃあ正しい使い方は何?
2026/04/27(月) 16:23:01.38ID:vwzVdgR/0
std::equal_rangeをlist用に特殊化するほうがいいのでは
2026/04/27(月) 18:09:57.24ID:S160pTIq0
C++20で追加されたstd::random_access_iteratorのサンプルコードのような方法でコンパイル時に警告表示できれば良さそうだけど
https://cpprefjp.github.io/reference/iterator/random_access_iterator.html
367デフォルトの名無しさん (ワッチョイ 8fdd-3scA)
垢版 |
2026/04/28(火) 14:21:20.97ID:Biw07gx10
>>365
だからさ、どう特殊化するんだよ?
std::listで二分探索がO(N)なのは不具合でもなんでもない
お前の都合はお前が解決したらいいだけでライブラリ仕様を変える発想になるのは単なるアタオカ
2026/04/28(火) 19:15:46.37ID:XTpyfiP70
>>367
話についてきてねーな
>>39は線形探索よりも遅いって言ってるんだからO(N)で済むならそれでいいじゃん
その後361以降の仕様案に対しての365なんだから元から仕様を変えるならこうするという話
369デフォルトの名無しさん (ワッチョイ 8e25-44hg)
垢版 |
2026/05/09(土) 16:40:15.75ID:QcFVtB+q0
ウィンドウを全画面にして、画面最下段に1ドットだけの行をボタンとして作成した時に
マウスカーソルを画面最下段でクリックしても、ボタンを押せないんですが、これって何かの仕様でしょうか
2026/05/09(土) 16:56:31.19ID:iDhBDlFO0
最低限OSとGUIフレームワークぐらいは書かないと誰一人としてわかる人は出てきませんよ
何なら「全画面」の意味だって複数考えられますし
371デフォルトの名無しさん (ワッチョイ 8e25-44hg)
垢版 |
2026/05/09(土) 18:24:52.22ID:QcFVtB+q0
windows11
QT creator
全画面は枠のない状態で、ボーダーレスではない、昔からあるフルスクリーンです
2026/05/09(土) 19:13:29.39ID:5Ty6Srkh0
>>369
何かの仕様か不具合か、発見者の勘違いだろうけど
全画面表示の枠の挙動か
ボタンの境界の挙動か(昔のwindowsの閉じるボタンは見た目よりもクリック判定が大きかったように)
片方だけでは再現しないのか

この辺りの調査は目前にしているあなたが一番楽しめるはずだ
拡大鏡機能や解像度の倍率設定は役に立つかもしれないし使わない方が良いのかもしれない
対岸の火事火事扱いで申し訳ない
373デフォルトの名無しさん (ワッチョイ 8e25-44hg)
垢版 |
2026/05/09(土) 20:51:28.12ID:QcFVtB+q0
QTでボーダーレスフルスクリーン呼び出しの関数を使うと、画面サイズが画面解像度と一致しないのってバグ?
2026/05/10(日) 09:44:37.29ID:Z3LCbGbAM
>>369
高さが1ドットだけだとボタンとして押す部分が存在しないと解釈されている可能性がある。
2026/05/10(日) 09:48:50.43ID:Z3LCbGbAM
>>374
もう一つの可能性としては、Windowまたは画面の最下段は、マウスのクリックが処理されないのかも知れない。
あるいは、両方の条件が重なった時に、GUIやOSのバグの様なものが出現している可能性もある。
実は、通常行われない条件にした場合、OSにはさまざまなバグが存在する。
経験豊富なプログラマーは、そういうものが沢山あることを知っているので、余りに特殊なことをした場合には
仕様書通りには動かないかも知れない、と悟っている。
376デフォルトの名無しさん (アウアウウー Sac9-IVHK)
垢版 |
2026/05/11(月) 12:21:49.68ID:83zRqP8Ma
[AAAA]B[CCCC]
([と]が枠でBが下に隠れてちょっとだけ見えてるウィンドウだとすると)
AとCはもちろんクリックしたらそのウィンドウが反応するが
Bをクリックしたとき
昔のWindowsはちゃんとBが前面に上がって来たんだが
最近のWindows(8とか10あたりから)Bがどうしてもクリック出来ず
AとかCが反応して困るわ
2026/05/11(月) 13:43:22.37ID:WWe4evK50
win11でウィンドウ最大化してるのに最上辺クリックすると別のウィンドウがアクティブになるのやめてほしい、古めのアプリで発症する
修正されたのか利用アプリが変わったからなのか最近は悩まされていない
2026/05/11(月) 14:24:31.92ID:zJYTJxL3M
>>376
最近のWindowsは見えない枠があるぞ
379デフォルトの名無しさん (JP 0H69-8bxb)
垢版 |
2026/05/13(水) 16:41:45.73ID:6j3WIRPfH
枠の外に透明の掴める部分があるけど、以前はそんなもんなくても枠をつかみやすかったし、今の方が使い見づらい
悪化してるねえ
380デフォルトの名無しさん (JP 0H69-8bxb)
垢版 |
2026/05/13(水) 16:59:47.04ID:6j3WIRPfH
アンスロピック、評判は最悪の企業だけど、claudecodeの性能は他を圧倒してるなぁ
2026/05/13(水) 19:03:07.93ID:gg3G33/o0
>>380
評判は最悪とは?
具体的に
2026/05/14(木) 07:42:27.00ID:JA2sqImQM
ニュースみない自慢か?
383デフォルトの名無しさん (ワッチョイ bd7a-DFFR)
垢版 |
2026/05/14(木) 10:34:42.05ID:OY5EyHSD0
俺もその「最悪な評判」を聞いたことないので聞きたい
384デフォルトの名無しさん (ワッチョイ 6d5a-yWhV)
垢版 |
2026/05/14(木) 16:47:01.43ID:kXfWcw4i0
ニュースでてくるだろ
調べろよ無能
385デフォルトの名無しさん (ワッチョイ 6de1-EAS5)
垢版 |
2026/05/14(木) 17:28:11.01ID:d9Ydvw3d0
>>384
AIの機能制限・アクセス制限のこと?

自らの影響力を考えれば制約的になるのは普通じゃない?
なんで最悪なのか理解できない。
2026/05/14(木) 17:58:51.35ID:4/MpZ61J0
Anthropic 社が評判を落とした決定的な理由はいわゆる「影の書庫」だよ。
和解金15億ドルは確認されている著作権訴訟の中では史上最大だそうだ。
違法に流通しているデータを AI の学習に使うのをフェアユースと言い張れると思っていたならいくらなんでも無能だし、違法行為と分かってやったなら邪悪だし、どちらにせよ好意的には見れないだろう。
387デフォルトの名無しさん (ワッチョイ 6de1-EAS5)
垢版 |
2026/05/14(木) 19:28:44.54ID:d9Ydvw3d0
>>386
それなら「影の書庫」は重要なキーワードになるから「ニュースでてくるだろ調べろよ無能」と擬似問題を誘発する無能発言で済ませるのは無能だわな。
「アンスロピック、評判は最悪」ぐらいのキーワードだと「影の書庫」はかすりもしない。

個人的には「AIはツール。AI生成物は学習データの二次著作物」という非主流派なので、こういうのはガンガン取り締まり&AI生成物作者も原著作者に許諾取れ/ライセンスフィーを払え、と思う。
388デフォルトの名無しさん (ワッチョイ bd7a-DFFR)
垢版 |
2026/05/14(木) 20:34:46.64ID:OY5EyHSD0
>>380の「評判は最悪」が果たして>>386のことなのかが分からん
>>380は具体的に書き給え
2026/05/15(金) 06:56:40.52ID:P65DoF/C0
>>386
で、そのデータはどうなったの?
ちゃんと削除したの?

まあ、Open AIとかも使いまくってるだろうね
390デフォルトの名無しさん (ワッチョイ 2325-qj6G)
垢版 |
2026/05/15(金) 07:09:00.12ID:EX3CF7ic0
機械学習やるなら学習データと教師データのセットは
どこも喉から手が出るほど欲しいもんな

蒸溜も公言してないだけで
みんな裏ではやってるだろ
391デフォルトの名無しさん (ワッチョイ 83ae-ynkz)
垢版 |
2026/05/15(金) 11:03:08.38ID:cGNl/rky0
アンソロピックの評判が悪いところ
・誤課金問題 & サポート対応が悪く返金に応じない
・利用料の引き上げ & 値上げと言わず機能の向上による変更だとか変な言い方してる
392デフォルトの名無しさん (ワッチョイ 83ae-ynkz)
垢版 |
2026/05/15(金) 11:04:10.02ID:cGNl/rky0
X や Reddit でもアンソロピックに不満を持ってる人たくさんいるよ
2026/05/15(金) 22:10:23.63ID:o7YjhGYwd
いいかげんスレ違い。
394デフォルトの名無しさん (JP 0Hd1-i1TM)
垢版 |
2026/05/21(木) 14:18:29.76ID:2Mt5yQQUH
長編が6000くらいあるPNG画像って、どうやってもデコード早くならん?
395デフォルトの名無しさん (アウアウウー Sa39-uJh1)
垢版 |
2026/05/21(木) 23:10:02.00ID:BGV5x8FOa
ラインバッファの容量かな
2026/05/22(金) 11:58:30.39ID:11+17Ohl0
「早くならん?」というのは「今は遅い」という意味?
遅いというのは何を基準に?
体感的に明らかに遅く感じるだけ?
大きさ相応に遅いのではなく長辺が 6000 くらいになったところで急に遅くなるという意味?

チューニングするならまずはどこが律速箇所なのかを測定するのが通常の手順だよ。
何が起きているのか分析せずにどうすればよいかを判断は出来ない。
397デフォルトの名無しさん (ワッチョイ 91f9-NVeZ)
垢版 |
2026/05/24(日) 06:35:43.21ID:McrvNbHE0
PNGに使用されるzlib deflate自体が
現代となってはあまり速いものでもないかと
filter+deflateが本当にボトルネックなのかどうかも分からないけど
2026/05/24(日) 06:55:34.43ID:owyQyMtoM
こんなのこそAIだろ…ということで、ぐぐるに投げてみた
おちょくってないぞ、最近、無料のAIを使いこなす練習してるんだ

Q: 長辺が6000px近くあるPNG画像 デコードが遅い チェックポイント
https://share.google/aimode/8JdQcdJYtiixmTfLn
399デフォルトの名無しさん (ワッチョイ 2b25-HZ6r)
垢版 |
2026/05/24(日) 12:30:10.97ID:iWq3lWQU0
それを要約して3行にまとめろよr
できんやつだな
400デフォルトの名無しさん (アウアウ Sa8b-jQrU)
垢版 |
2026/05/24(日) 12:35:44.26ID:kTEMkERMa
>>398
このAI、嘘ついてない?
圧縮レベル上げると展開時のCPU負荷が跳ね上がるって本当?
圧縮レベルが高いと圧縮に時間は掛かるけど、展開時の影響はほとんどないと思ってたけど
2026/05/24(日) 13:33:57.23ID:aZa6WGcr0
下記のように書いたら、実行時はifの判定しなくなるの?

constexpr int mode = 100;

if (mode == 100) {
std::cout << "aaa";
}
else {
std::cout << "bbb";
}
402デフォルトの名無しさん (ワッチョイ 2b25-HZ6r)
垢版 |
2026/05/24(日) 13:48:17.46ID:iWq3lWQU0
1回だけするだろ
しらんけど
2026/05/24(日) 13:50:38.35ID:CAV/UxQL0
>>401
mode == 100 は定数式だけど if 自体はコンパイル時文脈ではないので (形式的には) 判定はするよ。
必要なら if constexpr を使うべき。
ただ、モダンな処理系なら最適化で消えるだろうからテキトーでいいよ。
2026/05/24(日) 13:56:29.44ID:aZa6WGcr0
>>403
そうでしたか。
一応、下記のように書けばいいのかな?

constexpr int mode = 100;

if constexpr(mode == 100) {
std::cout << "aaa";
}
else {
std::cout << "bbb";
}
2026/05/24(日) 14:08:09.28ID:s4jEs3HF0
>>401
手元のg++(gcc14.2)で最適化指定しない場合、判定はしなくなっている
constexpr無し時、逆アセンブルするとcmpl,jne命令があり、callは2箇所
constexpr有り時、cmpl,jne無し、callは1箇所。movl $0x64,-0x4は残っているけど未使用
2026/05/24(日) 15:26:17.80ID:aZa6WGcr0
>>405
そうでしたか。
昔に作ったプログラムとか、最適化できそう

ありがとう
2026/05/24(日) 15:33:50.38ID:e1P/XaoPM
>>400
それもそうだな、と思って、それもぶつけてみた

Q. PNG 圧縮レベル デコード時のCPU負荷への影響
https://share.google/aimode/H2VrXZIItqBQgzZUp

返答の要点は、最高圧縮では、CPUのキャッシュメモリ・分岐予測との相性が悪くなるおそれがある、と。
チェックポイントを聞いたのだから、人間ないしはエージェントがとるべき態度は、
「ほな、実機で圧縮率変えて比べてみるか」だと思う
408デフォルトの名無しさん (スプッッ Sd73-Rit4)
垢版 |
2026/05/27(水) 09:47:07.59ID:ODccCS1Bd
pngはzip圧縮だからzip処理にzlib-ng使ったら速くなるんじゃない?
俺もそれで高速化考えたけど、本体はあくまで別アプリから画像処理ライブラリを呼び出すんで、依存改変はメンテナンス大変すぎるからやめたけど。
409デフォルトの名無しさん (JP 0Hfd-h4v0)
垢版 |
2026/05/27(水) 10:04:21.57ID:IT06qbYXH
今時zip処理は一瞬で終わるでしょ
410デフォルトの名無しさん (スップ Sd33-Rit4)
垢版 |
2026/05/27(水) 18:35:41.31ID:vwhtvXCkd
1画像なら誤差だけど大量に処理するんなら差が出るんじゃねって思った。
画像じゃない別のアプリで使ったけど1.5-2倍くらい差が出た
いや、うろ覚えだから本当は3割くらいだったかもだけどベンチで優位に差が出た
てか、検索したら最大4倍らしいから記憶あってたかも
411デフォルトの名無しさん (スップ Sd33-Rit4)
垢版 |
2026/05/27(水) 18:37:28.66ID:vwhtvXCkd
まぁ枚数より他の処理との兼ね合いのが重要だろうけど
2026/05/28(木) 21:26:41.77ID:OS5CuqqR0
>>404
if での判断をコンパイル時にしたいというのが目的であればいいけどそれが設計的に妥当かどうかは全体を見ないとわからないからね……
もしもモードに応じてコンパイル時に挙動を分けたい箇所がたくさんあったりするならトレイトとして括り出したほうがいいかなとかいうことを私なら検討するかも。
これなら C++03 時代の言語機能でもコンパイル時に分岐できるくらい素朴だし、ロジック本体から分岐を消せるし。

#include <iostream>

template<int mode>
struct mode_traits {
static const char *message;
};

template<int mode> const char* mode_traits<mode>::message="bbb";

template<>
struct mode_traits<100> {
static const char* message;
};

const char* mode_traits<100>::message="aaa";

int main(void) {
const int mode = 100;
std::cout << mode_traits<mode>::message;
}
413デフォルトの名無しさん (ササクッテロラ Spc5-l8Oh)
垢版 |
2026/05/29(金) 11:29:38.72ID:yOJ+I4t+p
03で出来ないといけないとか誰も言ってなくね?
2026/05/29(金) 12:33:37.55ID:XM3j5Ybh0
>>413
テクニカル過ぎないことの代表として C++03 を示したものであって C++03 で可能であることは重要ではない。
415デフォルトの名無しさん (ワッチョイ 3336-jQrU)
垢版 |
2026/05/29(金) 15:19:34.73ID:m8Otf3/K0
>>412
これが素朴なのか、、、偉い人の考えてることはよく分からん
どうしても新しい言語機能を使わずにやるなら #ifdef のほうがましでは
2026/05/29(金) 17:35:54.90ID:nA5ubSfh0
>>415
新しい機能をどうしても使いたくないという前提は存在せず、新しい機能を使わずに済むくらいには素朴だという説明をしたつもりなんだけどそんなに分かりにくいかな?
前提がよくわからないので状況によってはありうるという単なる一例だからもちろんマクロで良いならマクロで良いよ。
417デフォルトの名無しさん (ワッチョイ 894e-l8Oh)
垢版 |
2026/05/29(金) 18:23:31.33ID:W9bgb6p60
>>415
ややこしいテクニック晒してドヤりたいアマチュアの発言だから、偉いとか思わない方がいいよ
本人も言ってるけど、ifdefで困らないならifdefでいいし
C++11以上ならif constexprでいい
2026/05/29(金) 19:18:55.91ID:XM3j5Ybh0
if constexpr は C++17 からだよ。
419デフォルトの名無しさん (ワッチョイ 894e-l8Oh)
垢版 |
2026/05/29(金) 19:55:54.83ID:W9bgb6p60
そうだったか、すまん
2026/05/30(土) 07:29:38.29ID:1hQwvNqk0
c++でもトレイトなんてあったん?
2026/05/30(土) 10:56:01.75ID:CANh+bnA0
言語機能としてはトレイトというものはないが構成パターンとしてトレイトがあるって感じかな。
標準ライブラリでは char_traits pointer_traits iterator_traits allocator_traits がそう。
名前に traits とついてはないが numeric_limits もそうかも。
2026/05/30(土) 11:12:15.20ID:1hQwvNqk0
勉強なります mOm
2026/05/30(土) 17:00:26.06ID:PpUk3usf0
>>412
modeによって、ifを使わずに処理を分ける感じですか
いいですね

const int mode = 100の部分は、constexprにしないんですか?
2026/05/30(土) 17:01:39.06ID:PpUk3usf0
>>416
マクロは型が明確じゃないし、ダメですよね…
2026/05/30(土) 17:57:39.22ID:+/j9HRHz0
>>423
C++03 くらいの古い C++ でも可能ではあるというネタなのであえてそうしたけど constexpr が使えるならそうしたほうが良い。

if を使わないというよりはロジック本体とは別のところに分離したほうが良いかもしれないというところが主旨で、
トレイトにすればオマケでコンパイル時に解決したいというのも達成できるという提案のつもりだった。
もしメッセージ以外にも mode に依存して変わることがある、 mode が様々な値を取りうるなら mode ごとの振る舞いとして集約したほうが拡張性が高くて見通しも良いだろうし。

念のため再度強調しておくけど前提を勝手に想定しているのでこれがより良い構成とは限らない。
C++ では定義済みのクラスにメンバを追加することは出来ないし基本型はメンバを持てないのでトレイトという形式でなんとかすることもあるというひとつの豆知識だね。
2026/05/30(土) 18:44:17.60ID:QKLBXZIC0
質問者さん最適化中の言語バージョン教えてよ
多分C++03版に興味持ててる人少ない
427デフォルトの名無しさん (ワッチョイ 33a4-jQrU)
垢版 |
2026/05/30(土) 18:48:30.78ID:l2G5x5XC0
質問者さんもconstexprと言ってるので少なくともC++11以上だろうね
2026/05/31(日) 07:31:33.45ID:B3gdlDHB0
正直な話
新しい機能は追えてない
429デフォルトの名無しさん (ワッチョイ dd4e-VkBD)
垢版 |
2026/05/31(日) 10:36:32.04ID:LSPIhsi/0
>>424
マクロがダメとか言う人多いしそう書いてるサイト多いけど
マクロはコンパイラにパラメータとして渡せるからIDEやシェルスクリプトとかからビルド設定を変えるような用途では欠かせないよ
適材適所で考えた方がいい

自分も追えてない、というか最新のコンパイラでも全然実装が追いついてなくて使えなかったりするし(clangは未だにC++17のpool_resource実装してない)
追えてるから偉い、みたいな発想はよろしくないよ、それが趣味や仕事の人ならともかく
必要な状況で、標準にあれば使うってのが普通
430デフォルトの名無しさん (ワイーワ2 FF62-l0/e)
垢版 |
2026/05/31(日) 11:48:05.73ID:iw1445ThF
条件コンパイルで解決
431デフォルトの名無しさん (ワッチョイ 9d1d-DM5e)
垢版 |
2026/05/31(日) 11:57:20.89ID:a3BNQRyE0
テンプレートがダメから仕方なくマクロ使うのであって、マクロがダメと感じたことはほとんどない
あるWindows SDKヘッダーファイルのインクルード位置依存でmin()とmax()がマクロ展開されて困るとかぐらい
2026/05/31(日) 14:26:52.09ID:gebSlwjU0
一般的すぎる名前のマクロと小文字のマクロと機能や構文を追加しようとしてるようなマクロとinlineやconstexprやtypedefで済むマクロを書いたやつは
縛り首にしても許される法律がほしい
2026/05/31(日) 14:50:13.38ID:BWBzStOq0
C++の未実装仕様はAIへ投げてRustで実装させよう
2026/05/31(日) 15:01:10.68ID:dURY9U0x0
マクロ自体には型がついていないがリテラルや式にも型はあるのでそれらに展開されるなら型は有るとも言える。
マクロの問題点は型がどうこうよりもフェイズだ。
構文解析よりも前のフェイズで解釈されるルールだから文法構造をまるっと無視して字句的にマッチすれば置き換えてしまう、マクロの処理時点では変数なんか知らんから変数の内容を見て切り替えることは出来ない。

逆に言えばプログラムのロジック以前の処理系・実行環境関連の都合での切り替えなんかはマクロのほうが妥当なことも多い。
Autotools や CMake との併用を考えるとマクロは要る。
それと宣言や文は変数に放り込んで再利用するなんてことが出来ないので特に繰り返されるパターン (いわゆるボイラープレート) はマクロが便利なこともある。

C++26 には静的リフレクションが入ることになったのでマクロを使う領域は減るとは思うがリフレクションを実用するにはまだまだ時期尚早だろう。

私の個人的な感覚ではコンパイラのデフォルトがその時点でおおよそ信用できる範囲だと思うので今なら GCC は C++20、 Clang は C++17 を想定しておけば問題は少ないと思う。
実務的にはもうちょっと保守的 (古いコンパイラを想定する) でも良いかもしれない。
でもさすがに最低でも C++11 は欲しい。 C++03 はかなりきつい。
2026/05/31(日) 17:11:54.21ID:h40WPvm90
Cと共有するなら結局マクロだからな
公開ヘッダに脳死でconstexpr const intとかenum classとかで定数定義してたらはっ倒される
2026/05/31(日) 17:19:16.17ID:TINVPm6t0
コンパイラ引数 -DMODE=100 等の調整方式にした場合は変更時にmake cleanなりリビルドなりしてあげましょうね。
ソース日時が変わらないから基本的に差分コンパイルを期待してはいけない
2026/05/31(日) 17:45:28.70ID:dURY9U0x0
変数の constexpr は C23 に入った。
しかも GCC ではすでに C23 (に処理系拡張を追加した gnu23) がデフォルト。
constexpr で定数を定義するのが普通になる未来もあるかもしれない。

C を使っている (または C とヘッダを共有することがある) ようなプロジェクトは保守的に運用しがちだからそう簡単に移行しないと思うけど。
2026/06/02(火) 13:55:44.54ID:IQgCwviQF
#define NULL ((void*)0)
はアウトなのか?
2026/06/02(火) 14:25:46.12ID:Wwv6ytXh0
C++ #define NULL ((void*)0)
でgoogle(無料)AIがざっくりと回答してくれる
2026/06/02(火) 14:45:37.41ID:ht7f4/6G0
>>438
C++ では C と違って void* から他のポインタへの暗黙の型変換を認めていないのでそう定義してしまうとポインタの定数として使えなくなる。
一般的には NULL は単に 0, 0L, 0LL のいずれかで定義されているとはず。
整数リテラルの 0 は暗黙にポインタに変換できるから。

ちなみにちょっと前まで結果が整数の 0 になる定数式もポインタに暗黙変換できることになってたけど欠陥報告が出て整数リテラルのみに修正された。
2026/06/02(火) 15:01:00.83ID:2xufgWi50
C++にもCにもnullptrが入ったんだからそっち使え、0からの変換のことは忘れるんだ
2026/06/02(火) 16:16:23.57ID:c4B8bb8/0
nullptr でいいよね。
2026/06/02(火) 18:26:25.06ID:wuc878y60
意図しないときに 0 がポインタとして解釈されてしまったときに混乱するだろう。
nullptr を使うべきというのとは別に知っておくに越したことはない。
2026/06/02(火) 20:20:54.28ID:ASE1fEGy0
C++内ではnullptrを使うのが良い
NULLの定義はコンパイラ付属のstddef.hあるいはcstdefに任せるべきで、#ifdef __cplusplusによってC++の場合は0、Cの場合は((void*)0)といった感じに定義分けされているはず
別のインクルードが必要に応じてインクルードしているから大抵自然にNULLが使える、例えばCのstdio.hの中身を眺めれば確認できるはず
NULLを自分で定義するとかえって多重定義になるのでは
if文などのboolean判定時に0もnullptrもfalse扱いになるが、これとは区別して考えよう
2026/06/02(火) 20:32:01.47ID:ASE1fEGy0
>>441の言う通り今はCにもnullptrあるんだね
NULLは古い環境用の知識ということで、、、
2026/06/02(火) 22:32:48.47ID:ht7f4/6G0
C の nullptr はだいぶん後になって付け加えられたから C++ と乖離が少ないようにかなり寄せてるけど細かなところでちょっと違う。
今は諸事情できちんと調べられてないから間違ってたらすまんけど 私の理解だとたとえば printf("%p", nullptr); は C++ では未定義だけど C では OK のはず。
既定の実引数拡張や適合に関する規則が違う。
2026/06/02(火) 23:48:32.80ID:c4B8bb8/0
cout<<nullptr<<endl;

nullptr
え そなの?w
2026/06/03(水) 05:43:56.49ID:toiX3I4X0
nullptr_tにoperator<<を定義しろとは標準では決まってないから実装依存
2026/06/03(水) 07:58:27.51ID:wByI1zTJ0
>>447-448
C++17 以降は nullptr_t を受け付ける operator<< が用意されてる。
ただし出力される文字列は処理系定義。
2026/06/03(水) 08:07:03.87ID:vcZMEX6A0
>>449
どもです。いちおstd=c++23でコンパイルしました。
2026/06/03(水) 15:28:41.92ID:Wy1oRWov0
ostream系クラスは開発者向けログ出力機能として生き残っていく感じかなあ
2026/06/03(水) 20:22:56.33ID:oLwg6wz00
は?
2026/06/03(水) 21:12:40.38ID:+0qtzwvFa
完全GUIプログラムのデバッグ出力用としては未だに printf 系しか使わないオレサマ
454デフォルトの名無しさん (ワッチョイ 417a-io+q)
垢版 |
2026/06/03(水) 23:11:11.86ID:nwNKp1sh0
std::formatすら知らないジジイ
455デフォルトの名無しさん (ワッチョイ 711d-DM5e)
垢版 |
2026/06/03(水) 23:16:51.43ID:Wy1oRWov0
operator << ()を関数オーバーライドすれば出力内容もカスタマイズできるし
ヌルポインタを嚙まされても適当にNULLとか出力するあたりはログ機能に合ってる
456デフォルトの名無しさん (ブーイモ MM9a-io+q)
垢版 |
2026/06/03(水) 23:45:15.04ID:n7OIDdE+M
>>455
書式指定がクソだろ
どこがログ機能にあってんだよ
こんなの有り難く使ってんのはさすがに時代に置き去りにされすぎ
2026/06/03(水) 23:56:11.41ID:Wy1oRWov0
>書式指定がクソだろ

数値型に対して10進表記と16進表記を同時に出力するみたいなオーバーライドを用意しておくと楽だよ
2026/06/03(水) 23:58:24.42ID:XjwW95ds0
> 数値型に対して10進表記と16進表記を同時に出力するみたいなオーバーライド
きめえ
2026/06/04(木) 00:08:04.92ID:YvQW6eq+0
Visual Studioとかの評価窓は数値を10進と16進のどちらかしか表示できないから不便
10進で欲しいことも16進で欲しいこともあるから「5963(0x174B)」みたいにどちらも出力するに越したことはない
460デフォルトの名無しさん (ワッチョイ 7a6a-kGH5)
垢版 |
2026/06/04(木) 02:01:35.96ID:4qHdkMa20
>>453
わかる
フォーマット指定が簡単で使い易いんだよな
461デフォルトの名無しさん (ブーイモ MM9a-io+q)
垢版 |
2026/06/04(木) 03:10:22.33ID:LoOWCbi7M
>>457
得意げに言ってるようだけど、完全に時代に置き去りにされてんの自覚したほうがいいぞ
2026/06/04(木) 05:08:03.79ID:+9IbWOcE0
そんなの発注主に言ってくださいよ。。 (現場作業員のつぶやき
2026/06/04(木) 06:46:45.97ID:m+R0LwSW0
自分は457じゃないけど
時代語る人は今時自分で組まないみたいなので置き去りとかどうでもいい
464デフォルトの名無しさん (ワッチョイ 9d1d-DM5e)
垢版 |
2026/06/04(木) 08:23:34.90ID:eIr3VgFm0
C++専用スレなのに、ostream系クラスをカスタマイズした経験もろくにない人がベテランを気取るのは良くないよ
465デフォルトの名無しさん (ワッチョイ e54e-etCG)
垢版 |
2026/06/04(木) 08:29:10.62ID:Hja2/bAX0
C++ストリームの問題点は、黒魔術以前の設計なので、仮装関数呼び出しによってパフォーマンスが劣化すること。
HTTPサーバーのようなドンドンログを吐き出すサービスには使えない。
466デフォルトの名無しさん (ワッチョイ 9d1d-DM5e)
垢版 |
2026/06/04(木) 08:37:02.95ID:eIr3VgFm0
printf系関数が書式文字列の文法解析を関数呼び出しのたびに行うことに比べれば、仮想関数のオーバーヘッドは小さい
2026/06/04(木) 08:56:29.97ID:eIr3VgFm0
ログ書き込みの遅さに比べればメモリ処理なんて大した時間はかからない
実務経験がぜんぜんなさそうのになんでC++スレで回答者のまねごとしてる人いるの
468デフォルトの名無しさん (ワッチョイ 41fc-7UYV)
垢版 |
2026/06/04(木) 08:58:56.65ID:ud8ZCwXP0
サーバでprintfやostream使うと

​「あのぅ……そこ、一応高並行・低レイレンシを謳うサーバーですよねぇ?
​そんな関数の奥深くで、生の printf とか std::ostream で同期 I/O 叩いちゃうとぉ、せっかく Boost.fiber や C++20 コルーチンで組み立てた非同期ランタイムのワーカースレッドが、OS レベルで丸ごとブロッキングされちゃうと思うんですけどぉ……。
​C10K(しーてんけー)問題、地頭(じあたま)で解決するおつもりでしたぁ?(ニチャァ)」

ってなりそ

(↑煽り文の修正をGeminiに任せたら、とんでもない高火力になったw)
469デフォルトの名無しさん (ワッチョイ 0ae5-xuu9)
垢版 |
2026/06/04(木) 09:11:48.57ID:Oi7FLl/B0
ファイルI/O関数って今でも遅いの?
最近のOSは既定でライトバック動作になってると思うけど
470デフォルトの名無しさん (ワッチョイ e61a-etCG)
垢版 |
2026/06/04(木) 10:02:59.07ID:N0n2HwfF0
MicrosoftやGNUの実装では、一バイトごとに仮想関数呼び出しを、演算子オーバーロードの数だけ繰り返すのでとてつもなく遅くなる。
471デフォルトの名無しさん (ワッチョイ 41b3-io+q)
垢版 |
2026/06/04(木) 10:15:22.67ID:SVvRJgfG0
ostreamなんか今すぐ捨ててstd::format使えって
古いc++使わないといけないならlibfmt入れろ
なんでこんなのも知らねーの?
まじこのスレのレベルの低さに絶句するわ
472デフォルトの名無しさん (ワッチョイ 9d1d-DM5e)
垢版 |
2026/06/04(木) 10:34:55.87ID:eIr3VgFm0
std::formatはコストが大きいよ
ostreamをカスタマイズしたほうが拡張性も効率も良い
2026/06/04(木) 10:46:29.14ID:RdVUySwX0
コンパイルの時間はなんか長いね。format
474デフォルトの名無しさん (ワッチョイ 9d1d-DM5e)
垢版 |
2026/06/04(木) 10:54:34.80ID:eIr3VgFm0
より厳密に説明するとC++のログ機能として有用なのはostreamそのものではなくoperator<<()の独自実装やオーバーライドなんだよね
std::formatは書式解析やオブジェクト生成のコストが大きいし、operator<<()の恩恵を活かせていないのがもったいない
2026/06/04(木) 11:44:55.55ID:BHUE0YPR0
std::format はいったん std::string 型のオブジェクトを生成するのでコストが大きいが std::print は全ての結果を格納した文字列を作ったりしない実装にできる。
std::ostream の ostream<< はその仕組み上、書式設定やロケールを動的に読みに行く必要性から最適化してもそのコストは潰せないが、 std::print は特に明示的にロケールの適用を指示しない限りロケールに左右されないし読みに行く必要もない。

外部に書き出すという前提での実行コストはこうなると予測できる。 (使い方によるだろうし実測してないことは断っておく。 検証したければやってみて。)
@ std::print, std::println, std::printf
B std::ostream (の opretor<< で書式化)
C std::format で文字列を構築してから std::ostream に出力

注1: std::printf は主要なコンパイラではビルトイン関数として特別扱いがあって典型的な使い方では関数呼出しごとに書式を解釈したりしない。
注2: std::string 型のオブジェクト生成も短い文字列では Small-String Optimization によってメモリ割り当てが抑制されるので整数の数値化程度ならたいしたコストにならない。
注3: マルチスレッドが絡むと I/O 自体のコストが大きくなるので書式化のコストは相対的に重要ではなくなるが、書式やロケールを読みに行くコストは増大しそう。
2026/06/04(木) 11:53:03.95ID:bPkUVNlp0
std::formatは俺が読むのも書くのも楽なんだよな
演算子オーバロード独自ってのは読みたくねえ
477デフォルトの名無しさん (ワッチョイ 4157-7UYV)
垢版 |
2026/06/04(木) 11:53:39.31ID:8Tj5H6XF0
あ、あの 皆さん

C++23のアレは言及しなくて良いんすか?
……あっ(察し)
478デフォルトの名無しさん (ブーイモ MM9a-io+q)
垢版 |
2026/06/04(木) 12:01:29.68ID:TfmokZ3lM
>>472
std::formatの元になってるfmtの計測結果見てみな
https://fmt.dev/12.0/
しったかカッコわる
479デフォルトの名無しさん (ワッチョイ 9d1d-DM5e)
垢版 |
2026/06/04(木) 12:07:51.64ID:eIr3VgFm0
>>475
ファイル出力を伴う性能評価は不適切
バッファリングに特化した std::snprintf()、std::ostringstream、std::format()あたりで性能評価しないと
480デフォルトの名無しさん (ワッチョイ 9d1d-DM5e)
垢版 |
2026/06/04(木) 12:17:11.53ID:eIr3VgFm0
>>478
知ったかぶりしているのは君のほうだろう
実行時に毎回書式解析するprintf()やstd::format()よりも、バイナリコンパイル時にのみ書式解析されるoperator << ()のほうが速いのは明らか
481デフォルトの名無しさん (ワッチョイ 412d-io+q)
垢版 |
2026/06/04(木) 13:19:47.20ID:SVvRJgfG0
だめだこりゃ
2026/06/04(木) 18:05:48.93ID:BHUE0YPR0
>>480
std::format (や std::print など) は実行時に書式を解析しないという前提をわかってなかったのか……。
コンパイル時計算で文字列を扱えるように緩和されたからこそ入ったのだし、
実行時に解析する必要性があるときのためにわざわざ std::vformat を別に用意しているくらいなんだぞ。
何のために std::vformat があると思ってたんだ?

std::format が性能の足を引っ張っているのは結果を std::string 型のオブジェクトとして構築する部分だ。
std::print では文字列全体を構築する手間がないのと書式やロケールのグローバルな設定を見に行かない分だけ性能的には有利になる。
483デフォルトの名無しさん (ワッチョイ 711d-DM5e)
垢版 |
2026/06/04(木) 18:31:57.48ID:kR5XAgvD0
>>482
それは違う
std::format()が有用なのはロケールに合わせた書式文字列を別リソースから渡すケースなので、実行バイナリコンパイル時コンパイルでは対応できない。
言語によって単語の並びが変わりうることに対応することが一番の利点であり、実行バイナリコンパイル時コンパイルではない。
484デフォルトの名無しさん (ワッチョイ e54e-etCG)
垢版 |
2026/06/04(木) 22:02:07.98ID:ILvboRoG0
DVDからSSDへのコピーをstream使ってやったら10時間以上かかったが
直接API呼び出したら10分程度で終わった
485デフォルトの名無しさん (ワッチョイ 412d-io+q)
垢版 |
2026/06/05(金) 00:32:13.06ID:YNJp1gL00
>>483
またしったかぶり
書式文字列はコンパイル時定数だ
実行時に指定する仕組みもあるが大半の用途では定数で足りる
コンパイル時にサポートするlocaleとその書式が不明なんて例外的すぎるだろバカ
ostreamでも何も楽にならない
そもそもそんな議論するまでもなく、ほとんどinline展開できないostreamに劣る要素がない
攻撃するならコンパイル時間にしとけ
2026/06/06(土) 01:01:47.08ID:skSSLQ+W0
1文字ごとに仮想関数が呼ばれようがIOの前ではどうでもいいし、メモリ割り当てでヒープの状態が変わるほうがデバッグに辛くないか
そういえばprintfの中でmalloc使ってるクソ実装も昔あったなあ…
2026/06/06(土) 09:56:24.87ID:uqM5c5oX0
ostreamではなくoperator<<()が有益なのだが、わかりやすく説明するためにostreamと言ったせいかスレ住人に正しく理解してもらえてないのが残念
ostringstreamライクな軽量バッファクラスを自力実装するのは楽しいよ
operator<<()は、自分を戻り値にするところが似ているJavaのStringBuilderクラスのappend()関数よりも直観的な記述ができる
2026/06/06(土) 10:07:49.01ID:uqM5c5oX0
MFCにoperator<<()を使ったデバッグトレースクラスがあったうろ覚えな記憶があったので調べたら見つかった
懐かしい、CDumpContextクラス

https://learn.microsoft.com/ja-jp/cpp/mfc/reference/cdumpcontext-class?view=msvc-170#operator_lt_lt
2026/06/06(土) 11:03:15.60ID:otMluy8K0
言わんとすることは分からんでもないけど,文字列化の定義をシフト演算子に書くとかいうきっしょい仕組みをいつまで引きずってんだと思う
2026/06/06(土) 11:36:59.44ID:uqM5c5oX0
operator<<()は可変長引数のようにいくつでも追記できるのでマクロと組み合わせるのも楽
以下はログ用インスタンスhogeに追記するマクロの例
#define FOOBAR(x) hoge << x << "\n"
FOOBAR(1 << num << "abc=" << lpstr);
491デフォルトの名無しさん (ワッチョイ 41b6-io+q)
垢版 |
2026/06/06(土) 12:01:59.27ID:prt1RWXN0
そんなクソダサテクニック披露すんの慎んでもらえる?
2026/06/06(土) 12:16:02.71ID:uqM5c5oX0
operator<<()を使ったostringstreamライク軽量クラスとしては、Mecabのソースコードに含まれる mecab/src/string_buffer.h とか参考になる
https://taku910.github.io/mecab/#download
493デフォルトの名無しさん (ワッチョイ 41b6-io+q)
垢版 |
2026/06/06(土) 12:22:37.25ID:prt1RWXN0
またこういう古臭いこと言ってるってことはrangesもどうせ知らないわけだ
494デフォルトの名無しさん (ワッチョイ 419d-7UYV)
垢版 |
2026/06/06(土) 12:40:54.04ID:tNz1VS0M0
20年前でもboost::format使えってなってたやつでは… いやお好きにどうぞですけど…
2026/06/06(土) 13:04:55.85ID:uqM5c5oX0
std::format()の目的は、渡された引数の並び順を書式で変更する多言語対応であって、
軽量化はおまけだからoperator<<()と比較対象にするのがそもそもおかしい
2026/06/06(土) 13:49:08.43ID:JTFetyCM0
>>487
何を伝えたいのかまだわからない。
かなり飛躍した想像を膨らませて解釈すると
標準ライブラリも内部の実装も抜きにして operator<< で繋げていく「記法」に焦点をあてたいということ?
2026/06/06(土) 14:01:14.82ID:skSSLQ+W0
operator<<を持ってる型ならフォーマット文字列意識せずになんらかの可読なものが出てくるのが雑に挿入する分には便利って話でしょ
デバッグ出力だから既存のostreamをそのまま使うのではなく出力先を切り替えたりverboseレベルを見たりする派生クラス作るのも当たり前だし
そこは最初からそういう話と思ってたけど、え?
2026/06/06(土) 15:12:10.88ID:SQIW+QID0
軽量なバッファ追記方法という点では、初期C++から用意されているoperator<<()の優位性は今も変わらないよ
標準のostreamがダメダメなだけで、>>492 に書いたMecabのStringBufferクラスみたいに独自実装する価値は今でも十分ある
499デフォルトの名無しさん (ワッチョイ 4147-io+q)
垢版 |
2026/06/06(土) 15:37:24.91ID:prt1RWXN0
見苦しいったらありゃしない
2026/06/06(土) 15:39:12.47ID:JTFetyCM0
>>498
確認するが、有意性と言ってるのは「軽量」って部分?
何が軽量なの? 実行コスト?
「ostream の operator<< が駄目」というのは今始めて出てきた言説だと思うが、それは話題の初期からそのつもりで言ってた?

ostream の operator<< の実装のことではなく operator<< で繋ぐことに「軽量」という有意性があるというのがどういう意味なのか全然わからない。
2026/06/06(土) 15:49:07.62ID:SQIW+QID0
>>500
演算子の評価順が重要であり、バッファ追記で同じように用いられることが多いoperator+=()ではoperator<<()と同じ効果は得られない
2026/06/06(土) 16:26:55.80ID:JTFetyCM0
>>501
(モダンな書式化ライブラリが標準に入っても) ログ出力用には ostream 系 (つまり operator<< で繋ぐ形式?) が残るだろうという投稿 (>>451) から始まってる。
比較対象は std::print とかで、それに比べて operator<< が良いという主張をしている理由を問うてる。
2026/06/06(土) 16:29:51.02ID:SQIW+QID0
operator<<()をログ出力に使うことが多いとはいえ、対話デバッグすることもある
operator<<()関数にブレークポイントを設置して待ち伏せするのは簡単だが、
std::format()で追記直前の位置にブレークポイントを設置するのは容易なことではない
保守しやすくメモリを食わずステップ数が少ないoperator<<()が今でもバッファ追記の最適解なんだよ
504デフォルトの名無しさん (ワッチョイ 4147-io+q)
垢版 |
2026/06/06(土) 17:15:24.44ID:prt1RWXN0
ジジイが珍説で孤軍奮闘
2026/06/06(土) 17:33:04.63ID:SQIW+QID0
>比較対象は std::print とかで、それに比べて operator<< が良いという主張をしている理由を問うてる。

いちいち書式を指定せず直観的にバッファ追記できる点がoperator<<()の有利な点であり、
プラス演算子を使った ddd = aaa + "bbb" + ccc; のように一時インスタンスが意図せず生成されうるコンパイラ依存もない
また、std::print()は独自の構造体やクラスに対するオーバーライドが困難だが、operator<<()オーバーライドは容易
506デフォルトの名無しさん (ワッチョイ 41f8-7UYV)
垢版 |
2026/06/06(土) 17:39:19.32ID:siI2DnqG0
formatterの特殊化やcroutine,thredに対する視線が……無い……だと……??
2026/06/06(土) 17:43:18.47ID:nHiCTMv/0
何気ないつぶやきに想像以上の反応があって上手に応対できてない感じが客観的に見て取れるけど。
通行人の私は451さんが以下を言っているように聞こえる

<<演算子による出力処理記述は、メソッドチェーンで書ける事、多重定義関数の中から引数の型によってコール関数が選択される事、これらから記述がイージー(軽量)に書ける。
実装構造もシンプルだから自分で作成したクラスに<<演算子を追加するのも楽、例えばMecabのクラスのように。
2026/06/06(土) 18:43:34.95ID:SQIW+QID0
std::print()は独自の構造体やクラスに対するオーバーライドのstd::to_string()はいちいちstring型の一時インスタンスを生成するし、特定クラス向けオーバーライドが困難
組み込みやゲームなどでシビアなタイミング依存のログ出力に耐えられるのはoperator<<()であり、string型の一時インスタンスを大量生成するstd::format()系は論外。
2026/06/06(土) 18:54:38.69ID:SQIW+QID0
std::format()はユーザーに見せる目的の公式な多言語対応文字列の処理には確実に向いているが、開発者が内々に使う高速軽量ログ機能には向かない
510デフォルトの名無しさん (ワッチョイ 41a2-7UYV)
垢版 |
2026/06/06(土) 19:00:15.27ID:oReJ5+0C0
やっぱりおかしいなぁと思って
「次のC++に関する投稿を精査して下さい」
ってAIに >>508 突っ込んだら軒並み悲しいことになったぞ……
511デフォルトの名無しさん (ワッチョイ 4147-io+q)
垢版 |
2026/06/06(土) 19:10:48.34ID:prt1RWXN0
こういうホラ吹きジジイにはなりたくないよな
2026/06/06(土) 19:15:24.60ID:SQIW+QID0
operator<<()の優位性について異論があるなら具体的に書いて
2026/06/07(日) 03:14:45.85ID:VZuddOVE0
> operator<<()関数にブレークポイントを設置して待ち伏せ
やらねえよwwww
514デフォルトの名無しさん (ワッチョイ 6947-MRKe)
垢版 |
2026/06/07(日) 07:29:59.42ID:rsN0Xg430
まとめとくわ
ostreamの関数チェーンによる書式指定は使いにくい上に遅いという語り尽くされた意見に対して、
このostreamジジイは関数チェーンのBuilderパターンが最先端技術で最強と解決策になっていないことをほざいている

さらにブレイクポイントも張れるとか目的が不明なことを力説
間違いを訂正しないで妄想垂れ流す無敵老人は相手にしない方がいいね
515デフォルトの名無しさん (ワッチョイ 491d-BNkS)
垢版 |
2026/06/07(日) 08:37:51.88ID:pL1tozTS0
高速なバッファ追記はoperator<<()が今なお強力というのが主旨であり、ostream系派生クラスに限定した話はしていない

>>513,514
自作クラスのデバッグ経験が少ないからブレークポイントの話がピンとこないのかな
オーバーライドしたoperator<<()が増えてくるとどれが呼ばれたか確認する作業が必要になる
std::format()でも意図したstd::to_string()が呼ばれたことを確認するためにブレークポイントを置くのが普通だろう
std::to_string()がどこに書かれているかすぐ把握できるならブレークポイントの設置は難しくないが、実際はそうではない
516デフォルトの名無しさん (ワッチョイ 491d-BNkS)
垢版 |
2026/06/07(日) 09:03:46.59ID:pL1tozTS0
ランタイム時に書式解析しないのがstd::format()を推す点なのだろうけど、これは実装依存であり、
Visual Studio 2026のC++の場合はdouble型やfloat型のstd::to_string()の中でsprintf系関数が"%f"で書式解析している
2026/06/07(日) 09:40:14.71ID:7nSMiSbz0
ダメだこりゃ
518デフォルトの名無しさん (ワッチョイ 6947-MRKe)
垢版 |
2026/06/07(日) 09:58:50.29ID:rsN0Xg430
このジジイずっとstd::to_stringって言ってんだよね
std::format, std::printのカスタマイズのやり方がわかってない
調べたらすぐわかるのに調べる能力もない
2026/06/07(日) 10:21:56.31ID:pL1tozTS0
std::format, std::printをいくらカスタマイズしてもstring型の一時インスタンスを生成する仕組みから離れられないので、軽量なバッファ追記には不向きなままだが
520デフォルトの名無しさん (ワッチョイ 6947-MRKe)
垢版 |
2026/06/07(日) 10:28:47.27ID:rsN0Xg430
>>519
はずれ
自分でちょっとは調べろ
2026/06/07(日) 10:29:21.56ID:ZAl4Czjk0
>>519
std::print は文字列全体の生成を普通はしないという説明はしたのだが理解できなかったか?
2026/06/07(日) 10:48:47.01ID:ZAl4Czjk0
>>515
前提が全く噛み合ってない。
おそらく現場で C++ の使い方は学んだベテランだが言語仕様や設計論はあまり知らないタイプ。
昔からデバッグを何もかもブレークポイントでやってきた現場のテイストを感じる。
しきりに「経験」を繰り返しているのは自分の論が経験則でしかなく合理的に説明できないからだろ。
私はプロではないがログ API にストリームを被せるくらいのことはしたことはある。

私は Visual Studio のことは知らんから具体的な操作は分からんが、オーバーロード解決がどうなったなんてコンパイルするすらしなくてもインテリセンスの機能で表示できるはずだ。
(少なくとも VSCode では適切なアドオンを入れていれば出来るし、 Visual Studio がそれより劣るということはあるまい。)
ツールチェインが信頼できなくて最悪の場合に実際にどうなっているかを確認するにはブレークポイントが役立つこともあるが……最適化と組み合わさると意図したところにブレークポイントを置けないなどのトラブルは起こりがちでソースレベルデバッグではむしろブレークポイントのほうが信用できない。

テンプレート (std::print) の展開結果を確認するよりはオーバーロードの選択結果を確認するほうが楽というのはわからんでもないが、そんな確認が必要になることが頻繁にあるのなら開発体制のどこかが間違えていると思う。

念のために注記しておくが、現時点で std::print 系のライブラリの実装が充分にこなれていない環境もあるのは事実だ。
何せ新しいのでやむをえない現実があることは否定しない。
あくまでも >>451 が開発者用ログ機能としては << で繋げていくやり方がこれからも生き残るというニュアンスなことに対して原理的には理想的ではないと反論している。
現時点での実装の細部の不備はもとより論点ではない。
2026/06/07(日) 10:55:17.46ID:pL1tozTS0
>>522
なぜoperator << ()が理想的でないかについて説明が一切ないので反論になってない
2026/06/07(日) 11:17:22.83ID:pL1tozTS0
私は一貫してoperator << ()の優位性を合理的に説明しており経験則の話はしていない
std::print()やstd::format()の性能はコンパイラ依存であり、軽量ログとして使うには高コスト
2026/06/07(日) 11:26:35.56ID:ZAl4Czjk0
>>523
説明はしている。
繰り返すが、書式 (マニピュレータ) の効果範囲を区切れないし、だから関数 (operator<<) 呼び出しのたびに書式フラグを読みにいくのを最適化で潰しにくいし、並列化のときに排他処理のコストもかかりやすくて全体として実行コストが大きいからだ。

書式化入出力以外の話題が混ざってたがそれについては脇に置いてる。

>>524
コンパイラ依存というなら operator<< だって実装次第でどうとでもなるだろ。
2026/06/07(日) 11:32:04.84ID:pL1tozTS0
>コンパイラ依存というなら operator<< だって実装次第でどうとでもなるだろ。

operator<<()はどのC++コンパイラでも似た動きをするので最適化しやすい
演算子の挙動に関わる話なのでコンパイラごとに違っていたらむしろ良くないくらい
527デフォルトの名無しさん (ブーイモ MM33-MRKe)
垢版 |
2026/06/07(日) 11:32:31.39ID:qrhU+w9lM
計測する習慣が身につかなかった底辺エンジニアの成れの果て
2026/06/07(日) 11:47:38.26ID:7nSMiSbz0
こういう人たちが日本をIT後進国にしているんだなあ
2026/06/07(日) 11:55:51.24ID:si7nOuFX0
なんだ?
仕事クビになって
5chで無双かましに来たんか?
2026/06/07(日) 12:10:16.66ID:pL1tozTS0
シュレーディンガーのねこ的な計測のジレンマに耐えらえるログバッファリング
531デフォルトの名無しさん (ワッチョイ 6937-MRKe)
垢版 |
2026/06/07(日) 13:28:44.30ID:rsN0Xg430
昼休みの間にAIにfmtのbenchmarkにstd::formatを追加させて計測
断トツで遅いostringstream
https://imgur.com/a/22D4e5d
ちな手元にあったVS2022で実行
ホラ吹きジジイ、まだ文句あるなら自分で動かしてからにしろよ
2026/06/07(日) 13:33:52.72ID:pL1tozTS0
>>531
他人を侮辱したり、AIを使ったりする前に、相手の話を理解する努力をした方がいいよ
operator <<()の話をしているのにostreamが遅いことを持ち出しても意味がない
2026/06/07(日) 13:43:38.52ID:pL1tozTS0
自身の理解力の弱さを自覚しているからこそAIに頼る気持ちが強いのだろうけど、AIに投げる質問自体が的外れなら効果は得られない
534デフォルトの名無しさん (ワッチョイ 6937-MRKe)
垢版 |
2026/06/07(日) 14:42:55.30ID:rsN0Xg430
>>532
だったらoperator<<は最適化が効くとか軽量とか根拠なくほざくなバカ
535デフォルトの名無しさん (ワッチョイ 491d-BNkS)
垢版 |
2026/06/07(日) 14:59:03.85ID:pL1tozTS0
一時インスタンス生成が必要ないのだから、軽量なのは当たり前
だからこそ今なおMecabだけでなく7zipやopenvinoなど様々なプロジェクトでバッファリングにoperator<<()が採用されている
2026/06/07(日) 15:59:19.98ID:GpazRL2Z0
>>535
std::print は文字列全体をひとつのオブジェクトとして生成したりしないと何度説明すりゃわかるんだ。
それとストリームの operator<< は書式化の機能で、書式化の機能を持たない (または機能を削った) 独自実装がたまたま表面的なインターフェイスとして opetator<< を使ってるからといって同列に持ち出すのも比較として筋が通らんだろ。
機能を削って良いならそりゃいくらでも軽量に出来るよ。
2026/06/07(日) 16:22:31.66ID:pL1tozTS0
>機能を削って良いならそりゃいくらでも軽量に出来るよ。

バッファリングクラスを自作すれば機能を削るどころか何もないところに少しづつ機能を足していくかたちになる。
ostream系とは別にopetator<<()を使った軽量高速な標準バッファリングテンプレートクラスがあっても良さそうなもんだけど。
C++のopetator<<()はJavaのStringBuilderクラスなどにはない可読性の優位があるのにあまり使われないのは勿体ない。
2026/06/07(日) 16:48:28.14ID:xwHVR++i0
俺は最初からログの話と思ってostreamは専用に弄ったものを使う前提で読んでるんだが
標準クラスをそのまま使う前提で叩いてる人も多いので俺の読み方が間違ってるのかと心配になる
<<はフォーマット文字列を意識せず雑に書いてもなんか出てくるからデバッグに向いてる部分は理解するが
それ以外の部分は、持ち上げてる方も叩いてる方も言い過ぎだろう
書くのが楽な場合もある程度の元々そんな大それた話じゃない
パフォーマンスだってデバッグ用かつIOを伴うとなれば実にどうでもいい
2026/06/07(日) 16:57:34.97ID:pL1tozTS0
C++17以降はstringインスタンスを一時生成しないstd::to_chars()が使えるのでバッファリングクラスを自作しやすくなってる
540デフォルトの名無しさん (ワッチョイ 69ee-DPV+)
垢版 |
2026/06/07(日) 17:13:30.48ID:lpZAXCrm0
ふとそういやWTLってあったなーと思い出して
今調べたら 最新が ver10.01 2026-03-01でビックリした
541デフォルトの名無しさん (ワッチョイ 491d-BNkS)
垢版 |
2026/06/07(日) 20:24:28.11ID:pL1tozTS0
>>538 の言う通りで、執拗に否定しようとする人がいて困ってた
C++スレなのに読解力の弱い人が的外れな意見を書き込むから面倒なことになる
2026/06/07(日) 20:37:37.58ID:GpazRL2Z0
主張が読み取れないという話をしてて、否定以前の部分なんだけど。
最初は ostream 系と言ってて、 operator<< が大事なんだという話に変わって、今はバッファリンククラス (???書式化は重要ではないという意味だろうか?) と言ってる。
何が何よりどのように良いと言いたいのかはっきりとまとめて欲しい。
2026/06/07(日) 20:44:00.68ID:7nSMiSbz0
いつもの超天才くんみたいだからもう相手しない方がいいよ
次は世界最高のC++マスターのぼくちんを理解できない愚民が悪いって言い出すでしょいつも通り
544デフォルトの名無しさん (ワッチョイ 491d-BNkS)
垢版 |
2026/06/07(日) 21:11:30.52ID:pL1tozTS0
coutを含むostreamはバッファリングクラスの一種であり内部バッファのrdbuf()がflushされるまでため込む仕様になっている。
std::format()は毎回書式指定が必要かつ一時インスタンスを多く生成するので直観的な記述や高速なログ出力には向かない。
operator<<()を使ったバッファ追加は直観的な記述が可能かつ一時インスタンスを必要としない優位性がある。
2026/06/07(日) 21:17:42.46ID:xwHVR++i0
>>544
最初に誤読されて叩かれて悔しいのはわかるが、引くに引けなくなって本筋ではないわけわからん主張を追加するから後を引くんだよ
一旦落ち着け
546デフォルトの名無しさん (ワッチョイ 491d-BNkS)
垢版 |
2026/06/07(日) 21:26:15.23ID:pL1tozTS0
>>545
最初からoperator<<()の話をしている
cout << "hello" << num << endl;のような<<で追記処理をつなげる記法が直観的でないというなら価値観の違いなのでどうしようもない
2026/06/07(日) 21:34:56.48ID:xwHVR++i0
>>546
それは俺には伝わってるが他の人には伝わってない
この状態でバッファとか効率とか枝葉の話をしても論点を増やした分だけツッコミやすくなるだけなので逆効果でしかなく、落ち着けと言ってる
(俺も突っ込みたい箇所も沢山あるが熱くなった頭で自分でもわけわからず書いてるだろうようなことに突っ込んでもしょうがないからやらない)
引っ込みがつかなくなってるのは叩いてる方だって同じだろうから、とにかく落ち着け以外に言えることはない
548デフォルトの名無しさん (ワッチョイ 491d-BNkS)
垢版 |
2026/06/07(日) 21:43:57.82ID:pL1tozTS0
>>490 でも書いたように、operator<<()を使うコーディングは、coutなどのインスタンスを直接記述せずにマクロで包んで処理全体をコメントアウトできるようにして使うのが楽
#define FOOBAR(x) std::cout << __FILE__ << ':' << __LINE__ << " " << x << std::endl
FOOBAR(1 << num << "abc=" << lpstr);
2026/06/07(日) 22:09:40.86ID:GpazRL2Z0
>>546
記法の話なのかという確認に対して答えず「軽量」というところを何度も繰り返していたから実行コストの話が焦点だと思っていたが違うのか?

>>544
念のために書いておくと、 std::format で文字列を生成するのが高コストになりうるというのは私は認めているし説明もしているからね。
だから std::print を比較対照にしてたんだが、あらためて確認するが優位性があると言っているのは記法の話なの?メンタルモデル的に分かりやすいと言いたいのが本筋なわけ?
2026/06/07(日) 22:34:59.32ID:pL1tozTS0
std::format()やstd::print()の存在価値は多言語対応なので、ここで比較対象にするのは違和感がある
2026/06/07(日) 23:22:34.16ID:VZuddOVE0
そもそもこの流れの発端って
>>451
だよな
2026/06/08(月) 00:05:23.62ID:dZrqwX8E0
>>551
そのとおり。ostream系クラスと表現をしたのは、operator<<()を使った実装例をまず想像してもらいたかったから。
ostream系クラスが処理速度が確かに遅いが、一時インスタンスを作らず内部バッファのrdbuf()に追記できるようになっている。
C++17で追加されたstd::to_chars()を使えば、operator<<()を使うバッファリングクラスを割と簡単に自作できる。
バッファのポインタとサイズの管理を独自実装する面倒はあるものの、
ログ処理中にメモリアロケーターを使いたくない環境での利用に向いている。
2026/06/08(月) 03:01:37.15ID:HA7FUjcH0
>>550
じゃあここからは std::print も std::print 的なデザインと解釈してくれ。
関数 (関数テンプレート内部で特殊化された各実装を呼び出す) に比べて演算子オーバーロードでやりたい理由は何?
2026/06/08(月) 03:14:50.33ID:HA7FUjcH0
外側だけの話なので実装は特殊化じゃなくてオーバーロードでもいいな。
性能に関して演算子でやるというのは特に寄与しないし、そこは単にメンタルモデル的に楽に感じるというだけ?
555デフォルトの名無しさん (ワッチョイ c14e-pZ0l)
垢版 |
2026/06/08(月) 04:39:02.09ID:90wYGeEQ0
>>522
プロを叩けるとなって狂喜乱舞するはちみつ
2026/06/08(月) 07:44:52.85ID:tzXC1u0n0
多言語対応されたstd::format()の書式指定は従来のprintf()系と同様に入力ミスしやすく、
JavaやP言語のprint()のような引数の順に出力するシンプルな出力機能を提供できていない
2026/06/08(月) 07:59:29.63ID:tzXC1u0n0
以下のようなoperator+()でつなぐ文字列連結は、operator<<()に比べて処理効率が悪い。
print("Hello" + i + "world")
各言語で一時インスタンスの生成を抑制する最適化が進んでいるとはいえ、文法の性質上、一時インスタンスを生成する可能性は今もある。
558デフォルトの名無しさん (ワッチョイ 6937-MRKe)
垢版 |
2026/06/08(月) 08:35:08.51ID:HGAZg7wj0
>>546
この違いを価値観で済ましてお茶を濁そうとしてるジジイ
こいつはstd::formatのこと何も理解してなかったがどうせostreamのこともたいしてわかってないだろ

std::println("{:>8}: {:#010x}", "val", 0xabc);

std::cout << std::setw(8) << std::right << "val" << ": " << std::showbase << std::internal << std::setfill('0') << std::setw(10) << std::hex << 0xabc << std::endl;
2026/06/08(月) 08:47:16.56ID:tzXC1u0n0
書式指定が面倒だという話をしている
「自分は書式指定に詳しい」とマウントを取るために煽るような文章を書きこむのは迷惑なので避けるべき
2026/06/08(月) 08:49:16.26ID:tzXC1u0n0
技術的な話題をするスレで侮辱的な表現を使うべきではないし、話題を意図的にゆがめるようなこともすべきではない
561デフォルトの名無しさん (ワッチョイ 6937-MRKe)
垢版 |
2026/06/08(月) 09:03:12.81ID:HGAZg7wj0
>>559
このレベルが詳しいと感じるのがお前の能力の低さをあらわしている
やってることは文字数指定、右詰め、16進数指定でしかない
こんなのログ出力で頻出だろ
お前みたいにデタラメ言いっぱなしで訂正しないカスはとことん叩く
2026/06/08(月) 09:08:05.82ID:tzXC1u0n0
>>561
デタラメは言ってない
勝手な思い込みで他人を攻撃するのは良くない
会話が成り立っていないので、絡んでこないでほしい
2026/06/08(月) 10:07:15.44ID:tzXC1u0n0
std::format()はstring型インスタンスの一時的な生成を避けられない
std::format()を多言語対応しない場合は構文解析の所要時間を削減できるが、多言語対応する場合は実行時に構文解析が行われる
564デフォルトの名無しさん (ワッチョイ 69d8-DPV+)
垢版 |
2026/06/08(月) 10:21:57.96ID:a3lZfHt00
>>563
もっとお話を聞きたいので、固定ハンドルを付けて頂けませんか?
565デフォルトの名無しさん (ワッチョイ 6937-MRKe)
垢版 |
2026/06/08(月) 10:34:10.16ID:HGAZg7wj0
>>563
ほんとお前は理解力が欠如したジジイだな
ストリームに出すならstd::print使うと何度も書かれているのにまだわかってない
なんならostreamにもprint関数が追加されている
でそれらの書式インフラはformatライブラリが提供している
だから総称としてstd::formatと言ってるだけだアホ
元のfmtではストリーム出力も内包していたが標準化では分離されただけ
2026/06/08(月) 11:10:18.91ID:tzXC1u0n0
ID:HGAZg7wj0 のような言葉使いの汚い人こそがコテハンつけるべきで、
穏当な回答者にコテハンつけさせるのは間違っている
2026/06/08(月) 11:14:34.44ID:ydKnmupm0
>>559
書式指定が面倒ならデフォルトの書式で出力するような適当な関数を作っておけばいいじゃないの。
再度問うけど関数ではなく演算子を良しとするのはどういう理由?
2026/06/08(月) 11:16:25.32ID:tzXC1u0n0
>>565 は、実質的な ID:HGAZg7wj0 の敗北宣言なのだけど、ID:HGAZg7wj0本人は必死に負けてないふりを装っている
見苦しい
2026/06/08(月) 11:27:52.23ID:tzXC1u0n0
>>567
>書式指定が面倒ならデフォルトの書式で出力するような適当な関数を作っておけばいいじゃないの。

書式指定せずに可変長引数を処理できる関数ならほぼ等価機能
2026/06/08(月) 12:03:19.24ID:Pq9aLbkv0
出力メッセージやログみたいな短文に関してはむしろへたにi18nしてほしくない場合も多々あるなあ
何十ページにもなる文書類なら翻訳ほしいけど
571デフォルトの名無しさん (ワッチョイ 6907-MRKe)
垢版 |
2026/06/08(月) 13:21:01.86ID:HGAZg7wj0
>>568
勝利宣言するジジイはウケる
お前が知ったかぶりしなきゃこんな状況にはなってねーの
お前の無知さはバレバレなんだよ
このスレでおまえの賛同者はゼロ
572デフォルトの名無しさん (ワッチョイ 6907-MRKe)
垢版 |
2026/06/08(月) 13:31:44.40ID:HGAZg7wj0
>>563
まだパフォーマンスの話をしたいなら比較のための計測をして数字を見せろよ
エンジニアなら当然だろ?
おまえの感想なんかいらねーんだよ
2026/06/08(月) 14:20:33.81ID:N5s0ya120
>>572
お前が一番いらない
574デフォルトの名無しさん (ワッチョイ 81e2-Kt3y)
垢版 |
2026/06/08(月) 14:32:42.44ID:uvlha9CD0
立ち去れ
2026/06/08(月) 19:18:49.01ID:XGF9wV0c0
このスレの一部住人は、C++の新しい言語仕様を利用することにばかり気をとられており、現場のC++プログラマーが失笑するようなバッド・ノウハウを提案する傾向が強い
2026/06/08(月) 21:11:05.86ID:GZzxtrYt0
失笑されているのが自分だって気づかない裸の王様がおるね
2026/06/09(火) 11:11:46.01ID:fXodCgRu0
Abseil C++ LibraryというGoogleの社内ライブラリでは直近の2026年6月5日にoperator<<()に関する更新が行われている。
https://github.com/abseil/abseil-cpp/blob/master/absl/log/internal/container.h
operator<<()はC++の初期から存在する記法だが、今も有用なのでメンテナンスされ続けているんだよ。
578デフォルトの名無しさん (ワッチョイ 6968-MRKe)
垢版 |
2026/06/09(火) 17:57:58.89ID:zkdJLXBG0
>>577
自分の言葉で説明できないジジイが今度はGoogleの権威を借りようとするとか

GoogleはC++規約的にprintfでなくstreamスタイルを使うというルールになっているが、決してstreamスタイルを激推ししているわけではない

https://google.github.io/styleguide/cppguide.html#Streams
ストリームコードではコードとデータが混在していることや、演算子のオーバーロード(期待したものと異なるオーバーロードが選択される可能性がある)が使用されていることから、ストリームの出力を正確に制御することは困難です
579デフォルトの名無しさん (ワッチョイ 6968-MRKe)
垢版 |
2026/06/09(火) 17:59:05.01ID:zkdJLXBG0
>>577
でabseilでは結局次のような出力方法がサポートされている
なんもわかってないジジイ草

LOG(INFO) << absl::StreamFormat("User: %s, ID: 0x%08x", "Alice", 0x123456);
580デフォルトの名無しさん (ワッチョイ 411d-BNkS)
垢版 |
2026/06/09(火) 18:53:42.36ID:fXodCgRu0
>>579
「○○できる」と「○○しなければならない」は、まったく違うことであり反論になっていない
他人を侮辱する書き込みをせずに反論できないのか
581デフォルトの名無しさん (ワッチョイ b377-R0U+)
垢版 |
2026/06/09(火) 19:08:54.41ID:Gfljtdm+0
これ別に有用だからじゃなくて単に古いAPIも機械的に直しただけのコミットですね
2026/06/09(火) 19:25:06.30ID:fXodCgRu0
以下2点を満たす文字列生成の記述方法がoperator<<()以外にあるなら教えてほしいのだが
・書式文字列を使わずに可変長引数を順番に処理できる
・stringなどの一時的インスタンスを作らない
2026/06/09(火) 20:00:53.89ID:fXodCgRu0
今思いつく、書式文字列なし文字列生成方法は以下の3とおり。

A. カンマを使った関数の引数区切りは", "の2文字。
 例:foo("hello", ' ', "world")

B. ビットシフト演算子つまりoperator<<()の連続呼び出しを使った名目上の引数区切りは" << "の4文字。
 例:foo << "hello" << ' ' << "world";

C. JavaのStringBuilder::append()ライクな連続呼び出しを使った名目上の引数区切りは".append()"の9文字。
 例:foo.append("hello").append(' ').append("world");

引数区切りに要する文字数が少なければ少ないほど、人間にとってキータイプの回数が少なく視認性も高いため、直観的な記述とみなせる。
>>582 はA.を一時的インスタンス生成なし&可変長引数対応で実現したい、と言う意味。
2026/06/09(火) 20:19:02.06ID:fXodCgRu0
プラス演算子operator+()の例を書き忘れたので一応、追記。

D. 他言語で多用される文字列連結の名目上の引数区切りは" + "の3文字。
 例:foo.("hello" + ' ' + "world");

このD.は一時的なインスタンス生成が不可避なので選択外。
585デフォルトの名無しさん (ワッチョイ b395-TsL4)
垢版 |
2026/06/10(水) 00:05:02.14ID:S+1WzGiz0
C++にはC#の文字列補完みたいなのはないんだっけ?

string name = "hoge";
Console.WriteLine($"my name is {name}");

こんなやつ
2026/06/10(水) 00:30:16.56ID:Zdw9zzEn0
変数名nameがコンパイル時とデバッグ情報にしか残らないC++には酷なスタイルではなかろうか
2026/06/10(水) 00:53:44.12ID:Zdw9zzEn0
個人的には $"" の記述がstringコンストラクタの糖衣構文として働くようになったら面白いと思う
2026/06/10(水) 01:08:42.28ID:UrzbkxPt0
変数名をプリプロセッサ展開するログ処理のマクロもoperator<<()なら比較的簡単に書ける

#define HOGE(val) #val << '=' << val << ", "
int foo = 123;
const char* bat = "ABC";
cout << HOGE(foo) << HOGE(bar) << endl;
589デフォルトの名無しさん (ワッチョイ 6968-MRKe)
垢版 |
2026/06/10(水) 02:15:17.14ID:uM4JYBn10
>>587
sリテラルとかユーザー定義リテラルあるけど?
590デフォルトの名無しさん (ワッチョイ 6968-MRKe)
垢版 |
2026/06/10(水) 02:16:17.10ID:uM4JYBn10
>>588
関数呼び出しでも同じようにできるだろマヌケ
お前はすっこんでろ
591デフォルトの名無しさん (ワッチョイ 411d-BNkS)
垢版 |
2026/06/10(水) 08:34:18.75ID:k+7uTbo/0
現状のC++の仕様では関数呼び出しで記述する場合、std::format()など一時オブジェクトの生成する関数に頼らざるを得ないだろう
2026/06/10(水) 09:04:45.27ID:k+7uTbo/0
C++20以降ならstd::to_string()に相当するオーバーライド関数を自分で作って可変長引数Args&&... argsの引数順に呼び出すテンプレート関数になるかな
2026/06/10(水) 09:35:13.30ID:jq+Y0q8G0
>>585
C++ 的な感性だと文字列補完としてではなく静的リフレクションの枠組みでやるべき、つまり直接に言語機能として提供するのではなくよりスコープの広い基本的な機能の上にライブラリとして構築されるべきと考えるのが自然だと思う。
C++26 に静的リフレクションは入る見込み (実質的な検討はもう終わっていて承認手続き待ち) だがそれでもまだ文字列の変数名から変数に置き換えるのは無理なのでその次に期待ってところ。
2026/06/10(水) 10:24:15.63ID:k+7uTbo/0
今のC++標準規格はデバッガで割り込みしづらい環境下での軽量なログ機能という視点が抜けており、まだまだ各開発者が独自の方法で対応せざるを得ない状況
とはいえ遅ればせながらC++23でstacktraceが標準化されたのは良い傾向
595デフォルトの名無しさん (ブーイモ MM8b-TsL4)
垢版 |
2026/06/10(水) 10:24:23.79ID:DPxFxv/FM
RustにもC#と同じ文字列補完あるんだよね
C++にもがんばってほしい!!
2026/06/10(水) 10:49:06.52ID:k+7uTbo/0
C++はほかの高級言語と違って、CPU時間、メモリなどの既存リソースへ極力影響を与えないログ機能の需要がある
ランタイム時に既存リソースへ大きな影響を与えてしまうならどれだけログ機能が豪華になっても、あまり使われないだろう
2026/06/10(水) 11:22:29.26ID:k+7uTbo/0
>>565のような低速なttyへの出力の話ばかりする人はC++のことをまったくわかっていないと思う
598デフォルトの名無しさん (ワッチョイ 8b5f-S+nI)
垢版 |
2026/06/10(水) 12:36:48.26ID:wtlU8sbi0
QTの関数使ってると、ファイルを生成する時、
コピーとか解凍とかすると、プチフリみたいなことが起きる
エクスプローラと同じ関数使った方が良いんか
2026/06/10(水) 12:38:01.77ID:Zdw9zzEn0
>>589
C++11から勉強中だからSリテラルは知らなかった、教えてくれてありがとう
C#は$文字列中の{}はもはや式文で、typoはコンパイルエラーになるしエディタによって赤表示してくれるのがいい
教えてくれた2つのリテラルではちょっと実現できないと思う

Rustができてるなら、C++も追従してほしいね
2026/06/10(水) 12:47:54.33ID:Zdw9zzEn0
>>598
QT詳しくないしどの辺の話題かも読み取れなかったけど、マルチプラットフォーム向けの開発でWin32API使ったほうが良いかという話だと、あまりよろしくないのではないかと
2026/06/10(水) 13:42:50.41ID:jq+Y0q8G0
全く環境依存なし (依存する部分は Qt 内で吸収する) というのは諦めたほうが良いと思う。
Qt はリッチなフレームワークとは言えどもあらゆる面の細部に至るまで全く不足がないというわけではないし、不足している中で汚くやりくりするか環境依存を許容するかなら環境依存をしたほうがマシなこともある。
特に問題がないならなるべく Qt の用意している API を使うべきだろうけど、実際に問題があるんでしょ?
欲をいうなら Qt を改善したらもっと良いけど。
2026/06/10(水) 14:04:33.58ID:k+7uTbo/0
まず疑うべきはウイルス対策ソフトの設定だろうけど
2026/06/10(水) 17:22:02.70ID:z35PqeRF0
>>598
こういうのこそ…っていうことで、AIにぶん投げた

・QFile::copy()はブロッキング。それをメイン(UI)スレッドでやっちゃうのが あるある
・プチフリするからって QCoreApplication::processEvents() を呼ぶってのがwebに出ているが、これはアンチパターン
・QFile::readAll()なんかつかってると、どかっとメモリ確保するのでページフォールトでプチフリが加速する

そういう世界なのね、うん、たぶんQtスレ行ったほうが幸せになれる
2026/06/10(水) 17:38:02.67ID:Zdw9zzEn0
状況が掴めてないのに否定的な発言は良くなかったわ
>>598>>600気にしないで
605デフォルトの名無しさん (ワッチョイ 69e1-tI3w)
垢版 |
2026/06/11(木) 05:44:41.56ID:Ca1kJbre0
>>597
operator overloadを使ったら軽量ロガーになるという珍説を証明したいなら計測してその数字を示せと言っただろ
やり方しらんのか
606デフォルトの名無しさん (ワッチョイ 69e1-tI3w)
垢版 |
2026/06/11(木) 05:52:06.25ID:Ca1kJbre0
>>596
c++で有名なロガーライブラリといったらspdlogだがこれもfmtを使っている
最近ならそれよりさらに高速なQuillがあるがこれもfmtを使ってる
お前c++界隈のこと何も知らないカスなの自覚した方がいいぞ
2026/06/11(木) 08:41:59.01ID:P5O/X5j+0
std::cout << "Hello, world!¥n";
は皆が知ってる僕らの永遠のアイドル!
2026/06/11(木) 10:20:11.43ID:RJINUrDg0
書式文字列を「使える」ことと「使わなければならない」ことは別だけど、使えるに越したことはない

以下の>>579 のようにストリームの実体LOG(INFO)をコードに直接書くと、リリースビルド向けにログ出力をコメントアウトしきれない
LOG(INFO) << absl::StreamFormat("User: %s, ID: 0x%08x", "Alice", 0x123456);

どうせマクロを使うなら、>>490 のようにストリームの実体を隠蔽するのが無難。マクロの書き方次第でログコードそのものを消せる。

#if 1
#define LOG(x, y) if (IS_HIT_DLGFLG(x)) { cout << y << endl; }
#else
#define LOG(x, y)
#endif

LOG(INFO, 1 << num << "abc=" << lpstr << absl::StreamFormat("User: %s, ID: 0x%08x", "Alice", 0x123456));
2026/06/11(木) 11:26:01.36ID:RJINUrDg0
>>592 を試してみたが、可変長引数Args&&... argsの場合、スタックが引数の逆順に呼び出されるのを回避するにはインスタンスの一時的生成が不可避。
よって、残念ながら下記URLの可変引数テンプレートと「パラメータパックの拡張」は使えない。
https://cpprefjp.github.io/lang/cpp11/variadic_templates.html

一時インスタンスを生成せず引数呼び出し順で追記を実装にするには引数の数に応じた従来通りの関数オーバーロード定義が必須になる。
関数でoperator<<()と等価の機能を実装する例は以下のとおり。ここでは引数の数は1個から4個まで定義した。

template<typename OS, typename T1> OS& AddTest(OS& os, const T1& a) { os << a; return os; }
template<typename OS, typename T1, typename T2> OS& AddTest(OS& os, const T1& a, const T2& b) { os << a << b; return os; }
template<typename OS, typename T1, typename T2, typename T3> OS& AddTest(OS& os, const T1& a, const T2& b, const T3& c) { os << a << b << c; return os; }
template<typename OS, typename T1, typename T2, typename T3, typename T4> OS& AddTest(OS& os, const T1& a, const T2& b, const T3& c, const T4& d) { os << a << b << c << d; return os; }

AddTest(std::cout, "hello", ' ', 1, "world");
2026/06/11(木) 13:05:30.96ID:RJINUrDg0
>>609
訂正
以下のようにstd::forward()をつかって可変長引数を引数順に追記できたわ

#include <utility>

template<typename OS>
OS& AddTest2(OS& os) { return os; }

template <typename OS, class Head, class... Tail>
OS& AddTest2(OS&os, Head&& head, Tail&&... tail)
{
os << head;
return AddTest2(os, std::forward<Tail>(tail)...);
}

AddTest2(std::cout, "hello", ' ', 1, "world", 55) << std::endl;
2026/06/11(木) 13:34:01.08ID:Wz2yfzb40
そんなん書いても99割読んでねえぞ
2026/06/11(木) 13:53:43.06ID:RJINUrDg0
operator<<()と等価機能の書式指定なし可変長引数の追記処理はstd::forward()を使えばC++11のころから利用可能だった、ということになる。
引数の数だけ再帰呼び出しが深くなる問題はあるがstd::forward()のコストが小さいなら十分代替可能なのかもしれない。
なお、上述 >>609,610 サンプルのテンプレート関数のストリーム型をostreamではなくtypenameにしているのは、ostreamから派生しないクラスでも使えるようにするため。
2026/06/11(木) 14:16:14.20ID:RJINUrDg0
>>611
要は、C++に新機能が追加された今でもすなおにoperator<<()を使うのが最適なことが多いという話。
2026/06/11(木) 14:44:17.14ID:RJINUrDg0
>>605
> operator overloadを使ったら軽量ロガーになるという珍説

これ以上速くしようがないレベルの話であり、考えれば誰でもわかる。珍説と考える人は論理的思考力が弱い。
JavaのStringBuilder.append(x)相当の処理が連続呼び出しされているだけなので、軽量なのは自明であり証明不要。
計測したいならoperator<<()を受け取るクラスを自作して思い思いの条件で試せばいいだけ。
2026/06/11(木) 20:29:06.39ID:OMe8BQUG0
統合エディタが勝手に閉じカッコ書くのすげー使いづらい
前から後ろに書きたいんじゃ
616デフォルトの名無しさん (ラクッペペ MM8b-tZzN)
垢版 |
2026/06/11(木) 20:35:17.65ID:kRK1kPewM
そういうのって設定にあるんじゃない?
2026/06/11(木) 20:45:16.09ID:VWwWdhkJ0
比較演算子の < を入力しようとしたのにテンプレート引数だと思われたのか > が補われたことがある。
2026/06/11(木) 21:11:17.96ID:ZfEMKNH1a
俺は emacs のエレクトリック文字とかいうクソ機能はぜんぶ殺してる
そもそも俺がコード書くときはボーッとして無意識に入力してる時ですら例えば
hoge() といきなりカッコ閉じまで書いて無意識にカーソルひとつもどしてからかっこの中を書くので
こういう余計な補完機能はほんと邪魔にしかならない
2026/06/11(木) 23:48:29.40ID:P5O/X5j+0
class CCC {}; まで一度に書きたいのに}だけ補完され;無しのままカーソルがカッコの中なの許せない
2026/06/11(木) 23:56:54.66ID:P5O/X5j+0
と思ったが補完無視してタイプすれば問題なかった
2026/06/12(金) 00:18:33.89ID:Q5++65Sj0
>>610
第2引数に文字列を増やせばヘッダ、カンマ、>>588の最終カンマ問題解消ができます一応
622デフォルトの名無しさん (ワッチョイ 411d-anDy)
垢版 |
2026/06/12(金) 09:32:21.75ID:WLOdnAUI0
>>621
マクロでラップして # __VA_ARGS__ を使うとか?
面白そうなのでもっと詳細を
623デフォルトの名無しさん (ワッチョイ 9b06-anDy)
垢版 |
2026/06/12(金) 12:57:59.07ID:Q5++65Sj0
>>622

https://paiza.io/projects/53QLGj2TxcFW343y0SlWkg?language=cpp
624デフォルトの名無しさん (ワッチョイ 411d-anDy)
垢版 |
2026/06/12(金) 13:39:55.84ID:WLOdnAUI0
>>623
サンプルコードの提示ありがとう
複数個まとめて引数を減らすテクや、forwardを使わなくてもargs...のままで再帰呼び出しをイケる、という知見を得られた
2026/06/12(金) 18:39:55.16ID:Q5++65Sj0
>>624
値渡しが無い様に途中で直しましたが、実行効率は気にしてないので参考時は改めて判断お願いします。
ダンプなのだからvalue引数もconstが良いのか等判断がつかず、私もまだ不勉強です
626デフォルトの名無しさん (ワッチョイ c14e-pZ0l)
垢版 |
2026/06/13(土) 05:15:53.61ID:OtU81Fyj0
軽くしか見てないから勘違いしてたらスマンけど、ユニバーサル参照じゃないならforwardいらんよ
627デフォルトの名無しさん (ワッチョイ 411d-anDy)
垢版 |
2026/06/13(土) 09:02:25.17ID:IzH1EUzk0
>>626
情報ありがとう。
ユニバーサル参照と聞いて気づいたのだけど、関数定義 >>610のAddTest2(OS& os, ...) や >>623のdump_var(O& os, ...) は、
第1仮引数を従来の参照からユニバーサル参照OS&& osに変える、つまり、
AddTest2(OS&& os, ...), dump_var(O&& os, ...)に変えることで、一時的な変数にも利用できるようになる。
具体例としてクラスHogeの一時的インスタンスに書き込んで取得する AddTest2(Hoge(), "foo", 1, "bar") も可能ということ。
従来の参照のままだとコンパイル時に警告やエラーになってしまう。
628デフォルトの名無しさん (ワッチョイ 411d-anDy)
垢版 |
2026/06/13(土) 09:22:08.72ID:IzH1EUzk0
自作バッファリングクラスを必ずしもoperator<<()オーバーロードまみれで記述する必要はないけど、
ostreamインスタンスに対して書き込む既存のソースコードをテンプレート関数化して汎用したいならoperator<<()オーバーロードはやはり有益。
老舗旅館の増改築のようなostreamやostringstreamを反面教師として軽量な自作バッファリングクラスを作るのはけっこう楽しいのでやってみるといい。
629デフォルトの名無しさん (ワッチョイ 411d-anDy)
垢版 |
2026/06/13(土) 09:58:31.69ID:IzH1EUzk0
プリプロセッサ演算子の一種で変数名を文字列に変換するのに有用な文字列化演算子#は、引数の配列 __VA_ARGS__ に対しても利用可能で、
関数呼び出しの引数の途中で改行されたりコメントが紛れ込んでいても良きように計らってくれるので、# __VA_ARGS__ の利用は結構おススメ
2026/06/13(土) 09:59:13.85ID:/yTTL/2U0
>>627
ムーブしないなら転送参照 (万能参照; ユニバーサル参照) にする意味がない。
const 参照は左辺値参照であっても右辺値を受け取れるよ。 (もちろん左辺値も受け取れる。)
631デフォルトの名無しさん (ワッチョイ 411d-anDy)
垢版 |
2026/06/13(土) 10:35:03.19ID:IzH1EUzk0
>>630
なるほど。。。
再帰呼び出しする関数AddTest2()を直に呼ばず、参照とユニバーサル参照の別々のオーバーライド関数の中で読んだほうが良さそう
2026/06/13(土) 10:52:19.15ID:/yTTL/2U0
文脈から明らかなのでそんなに重要ではないけどオーバーライドでなくオーバーロードね。
(なんか >>457 からずっとオーバーライドと書いてるのでちょっとしたミスではなく間違って覚えてる可能性があると思って念のため指摘。)
C++ 用語的にはオーバーライドは仮想関数を派生クラスで定義の置き換えすることを言う。
633デフォルトの名無しさん (ワッチョイ 411d-anDy)
垢版 |
2026/06/13(土) 11:25:31.63ID:IzH1EUzk0
>>632
その通り。それぞれ違うものと知りながら間違えていた。以後気をつける。

C++標準のバッファリングクラスostringstreamは、sizeof()が、MSVCで232バイト、WSL2のg++で376バイトとなり、スタックで利用するにはやや巨大。
派生元のostreamはsizeof()がMSVCで112バイト、WSL2のg++で272バイトになる。
ostringstreamはostreamの派生クラスという性質上、ostreamよりもスタックを消費する困った代物であり、
多くの開発ライブラリがostringstreamの代替となる軽量かつ高速なバッファリングクラスを自前で用意しているのは当然のことと言える。
634デフォルトの名無しさん (ワッチョイ 6da4-9O8W)
垢版 |
2026/06/16(火) 03:01:51.91ID:8oslX9HY0
>>598
QtではGUI部品はメインスレッドでイベントループに入っていないと固まるから、プチフリ嫌なら負荷がかかる処理は全部サブスレッド実行する必要がある。
2026/06/16(火) 19:30:01.05ID:vjRNZ0V60
C++言語に「ネコミミ」演算子!? かわいい顔して強力なメタプログラミング機能を提供 - やじうまの杜 - 窓の杜
https://forest.watch.impress.co.jp/docs/serial/yajiuma/2117584.html
2026/06/16(火) 20:03:34.01ID:0FDI/M0K0
^ 単体で排他的論理和を意味するわけだがその意味でふたつ連続する使い方はあり得なかった。
逆に言えば ^^ だと必ずリフレクション演算子であることが高度な構文解析を経るまでもなく確定する。
上手い選択だと思う。
2026/06/16(火) 20:20:41.02ID:j2UY3q5sa
auto r = ^^b;) // ← パソコン通信時代の顔文字にみえる
2026/06/16(火) 20:25:22.24ID:G+WCJJLi0
かつてはfoo<vector<Bar> >が要スペースだったのも良い思い出
639デフォルトの名無しさん (ワッチョイ 591d-ziOc)
垢版 |
2026/06/16(火) 20:27:18.17ID:vjRNZ0V60
検索エンジンやAIは、演算子を重要なキーワードとして認識せずただの記号として捨ててしまうだろうから、知識が共有されづらいかもしれない
キーワードとして検出しづらいという点では、C++のラムダ式も同じ問題を抱えている
PerlがPythonの後塵を拝した原因のひとつが、キーワードとして検出しづらい特殊変数だった
2026/06/16(火) 21:02:46.54ID:hqSoL+ez0
>>639
> キーワードとして検出しづらい特殊変数だった

どういう意味?
詳しく
641デフォルトの名無しさん (ワッチョイ 6dda-a1bE)
垢版 |
2026/06/16(火) 21:18:22.05ID:NWITRD5L0
ググラビリティが悪いって事やろ
2026/06/16(火) 21:25:21.30ID:j2UY3q5sa
ググラビリティでいうと go は最悪
検索の覇者グーグルのくせに go ってなんだよ go ってバカじゃねーのwwww
っておもった
643デフォルトの名無しさん (ワッチョイ 6dda-a1bE)
垢版 |
2026/06/16(火) 21:39:02.69ID:NWITRD5L0
GO→行く、囲碁
RUST→錆、RUST(ゲーム)
C# C++→記号が認識されない
C R→1文字は最低文字数やアルファベットに引っかかる可能性
2026/06/16(火) 21:43:19.14ID:j2UY3q5sa
C/C++ はもちろんのこと C# もまだググラビリティとかそんなに意識しなくていい時代の発明品だからいいけど
go なんて自分とこがやってるサービスの本質なんもかんがえずに名前つけてアホじゃねーの、っていう
645デフォルトの名無しさん (アウアウウー Saa5-lrjJ)
垢版 |
2026/06/16(火) 22:16:06.19ID:FO3SxX/Na
Julia→av
2026/06/16(火) 23:08:00.01ID:0FDI/M0K0
やってみたのか? 記号類もちゃんと認識される。
少なくともグーグルや Bing 、 DuckDuckGo みたいな主要ウェブ検索が記号類を問答無用で除去するなんてことはないよ。
トークナイザが切り分けるのが上手くいってないのか適切なページにマッチしないことは結構あるが C++ や C# といった名前くらいは問題なく C++ や C# として認識される。
647デフォルトの名無しさん (ワッチョイ 6dda-a1bE)
垢版 |
2026/06/16(火) 23:13:08.30ID:NWITRD5L0
すまん検索エンジン以外も含めてる
648デフォルトの名無しさん (ワッチョイ 6d35-Ffsa)
垢版 |
2026/06/17(水) 06:13:45.04ID:lvRO82bE0
goはgolangっ入れればよくね?
もう検索する時代じゃないけど
2026/06/17(水) 08:56:24.64ID:UoxAeQY00
Go を Golang にする慣例は良いんだがそれを言語全体の慣例だと勘違いしたのか C の記事のハッシュタグに Clang と入ってることが結構あってイラッとする。
2026/06/17(水) 09:29:46.48ID:A9czWaBL0
熟考の末に採用された演算子<<オーバーロードと追記処理の相性の良さを理解できない初心者がC++98誕生から30年近く経った今でもいる原因のひとつが、
演算子が人間にとっても検索エンジンにとっても探しにくいことにある

リフレクション演算子やスプライス演算子が演算子である必要はまったくなかっただろう
sizeofやtypeidのようなグローバルスコープの演算子キーワードがこれ以上増えないよう名前空間に閉じ込めたテンプレート関数での機能提供にしたほうが良かったのではないか
651デフォルトの名無しさん (ワッチョイ 994e-Gxjf)
垢版 |
2026/06/17(水) 23:46:05.02ID:VGIYVORh0
>>636
^^はD言語でのように累乗演算子として割り当てられるべきだったと思う。
652デフォルトの名無しさん (JP 0Hf6-9O8W)
垢版 |
2026/06/18(木) 04:39:08.29ID:dxYvew7jH
>>651
いちいちstd::pow()とかめんどいもんな
653デフォルトの名無しさん (ワッチョイ 6d89-Ffsa)
垢版 |
2026/06/18(木) 16:17:04.20ID:jdpG1dl00
静的リフレクションはいいけどどうせデバッグ手法はコンパイラのベンダーまかせで正味ろくなデバッグツールは提供されんだろな
このあたりの開発者体験がいまだに軽視されてるところがc++のクソなところだよ
654デフォルトの名無しさん (ワッチョイ 591d-ziOc)
垢版 |
2026/06/19(金) 12:48:28.03ID:PTJi/AuJ0
>>558 みたいな開発者視点の乏しい人がC++スレでオラつく現状は健全ではないね
書式文字列だけでは解決できない多言語環境や多様な書体に対する想像力が欠如してる
655デフォルトの名無しさん (ワッチョイ 9279-7+Od)
垢版 |
2026/06/19(金) 13:18:04.52ID:O9A3wpTv0
std::mutexって存在意義ないですよね?

いままでWin32 API使ってたので名前付きミューテックスが当たり前だと思ってました
std::mutexは名前付きじゃないのでプロセス間の同期処理に使うのは難しいようです(検索してみたところ共有メモリを介してあれこれするらしい)
C++標準ライブラリにも名前付きミューテックスがあればいいのに、、、
2026/06/19(金) 14:42:43.39ID:lIVJD6Z/0
プロセスをまたぐ処理は OS の協力がないと成立しないし、 OS がプロセス間同期を提供するモデルを言語側が決めつけることはできない。(そもそもプロセスの概念がない環境だってあるだろう。)
言語仕様で決めてもその通りに実現できないと意味がないので実行環境 (ホスト) によって差が大きいところはあまり積極的には決めないか最大公約数的に最小限だけなのは C++ の思想として普通。
標準ライブラリだけで全部をできるようにしようとはしてない。
2026/06/19(金) 15:52:04.72ID:PTJi/AuJ0
C++11でスレッドが標準化されたことでmalloc, free系システムコールがスレッド・セーフのために排他ロックしうることを想定しなければならなくなった
高機能ではあるもののstringインスタンスを一時的に大量生成するstd::formatは、タイミング依存の現象に対する監視ログ出力に不向き
658デフォルトの名無しさん (ワッチョイ 9238-7+Od)
垢版 |
2026/06/19(金) 16:08:04.21ID:O9A3wpTv0
>>656
ありがとうございます

Qt core の QSystemSemaphore の使用を検討してみます
Linux / Windows でなるべく同じコードにしたかったので sem_open は避けました
659デフォルトの名無しさん (ワッチョイ 922b-pKxw)
垢版 |
2026/06/19(金) 17:49:34.75ID:2F5mDYDa0
stringインスタンスを大量生成ってなに?
660デフォルトの名無しさん (ワッチョイ 6d70-Ffsa)
垢版 |
2026/06/19(金) 18:46:16.74ID:09P/+d3H0
>>655
当然ながらstd::mutexの方がはるかに軽量なので通常のインプロセスの排他制御で性能意識するならこっちを使う
Win32で言うならCRITICAL_SECTION に相当するもの
ま、でも WaitForMultipleObjectsで同時待ちできるのでMutexを使いたくなるのはある
2026/06/20(土) 16:09:22.84ID:mcQsmb5t0
ずっとPython使ってたら、
C++だんだん忘れてきてきる…
662デフォルトの名無しさん (ワッチョイ 79a1-QJeU)
垢版 |
2026/06/20(土) 16:22:01.47ID:eeWopVC/0
Python触ってると退行していく感じがして仕事以外で使ってない
昔のBASICを弄ってる感が強くてな
2026/06/20(土) 17:16:52.57ID:KWbWTLA1a
わかる
あんなクソ言語、金もらえなきゃ使う気なんてまったくおきない
2026/06/20(土) 18:42:45.53ID:6DeWQ7pn0
Windows版Pythonはsubprocess.run()を使ったpyスクリプトが、batスクリプトの代替やPowerShellの貧弱なaliasの代替として重宝する
Windows版PerlがいまだにANSIコード縛りなのとは対照的に、Windows版PythonはUnicode対応済みでUTF-16やwstringでプラグインを書ける
2026/06/20(土) 18:42:55.15ID:mcQsmb5t0
>>661
まあでも、
作ってるものは最先端
2026/06/20(土) 18:54:13.19ID:Bza0fqjO0
AI扱うならPythonは避けて通れないからな
どんなクソ言語でもエコシステムを作り上げられたらそれが正義なんだよ
2026/06/21(日) 07:34:05.79ID:hYidpCxV0
平田豊さんが今更 書いてる。
2026/06/21(日) 09:47:17.11ID:TTWKReyS0
Pythonってコンパイラなかったっけ?
おまいらは使ってないの?
2026/06/21(日) 11:17:48.52ID:YHprLyhf0
Cython,PyPy,Nuitka,mypyc,Pyston…
結局どれも中途半端だったな
2026/06/21(日) 13:13:57.96ID:f8AFR3e70
>>666
まあ、
PythonとC++の両方使うけどね
最先端の開発

constとか無いし…
671デフォルトの名無しさん (ワッチョイ 5f1d-NImZ)
垢版 |
2026/06/22(月) 11:26:53.64ID:d/zEw5d30
>PowerShellの貧弱なaliasの代替

具体的にいうと、PowerShellは引数つきコマンドをaliasにできないので、Pythonが代替として優れている
bat拡張子のバッチスクリプトだとCTRL+Cで中止シグナルを受け取った後にY/nメッセージが出て良くない

機械学習やAIでPythonが使われる傾向があるのも、Pythonが他のスクリプト言語に比べてプロセス間通信の機能が優れているからであって、
プログラミング言語としてのPythonそのものは野暮ったい
672デフォルトの名無しさん (ワッチョイ 5f1d-NImZ)
垢版 |
2026/06/22(月) 11:42:50.45ID:d/zEw5d30
最近ようやくマイクロソフト謹製grepがCoreutils経由で提供された。
Coreutilsのgrepは色付き表示オプション--color=autoがデフォルトになっている。
バッチプログラムでgrep='grep --color=auto'のようなaliasを代替すると、引数でサーカムフレックス「^」のエスケープを意識する必要があった。
前述のようにPowerShellは引数付きaliasをサポートしないのでfunctionで代替したいところだが、PowerShellはfunctionのパイプ接続が高機能の代償として遅いので使い物にならない。
軽量なPythonスクリプトをラッパーとして使わざるを得ないことが多い。
2026/06/22(月) 11:50:37.61ID:tuPvu1ow0
JScript なら確実に Windows にあるし、少し高度なシェルスクリプトみたいなことをやりたいなら私としてはこれを推したいんだがマイクロソフト的には WSH をフェードアウトしたいみたいだから微妙な存在になってしまった……
2026/06/22(月) 12:01:41.73ID:TR+Xl3ql0
OSに抱き合わせでついてくるcsc推し
C#5縛りになるが、だいたいのことはできる
なんならDLLは呼び放題

>>61 が俺だが、C++erならC#は「使ってるうちに覚えられる」範囲にある
2026/06/22(月) 12:14:28.97ID:DRqm4hLFM
>>674
そこはjscを推せよ
JScript.NETなんて激レアだろ
676デフォルトの名無しさん (ワッチョイ dfe2-VAvK)
垢版 |
2026/06/22(月) 15:47:13.06ID:gBe6h/Yh0
Pythonのコンパイラが流行らないのは
結局Pythonのインタプリタで出来る範囲を超えないから
ネイティブの速度でPyObjectを扱えるってだけで
ネイティブの速さになる訳じゃない
677デフォルトの名無しさん (ワッチョイ 7f89-kjau)
垢版 |
2026/06/22(月) 18:17:47.30ID:T1W+1bp70
cライブラリ叩いてるだけだからそもそもいらん
2026/06/22(月) 20:00:40.42ID:Jw0BHmCl0
>>670
実行しないと型がわからないのは不便だわ
まあでも、これで最先端が作られてるからな…
Python
2026/06/22(月) 20:25:02.58ID:8wvhHATQ0
>>676
意味が分からないんだが
特定言語(特定環境下)でのインタプリタもコンパイラも出来ることは同じじゃないの?
C++とか含めてのコンパイラが流行っている言語はインタプリタに出来ないことが出来ているからなの?
2026/06/22(月) 20:59:30.06ID:L+3qvPfV0
性能的に足を引っ張っているのは動的型という部分で、これは要するに実行時に型のチェックをしたり管理用のテーブルをたどるなどの余計なことをしなければならない (事前にわからないので) ということを意味する。
ネイティブコードにしたところでそれをやらなくてよくなるわけでもないし、インタプリタであっても (処理系内部の) ネイティブコードの部分がやってたことなのでなにも変わらない。
ネイティブコードにコンパイルしてもインタプリタですでにやってたことより良くならないということを言ってる。

ここでは前提として「動的型の Python をネイティブコードにコンパイルしようとしないのは」「もしネイティブコードにコンパイルしてもインタプリタの Python と比べて」という話であって、C++ などと比較しての話ではない。
2026/06/23(火) 09:37:24.89ID:0E3vdVUZH
VSスレとのマルチになっちゃうんだけどVC++23のstatic lambdaってピュアな関数ポインタ返してくれる?
VC++20以下のlambdaだとキャプチャ一切なくても返されるポインタはキャプチャ用の第一引数rcxを退避させるラッパが1段挟まったものになっていたのだけど
2026/06/23(火) 09:57:36.81ID:3vnnehfM0
>>681
C言語愛好家に長く親しまれているFILE*の実体FILE構造体の仕様は、長く親しまれている日清カップヌードルの四角い茶色い具材「謎肉」同様、仕様が定まっていない
2026/06/23(火) 10:26:39.25ID:LGV/0++40
>>681
何か前提を勘違いしてると思う。
ラムダ式の値の型はクロージャ型。
static を付けてもクロージャ型であることは変わらない。

関数ポインタとの関係とか呼び出しのメカニズムを説明しようとすると長くなるんでどこがわかってないのかがわからないと説明しづらいが ABI の通りに解釈すればラムダ式に static を付けたら this の受け渡しをしなくなるはずではある。
手元に MSVC を入れてないから確かめてないけど。
2026/06/23(火) 10:28:14.76ID:Jbh1W4+v0
>>681
自分もVC使いなので、興味があったのでAIにぶん投げたてみた AIの答えは、「期待できる」だった
なので、実際のコードで、(成功を期待して)/Fa だったかで汗生成して、みてみるといいかと
2026/06/23(火) 10:29:57.12ID:Jbh1W4+v0
うおっえらい御仁とかぶったw
2026/06/23(火) 10:57:17.46ID:0E3vdVUZH
>>683
MSVCはlambdaの受け取り先がポインタであれば自動で呼び出し規約まで揃えたものを返してくれる
勿論その場合はキャプチャは許されないけど、許されないにも関わらず上述した通りまるでキャプチャ変数があるかのような非効率なアセンブラが生成される
これが大変気に食わないけどWin32のコールバック関数なんかを一々他に定義するのが面倒だから即値でlambdaを与える書き方を多用してしまってるので改善されてるならアプデしようかなーと思った所存
2026/06/23(火) 10:59:31.25ID:0E3vdVUZH
>>684
実装動機的にもパフォーマンス面で有利になる事を期待したものだしさすがにそうなってる可能性が高いよね
これ以外にはC++23にする意義があまり見つからないから改善されてなかったらスキップしようとは思ってたけど
2026/06/23(火) 11:08:43.41ID:LGV/0++40
>>686
クロージャから関数ポインタへは (キャプチャしていないときに限り) 暗黙の型変換が許されていて変換した後なら関数ポインタそのものだから関数ポインタの ABI を当てはめられるはずなのだが……
そうじゃないとしたらちょっとおかしいな。
2026/06/23(火) 11:17:21.20ID:mbMp8Ojs0
ABIとかじゃなくて出力コードの質の話でしょ。
681が最初から例になるソースとアセンブリを挙げて話せば誤解もなかっただろうに。
2026/06/23(火) 11:20:21.37ID:Jbh1W4+v0
貼っておくか。「何の話?」と思ってる人用 https://share.google/aimode/903Xp9QU4rDacx3jt
691デフォルトの名無しさん (ブーイモ MM9f-XTBv)
垢版 |
2026/06/23(火) 15:38:31.09ID:9qt1NNSjM
>>686
昔から
auto f2 = +[](){};
で関数ポインタ得られるテクニックあるよ
2026/06/23(火) 16:42:16.54ID:Jbh1W4+v0
はっきりいって串だな
693デフォルトの名無しさん (ワッチョイ dfa1-uirr)
垢版 |
2026/06/23(火) 17:20:00.25ID:rS1nF0q50
🍡
2026/06/23(火) 18:54:10.10ID:9yxUF3mx0
単項+にこんな用途があったなんて、、、草(あるいは串)
2026/06/23(火) 21:24:42.45ID:H3iLDTPz0
以前に説明したような記憶があると思って検索したら前々スレだった。
https://itest.5ch.io/mevius/test/read.cgi/tech/1698705458/754
2026/06/23(火) 22:36:32.76ID:mAcX9abna
+ネギ、ウズラ卵、鶏皮;
2026/06/24(水) 00:01:09.57ID:A3+Amlrg0
単純なgrep検索でC++ラムダ式の利用箇所を見つけ出すのは大変
その点、バカ丁寧にlambdaと書かせて読み手の注意を引くPythoラムダ式は可読性が高い
2026/06/24(水) 00:22:32.16ID:biqyVSqi0
>>695
最近スレを覗くようになりましたが去年も持ち上がった話題だったのですね
少しログも漁ってみようか、、、
699デフォルトの名無しさん (ササクッテロラ Spb3-9UmW)
垢版 |
2026/06/24(水) 10:27:17.59ID:st+X5yaVp
>>685
そういうのやめろって
2026/06/25(木) 20:26:38.76ID:tbUgXolQ0
絵文字にはだんご🍡(U+1F361)とおでん🍢(U+1F362)が用意されているが焼き鳥はない
701デフォルトの名無しさん (スフッ Sd9f-5Dde)
垢版 |
2026/06/27(土) 14:47:53.43ID:V79csoB6d
test 🀐
2026/06/27(土) 20:13:31.09ID:8PKUXZUl0
上の単項+演算子は
本当は単項&演算子をオーバーロードしたかったのにできなくて血涙
2026/06/27(土) 21:30:40.51ID:8PKUXZUl0
質問なのですが
クラスの定義の中の定数定義っていつからdoubleとかも定義できるようになったんじゃわ?
今やったら
class Foo {
  static constexpr double DEG2RAD = M_PI / 180.0;
};
が通ってビビった
まさかC++で!
よりにもよってストロストラウップがenumあるんだからクラス内のstatic const int とかいらんわ
と抵抗したあのC++で!!
こんなコードが書けるようになろうとわ!!!
2026/06/27(土) 21:51:23.62ID:R8+7NcOR0
constexprならそりゃあ
2026/06/27(土) 22:58:05.10ID:8D3lxavl0
>>703
C++11学習中ですが普通に出てきます
constexprは関数にも指定可能で、こちらは基本的にコンパイル時解決されるものの、それができないコールは通常関数として扱われるそうで。恩恵は受けられそうですが名前に対する挙動が難解!
2026/06/27(土) 23:06:41.66ID:8D3lxavl0
>>705 cpprefjpで確認したら大間違いだった
「…左辺が constexpr 修飾された変数であれば、右辺の関数はコンパイル時に呼び出される。そうでなければ、関数は実行時に呼び出される…」
2026/06/28(日) 00:32:35.37ID:npu3815+0
しーぷらすぷらすじゅういちぐらいのじぶんはクラスにていすうめんばーをもたせようとおもったらconstつきでせんげんしてこんすとらくたーのめんばーしょきかりすとでしょきかするほうほうしかなかったがれいがいてきにintかただけはenumていすうとしてていぎするかstatic const int BAR = 123; みたいなかきかたができたがいつのまにかint かたいがいでもかけるようになっていておどろきというはなし、
2026/06/28(日) 00:34:19.80ID:npu3815+0
ていせいorz、
△:おどろき
○:おどろきもものき
2026/06/28(日) 00:45:03.70ID:npu3815+0
すまんていすうめんばーをもたせたいのではなくてくらすていぎないでていすうとていぎしたいというはなしやったしかしこれもしーぷらすぷらすじゅういちぐらいのじぶんはintかたにかぎってはstatic const int BAR = 123; みたいなかきかたができたがそれいがいのかたたとえばdoubleかたとかではstatic const double DEG2RAD = 3.0/180; みたいなかきかたはできずstatic const double DBG2RAD; とせんげんしておいて .cpp ふぁいるのほうに double Foo::DBG2RAD = 3.0/180.0; みたいにかかねばらなんかったんじゃわここでFooはくらすのなまえ
2026/06/28(日) 08:08:00.32ID:NngG2nWn0
>>703
static や constexpr は脇に置いて C++11 以降では普通のデータメンバの初期化子をクラス定義時に書ける。

class Foo {
double DEG2RAD = 3.1415926 / 180.0;
};

これを許してしまったら constexpr は駄目とは言えないだろ。
レスを投稿する


ニューススポーツなんでも実況