[過去ログ] C++相談室 part164 (1002レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
291: はちみつ餃子◆8X2XSCHEME (ワッチョイ 0d3e-C6j3) 2023/06/21(水)12:13 ID:3HBFHOpK0(4/5) AAS
>>285 の例は using を使う形でも解決できる。 (設計意図によってはそれが妥当かどうかわからんけど。)
namespace ns {
struct foo {};
struct hoge {};
int operator+(const hoge& x, const hoge& y) { return 1; }
};
ns::foo operator+(const ns::foo& x, const ns::foo& y) { return ns::foo(); }
省9
292: (ワッチョイ ad10-fL0y) 2023/06/21(水)12:20 ID:s1sJDdcu0(1) AAS
C++って、こういう悪夢みたいなテクニックで溢れかえってるよなあ
RustやらPythonだのに人気が移るわけですよ
293: (テテンテンテン MM96-Axrn) 2023/06/21(水)12:23 ID:xjKiS8Z6M(1) AAS
記法でいうならNimがいいよ。
294: はちみつ餃子◆8X2XSCHEME (ワッチョイ 0d3e-C6j3) 2023/06/21(水)16:00 ID:3HBFHOpK0(5/5) AAS
カスタマイズされた関数が呼ばれるようにする綺麗な方法として customization point object という概念が近頃は導入されてる。
綺麗な方法というか汚い部分はライブラリに隠すってだけなんだけど。
真似してみてもいいかもね。
より綺麗な方法が導入されるのはいいんだけど、
過去の方法が消えてなくなるわけでもないし完全に置き換えられるわけでもないからなぁ。
個々には良くなっても全体としては余計に複雑になるだけってのもよくある話。
外部リンク:m.xkcd.com
295: (ワッチョイ c997-trtU) 2023/06/22(木)09:50 ID:+UOgHQ6A0(1) AAS
max RSS (メモリ総量) の取得ってWindowsとLinuxでポータブルな方法ないの?
296: (スプッッ Sd12-9xvA) 2023/06/22(木)10:07 ID:T+/An9G4d(1) AAS
C++標準ライブラリには無い
外部ライブラリに頼るか自分で実装するかになるけど、結局のところ#ifdefでOS依存の機能を呼び分けるしかない
297: (ワッチョイ 196e-ljvc) 2023/06/22(木)10:35 ID:myrOOi5M0(1) AAS
std::uintptr_t get_available_memory();
とプロトタイプだけ用意して、定義を環境別に作るだな
内容的に割と単純な処理のはずで
環境別に用意といってもたいした工数にはなるめえよ
298: (アウアウウー Sacd-Hkv7) 2023/06/22(木)17:54 ID:Sn58Ngpoa(1) AAS
Nim いいよね
C++ 嫌になったら Nim においでおいで
299(4): (ワッチョイ c997-trtU) 2023/06/23(金)06:00 ID:AFPisFIg0(1) AAS
なんかのオブジェクトをポインタじゃなく実体として持ってるとして、それを delete するやり方ってないの?
たとえば std::vector A に対して
delete &A;
みたいな
300: (ワッチョイ 92ad-DGQF) 2023/06/23(金)06:14 ID:Dz+tkRpF0(1/2) AAS
「実体を持っている」と言うが「誰が」持っているかにもよる
グローバル変数として宣言しているなら予めメモリ上に確保されているから破棄は無理(強引に再利用はできる)
スコープ内で変数として宣言したのなら必要なメモリはスタック上にあるからスタックを弄るしかない
別のオブジェクトのメンバ変数として宣言されているならそのオブジェクトを破棄する
301: (ワッチョイ 92ad-DGQF) 2023/06/23(金)06:17 ID:Dz+tkRpF0(2/2) AAS
スコープ内でってのはローカル変数の意味で言ったの
302: (ワッチョイ 3602-Ul6j) 2023/06/23(金)07:14 ID:GEB8UNzF0(1) AAS
A.~vector<>();でいいんじゃないの?
メモリ解放が必要ならdelete(void*)&A;とかして。
303: (ワッチョイ 196e-ljvc) 2023/06/23(金)07:18 ID:v++V1HM40(1/5) AAS
>>299
deleteはdynamic storage durationのオブジェクトにのみ許される
std::vector<int> A;はautomatic storage durationの場合はその定義を囲むブレースから逸脱すれば破棄される
static storage durationの場合はプログラムの実行終了時に破棄される
thread storage durationの場合はスレッド終了時に破棄される
304: (テテンテンテン MM96-Axrn) 2023/06/23(金)07:19 ID:pmKt7pYtM(1) AAS
極論すれば、c++の変数は自動変数しか無いから、変数で定義しているものはコンパイラに任せるしか無い。
305(1): (ワッチョイ 196e-ljvc) 2023/06/23(金)07:23 ID:v++V1HM40(2/5) AAS
> c++の変数は自動変数しか無い
???
306: (ワッチョイ adc9-1tDD) 2023/06/23(金)08:10 ID:Z0FiiE+w0(1) AAS
変数の生命期間よりも前に絶つのは new したものを delete する方法しかないよ
std::vector* pA = new std::vector();
std::vector& A = *pA;
:
Aで操作
:
delete pA;
省1
307: (ワッチョイ 196e-ljvc) 2023/06/23(金)08:36 ID:v++V1HM40(3/5) AAS
auto&& A { *new std::vector<int>(0) };
delete &A;
これで「実体」のように偽装はできるけど
こんなコード書くやついたらグーパンだよ
308: (ワッチョイ 92f0-L1I+) 2023/06/23(金)08:38 ID:OoWAXDqh0(1) AAS
このスレ読んでると目の裏がチカチカしてくるなw
309: (ワッチョイ f59c-Axrn) 2023/06/23(金)08:46 ID:z+mnuoLR0(1) AAS
>>305
極論すれば、と言っているだろ。
せめて反例ぐらい出せよ。
310(1): (ワッチョイ 196e-ljvc) 2023/06/23(金)09:45 ID:v++V1HM40(4/5) AAS
反例っておまえ・・・
静的変数
311(1): (ワッチョイ 0d4e-L1I+) 2023/06/23(金)10:11 ID:Zb3L9Wmq0(1) AAS
>>299
deleteで何をしたいかによるな
deleteは
・デストラクタを呼び出して
・メモリを開放する
という2つの動作が含まれるが、「メモリを開放する」に関しては、確保されてもいないメモリはもちろん開放できないが、
デストラクタは実体としてはただの関数なので、普通に呼び出すことは可能
省1
312: (ワッチョイ 8101-1tDD) 2023/06/23(金)11:56 ID:jOpqVfQE0(1) AAS
>>299
スコープを終わらせれば消える
313(2): (テテンテンテン MM96-UmNC) 2023/06/23(金)13:49 ID:RsoTpuHzM(1) AAS
Windows11でc++の開発したいんですけど開発環境何を選べばいいですか?
ちなみに趣味でおもちゃ言語のコンパイラを書こうと思います
314(1): (スッップ Sdb2-Ul6j) 2023/06/23(金)14:29 ID:P5Uu3Ce/d(1) AAS
wslのclangでいいんじゃないの
315: (ワッチョイ 515f-C6j3) 2023/06/23(金)14:40 ID:79pDbKtj0(1) AAS
>>311
> 2重に呼び出しても大丈夫なように設計されたクラスである必要はある
trivial destructor 以外は(空の ~T() {} 含め)どうがんばっても大丈夫にはならず未定義動作となる模様。
外部リンク[life]:timsong-cpp.github.io
316(3): (テテンテンテン MM96-UmNC) 2023/06/23(金)14:42 ID:XaN8/xk5M(1) AAS
>>314
visual studioでできませんか?
visual studioに依存しないような形で
317: はちみつ餃子◆8X2XSCHEME (ワッチョイ 0d3e-C6j3) 2023/06/23(金)14:49 ID:Xemzxb7u0(1/3) AAS
>>316
依存するかしないかはプログラマが気を付けることだろ
318: (ワッチョイ 196e-ljvc) 2023/06/23(金)14:58 ID:v++V1HM40(5/5) AAS
>>316
つーか俺はVisual Studioを推奨する
コンパイラ本体が昔からしっかりしてるし
デバッガは無数の信者を抱えるクオリティ
319: はちみつ餃子◆8X2XSCHEME (ワッチョイ 0d3e-C6j3) 2023/06/23(金)15:11 ID:Xemzxb7u0(2/3) AAS
俺はコンパイラは複数を利用するのが好ましいと思う。
気を付けてても処理系に依存している (または未定義を踏んでいる) こともある。
いくつかのコンパイラで試してみれば問題点を発見しやすい。
発現した問題についてはデバッガなりなんなりで追えばいいんだが、
問題が潜伏したまま表面に現れないってのは後になってじわじわ効いてきたりするし……。
320: (アウアウウー Sacd-Hkv7) 2023/06/23(金)16:11 ID:lCxAQSJFa(1/2) AAS
>>299
デストラクタに直接リソース解放させるより
リソース解放用の dispose() みたいな関数を造っておいて
デストラクタから dispose() 呼ぶのと同時に
delete しないで dispose() だけ外から呼ぶ設計もあるよ
321: (アウアウウー Sacd-Hkv7) 2023/06/23(金)16:14 ID:lCxAQSJFa(2/2) AAS
>>313
Code::Blocks (+ mingw)
322: (ワッチョイ 69f0-J7ro) 2023/06/23(金)18:47 ID:5tcqgCxE0(1/2) AAS
コンパイラの本なにがいいのかオススメ聞いたらオッサンに聞いたら怪獣が書いてある本って云われて本屋行って買ったらあとで付録のFDD誰かにかっぱわられていタコとに気付いたけどその本一冊ではなんの役にも立たないクソみたいな本だったわ
そのあとオライリーのyacc&lexの本と早乙女氏のBison&Flex本で学び直したわ
323: (ワッチョイ 69f0-J7ro) 2023/06/23(金)19:05 ID:5tcqgCxE0(2/2) AAS
良く見たら全然違ったわw
画像リンク[jpg]:i.imgur.com
yacc&lexが早乙女氏でBison&Flexが五月女氏でオライリーに似てるけどASCII出版やったわ
324(1): (テテンテンテン MM96-Axrn) 2023/06/23(金)19:51 ID:s3XGk2XtM(1) AAS
>>316
まず動くものを作ることに注力したほうがいい。
どうせ最初のコードは(問題領域の学習後に)捨てることになるから、プロトタイプと割り切るべき。あんまり頑張ると進捗悪くて挫折するし、うまく行ってもコンコルド効果で酷い目にあう。
>>310
確かに静的変数は自動だけど別物だな……よくやった。悔しいが褒めてやろう。
325: はちみつ餃子◆8X2XSCHEME (ワッチョイ 0d3e-C6j3) 2023/06/23(金)22:40 ID:Xemzxb7u0(3/3) AAS
>>324
???
storage duration は四種類の内の「ひとつ」であることは直接的に明記されていて解釈の余地がない。
外部リンク[stc]:timsong-cpp.github.io
兼ねる場合は存在しない。
326: (ワッチョイ 6501-2DXs) 2023/06/24(土)08:29 ID:31MSzc3x0(1) AAS
>まず動くものを作ることに注力したほうがいい。
+1票
>いくつかのコンパイラで試してみれば問題点を発見しやすい。
これはその通りだけど、もっともっと先の話
327(1): (ワッチョイ 856e-gmRT) 2023/06/24(土)09:51 ID:xNNc2oEW0(1) AAS
動くといってもHello worldじゃあまりにもモチベーションに乏しいから
何でもいいから目的目標を持ったプログラムを書いたほうがいい
328: はちみつ餃子◆8X2XSCHEME (ワッチョイ dd3e-F8yx) 2023/06/24(土)12:57 ID:rXisqo0O0(1) AAS
>>327
この話題の大元である >>313 でコンパイラを書くと書いてあるよ。
329: (ワッチョイ 6501-wYA+) 2023/06/24(土)20:48 ID:rm+SB6K20(1) AAS
ドラゴンブックでは?
誤植を指摘できるくらい読み込めば古典は理解できてると思う
330: (アウアウウー Sa69-F3wx) 2023/06/27(火)14:41 ID:DdZG5nY/a(1) AAS
いつまでも初心者を抜け出せない人は初心者本を読み過ぎ
331: (ワッチョイ 856e-gmRT) 2023/06/27(火)17:36 ID:59BI4JPS0(1/2) AAS
初心者本は【ど】初心者のうちだけにしとけ
謙虚なことはいいことだが、ここだけは背伸びしたほうがいい
初心者本で何か知ったら、それで禿本がどのくらい読めるようになったかやってみれ
禿本が普通に読めるようになったら次はISOの規格票
332: (ワッチョイ 856e-gmRT) 2023/06/27(火)17:38 ID:59BI4JPS0(2/2) AAS
逆もしかり
ISOの規格票であえなくギブしたら禿本
禿本でギブのとき初心者本に戻る感じな
333: (ワッチョイ 8d7c-BujW) 2023/06/27(火)18:00 ID:h1cnuIf90(1) AAS
特にC++は下手な参考書より規格の方が分かりやすかったりするからな…
334(1): (ワッチョイ dd4e-OfpS) 2023/06/27(火)18:15 ID:D2orubkn0(1) AAS
初心者へのアドバイスに禿本とかいう隠語をつかうのはどうかと思う
335(2): (ワッチョイ d5b3-q57E) 2023/06/27(火)18:27 ID:KKkR5HKI0(1/2) AAS
今独学でC++学んでいるんですが、たまたま見つけたサイトでint32_tとありましたが
int変数を宣言するのにint32_tなんて使いませんよね?
intでokですよね?
336: (ワッチョイ ad5f-VF0j) 2023/06/27(火)18:34 ID:3myjDgNL0(1) AAS
何に使うか次第
337: (ワッチョイ ad02-ES2+) 2023/06/27(火)18:46 ID:gpD88JT50(1) AAS
>>335
32ビット長である必要があるときだけint32_tを使えばいいよ
338: (ワッチョイ d5b3-q57E) 2023/06/27(火)19:26 ID:KKkR5HKI0(2/2) AAS
サンクス
339: はちみつ餃子◆8X2XSCHEME (ワッチョイ dd3e-F8yx) 2023/06/27(火)19:30 ID:wxXBe/Gr0(1) AAS
>>335
int は言語仕様では少なくとも -32767 から 32767 を表現可能な幅 (つまり 16 ビット) を持つことが規定されている。
具体的な大きさは処理系定義であって、最低限である 16 ビットかもしれないしもっと大きいかもしれない。
扱おうとする値の範囲が 32 ビット分の幅が必要であると見積もったなら int32_t が適切なこともある。
ただ…… int32_t は「条件に合致する整数型を処理系が持っているなら必ず提供しなければならない」ということになっているので、逆に言えば 32 ビット幅の整数型を持たない処理系では int32_t が存在しないことが許される。
C++ は処理系定義ということにしている項目がたくさんあって移植性を考慮しようとするとすごく大変なんだが (プログラマが想定してさえいれば) ある程度に広く対応可能な仕組みとしてこういう回りくどいものがある。
初心者の内はとりあえず自分の環境で動くものを作れるようになるというので十分だと思うよ。
340(3): (ワッチョイ 856e-gmRT) 2023/06/28(水)05:36 ID:p/gJzJ+n0(1/3) AAS
>>334
知らなきゃ聞くだろ
341: (スッップ Sd43-KhjG) 2023/06/28(水)05:40 ID:PRZu9/2Od(1) AAS
>>340
禿本って誰ですか?
342: (ワッチョイ 856e-gmRT) 2023/06/28(水)07:54 ID:p/gJzJ+n0(2/3) AAS
Bjarne Stroustrup著 The C++ Programming Language
ISBN-10 4797375957
343: (ワッチョイ 856e-gmRT) 2023/06/28(水)07:55 ID:p/gJzJ+n0(3/3) AAS
禿のブログ
外部リンク:www.stroustrup.com
344: (ワッチョイ dd4e-OfpS) 2023/06/28(水)11:12 ID:MFKAAcNx0(1) AAS
>>340
誰も知らないから隠語なんだよ
たまにいるよな、相手の知らないであろう単語を使ってマウントを取った気分になるやつ
345: (テテンテンテン MM4b-HUf/) 2023/06/28(水)12:11 ID:gg0vhlU/M(1) AAS
>>340
検索すると別人の本が出てくるから駄目だろ。
346: (ワッチョイ 23f0-OfpS) 2023/06/29(木)00:03 ID:XHjEw6wR0(1/2) AAS
C++でintと書けない理由はほぼほぼwindowsのintが32ビットと定義されているからで、
逆に言えば100% windowsで動かさないとあらかじめ分かっているならint使って書くよ
347: (ワッチョイ 4be5-O9q2) 2023/06/29(木)07:49 ID:0UnKiO4J0(1) AAS
せいぜい数十までの整数でも、いちいちint8_tになんかしねえな
348(1): はちみつ餃子◆8X2XSCHEME (ワッチョイ dd3e-F8yx) 2023/06/29(木)08:15 ID:l+ZsGqGg0(1/3) AAS
巨大な配列なら話は別だが単発の整数がレジスタより小さくても得なことが無いからな。
349: (ワッチョイ 9dc9-3ptY) 2023/06/29(木)08:19 ID:beCjxg/z0(1) AAS
通信関連でペイロードに ビット長指定されてるのなんかは int○_t 使っときたい
350: (ワッチョイ 8590-bmws) 2023/06/29(木)11:02 ID:prJHgW/t0(1/2) AAS
intでもshortでもCPUの計算速度は同じ
351(1): はちみつ餃子◆8X2XSCHEME (ワッチョイ dd3e-F8yx) 2023/06/29(木)11:11 ID:l+ZsGqGg0(2/3) AAS
四則演算では int より小さい整数は int に拡張する変換が入ることになってるし、
int を受け取る関数でも当然に変換されるので
変換する処理の分だけ素朴なコンパイラだと short のほうがコスト高になる可能性もある。
352: (ワッチョイ 8590-bmws) 2023/06/29(木)11:21 ID:prJHgW/t0(2/2) AAS
言葉足らずだったな
初学者向けに正確にいえば
ビット数の低い数値の型にしたからといって
計算速度が速くなるワケじゃない
理由はハチミツ氏の記述通り
353: (ワッチョイ 23f0-OfpS) 2023/06/29(木)17:52 ID:XHjEw6wR0(2/2) AAS
型のサイズが大きいほどキャッシュミスの確率が上がるし
ベクトル化の効率も関わってくるから話はそう簡単でもないけどな
354: はちみつ餃子◆8X2XSCHEME (ワッチョイ dd3e-F8yx) 2023/06/29(木)18:01 ID:l+ZsGqGg0(3/3) AAS
チューニングが必要になったら実測しろってのはそういうことよな。
やってみるまでわからん。
355: (ワッチョイ 23ad-F8yx) 2023/06/30(金)13:08 ID:fR+nHOGQ0(1) AAS
やはり64bitCPUなら64bit整数が一番計算が速かったりするのかな
356: (ワッチョイ 05a7-7pYU) 2023/06/30(金)13:38 ID:x+ZjTlP+0(1) AAS
>>348
al、ah、axと小さなレジスタでやりくりすることによりスタックすらも使わずに複数の変数を操作することは可能になる
まあ汎用レジスタ数の多い64bitアプリではあんまりメリットにならんが
357: (ワッチョイ 4bf2-kZxR) 2023/06/30(金)13:40 ID:GCvfqGNe0(1) AAS
普通、intは32bitじゃないの?
普通の計算に64bitなんて使ったらキャッシュ効率悪すぎでしょ
358(1): (ワッチョイ dd4e-OfpS) 2023/06/30(金)15:06 ID:4d5Im9Ce0(1/3) AAS
多少のCPU内の計算速度差より、メモリアクセスのペナルティの方が遙かに影響でかいんだよね
昔、同じテキスト処理をsjisとutf16で速度比べたら、処理が複雑なはずのsjisの方がわずかに速かったこともあった
359: (ワッチョイ ad02-ES2+) 2023/06/30(金)16:50 ID:4gqYGJxm0(1) AAS
じゃあ16ビット整数使おうぜ!
360: (スッップ Sd43-+46M) 2023/06/30(金)18:10 ID:diu+eantd(1) AAS
ILP32
LLP64 windows: int32 long32 long long 64
LP64 unix: int32 long64 long long 64
ILP64 実装例なし
361(1): (スプッッ Sd03-+QuN) 2023/06/30(金)18:16 ID:rpfOZ2Y1d(1) AAS
>>358
自作エディタの内部文字コードに悩んでるけどもしかしてUTF8がええのかな
362(1): (ワッチョイ dd4e-OfpS) 2023/06/30(金)18:31 ID:4d5Im9Ce0(2/3) AAS
>>361
utf8は日本語3バイトになるし、冗長コードの問題もあるし、処理がより煩雑になるから内部処理コードには一番向かないと思う
エディタなら素直にutf32(もしくは16)で持つのが良いような気がする
363(1): (ワッチョイ 8d9c-HUf/) 2023/06/30(金)18:50 ID:JeB1mWDr0(1) AAS
>>362
utf16はサロゲートペアがあるから避けたほうがいい。
簡単に実装するならutf32、メモリを節約するならutf8。だけど、utf8が覇権だからutf8にしたら?
364: (ワッチョイ 8d7c-BujW) 2023/06/30(金)18:53 ID:ccKyFSM70(1/2) AAS
今から新規にエディタ作るなら内部はUTF32一択でしょ
それ以外を使う理由がない
365: (ワッチョイ dd4e-OfpS) 2023/06/30(金)20:01 ID:4d5Im9Ce0(3/3) AAS
>>363
サロゲートペアの判定は簡単だし、utf32でも厳密には1文字=1要素にはならないし、
メモリアクセス量との兼ね合いでより高速に動作しそうな気がするが…避ける理由がよく分からない
366: (ワッチョイ 9d10-56Vs) 2023/06/30(金)20:23 ID:fhTbp4mH0(1) AAS
今どきは絵文字とかも絡んでくるから「簡単に実装」なんてそうそう言えないと思うんだよね
性別やら肌の色で修飾みたいな複雑仕様を網羅する必要があるから
367(1): (ワッチョイ 8d7c-BujW) 2023/06/30(金)21:27 ID:ccKyFSM70(2/2) AAS
Unicodeの処理なんてただでさえ魔境なんだから減らせる複雑性は減らしといた方が良いよ
悪いこと言わないからUTF32にしとけ
368: (ワッチョイ e2ad-hRAP) 2023/07/01(土)10:11 ID:6RngsvF70(1/3) AAS
テキストエディタを自作すると一文字一文字の描画位置の計算を毎回しなければならず、結局全テキストをデータutf32形式で保持するのが楽という結論になりそう
369: (ラクッペペ MM8e-J/Sn) 2023/07/01(土)10:21 ID:zjPNSumQM(1) AAS
そこまでやるとワープロやDTPの範疇では?
370: (ササクッテロラ Sp5f-kcaK) 2023/07/01(土)10:38 ID:oFUv7PIMp(1/2) AAS
>>351
変換する処理ったって、普通static_castにコスト発生せんやろ
371: (ササクッテロラ Sp5f-kcaK) 2023/07/01(土)10:41 ID:oFUv7PIMp(2/2) AAS
static_castというよりstatic_cast相当というべきか
もちろん浮動小数点数と整数だと命令いるけど
上下前次1-新書関写板覧索設栞歴
あと 631 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.036s