[過去ログ]
C++相談室 part154 (1002レス)
C++相談室 part154 http://mevius.5ch.io/test/read.cgi/tech/1610096040/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
322: デフォルトの名無しさん [sage] 2021/01/30(土) 17:13:12.28 ID:S5wIZr5N なお、_x は、命名規約上、禁止。先頭が _ の名前はコンパイラなどの システム予約なため。 http://mevius.5ch.io/test/read.cgi/tech/1610096040/322
323: デフォルトの名無しさん [sage] 2021/01/30(土) 17:14:26.98 ID:2r/QlSUC そうだったっけ? http://mevius.5ch.io/test/read.cgi/tech/1610096040/323
324: はちみつ餃子 ◆8X2XSCHEME [sage] 2021/01/30(土) 17:19:55.79 ID:4OMKN/Z4 >>304 >>318-319 命名規約の方法論は色々なのでプレフィクスを付けるルールが定めてある場合もあるし、 むしろ一致させていくようにしているものもある。 私自身は、少なくともメンバに値を設定するだけの単純なコンストラクタである場合には 名前を一致させていくスタイルで書く。 C++ を使う上でのガイドラインとしてよく参照されているのはグーグルのスタイルガイドで、 データメンバの名前は最後にアンダースコアを付けるようにルールを定めている。 https://google.github.io/styleguide/cppguide.html#Variable_Names その一方では C++ の設計者である Stroustrup は型やスコープを変数名に含めるのは好ましくない (しかし部分的に便利な場合もあることは認めている) と書いている。 https://stroustrup.com/bs_faq2.html#Hungarian どちらの習慣が圧倒的優勢ということはないと思う。 >>322 グローバル変数としてはアンダースコアで始まる名前は予約されているけど、 そうでない場合には問題ない。 ただし、 ・ アンダースコアで始まって大文字が続く名前 ・ アンダースコアが連続 (名前の先頭部分以外でも) する名前 は名前の種類やスコープにかかわらずどこでも予約されている。 http://mevius.5ch.io/test/read.cgi/tech/1610096040/324
325: デフォルトの名無しさん [sage] 2021/01/30(土) 17:30:01.20 ID:2r/QlSUC 互いの信仰を侵害してはならないがチーム内では統一されている必要がある 規約の背景は明確である必要がある http://mevius.5ch.io/test/read.cgi/tech/1610096040/325
326: デフォルトの名無しさん [] 2021/01/30(土) 18:08:50.99 ID:OHt9F1SU >>317 まず、FILE*とostreamが一対一対応していないのがダメ。 せっかくC言語でファイル、パイプ、標準IOがFILE*型としてで統合化・抽象化されていたのに、 C++でostreamとfstreamで分離される劣化が起きた。 http://mevius.5ch.io/test/read.cgi/tech/1610096040/326
327: デフォルトの名無しさん [sage] 2021/01/30(土) 18:30:25.89 ID:PJvUkb6d ios_baseで統一する形に変わっただけ それをFILE*がどうたらと駄々こねるのは 頭が堅すぎる実年齢に無関係の老害だ http://mevius.5ch.io/test/read.cgi/tech/1610096040/327
328: デフォルトの名無しさん [] 2021/01/30(土) 18:36:35.02 ID:OHt9F1SU パイプ処理をostream系で書く奇特な人ってどのくらいいるの? http://mevius.5ch.io/test/read.cgi/tech/1610096040/328
329: デフォルトの名無しさん [] 2021/01/30(土) 18:41:09.24 ID:OHt9F1SU pythonは定数がないから全部大文字の変数は定数のようにみなしましょう的な談合がある。 http://mevius.5ch.io/test/read.cgi/tech/1610096040/329
330: デフォルトの名無しさん [sage] 2021/01/30(土) 19:00:34.72 ID:0ahE8ZR3 定数というか型もない http://mevius.5ch.io/test/read.cgi/tech/1610096040/330
331: ◆QZaw55cn4c [sage] 2021/01/30(土) 19:09:23.04 ID:L1O2TNoD >>322 束縛領域が狭いローカル変数とかには、_x を使ってもいいのではないか?と考えていますが‥‥ http://mevius.5ch.io/test/read.cgi/tech/1610096040/331
332: デフォルトの名無しさん [sage] 2021/01/30(土) 20:32:34.21 ID:PJvUkb6d data_ size_ http://mevius.5ch.io/test/read.cgi/tech/1610096040/332
333: デフォルトの名無しさん [sage] 2021/01/31(日) 03:18:57.87 ID:6QCY/vGM >>331 実は#defineマクロの中で使われるケースがあってね。 _xが、アプリの中で使われてない事を前提にしないとマクロが作れない 場合とか。 http://mevius.5ch.io/test/read.cgi/tech/1610096040/333
334: デフォルトの名無しさん [] 2021/01/31(日) 06:52:18.40 ID:gXTMTlGe HTTPサーバーのサンプルで、関数型言語がCを凌駕して、C実装の作者が??になってるやり取りをどこかで見たのですが、わかる方いらっしゃいませんか? おそらくC++は簡単に勝てるはずなんですが。 http://mevius.5ch.io/test/read.cgi/tech/1610096040/334
335: デフォルトの名無しさん [sage] 2021/01/31(日) 07:27:56.74 ID:fCVb5Gn/ dmrが? http://mevius.5ch.io/test/read.cgi/tech/1610096040/335
336: デフォルトの名無しさん [sage] 2021/01/31(日) 09:14:46.77 ID:bSEeGU13 >>333 c++実装者がユーザから参照可能な形でそれやってるの見たことあるの? http://mevius.5ch.io/test/read.cgi/tech/1610096040/336
337: デフォルトの名無しさん [sage] 2021/01/31(日) 09:22:03.74 ID:fCVb5Gn/ >>333 #define A(_x) (std::cout << #_x) int main() { int _x = 5; A(_x); std::cout << _x; } 何か問題でも? http://mevius.5ch.io/test/read.cgi/tech/1610096040/337
338: デフォルトの名無しさん [] 2021/01/31(日) 10:19:42.43 ID:BqL9JwJS ひどいな https://qiita.com/threecups/items/75a4b9ca1298270c5c62 http://mevius.5ch.io/test/read.cgi/tech/1610096040/338
339: デフォルトの名無しさん [] 2021/01/31(日) 10:23:16.43 ID:BqL9JwJS >>331 _で始めると激しくコンパイラ依存になる http://mevius.5ch.io/test/read.cgi/tech/1610096040/339
340: デフォルトの名無しさん [] 2021/01/31(日) 10:50:22.50 ID:BqL9JwJS >>334 Erlang? http://mevius.5ch.io/test/read.cgi/tech/1610096040/340
341: はちみつ餃子 ◆8X2XSCHEME [sage] 2021/01/31(日) 10:57:57.30 ID:+XHxoAeu >>339 繰り返すが言語仕様上はグローバル変数ではない名前の頭がアンダースコアで始まるだけなら問題ない。 現実に出来が悪いコンパイラがたくさんあるのであれば仕方がないが、 少なくとも俺はそんなのに遭遇したことはない。 http://mevius.5ch.io/test/read.cgi/tech/1610096040/341
342: デフォルトの名無しさん [sage] 2021/01/31(日) 11:04:21.78 ID:fCVb5Gn/ >>338 DLLのビルドに使ったコンパイラと そのDLLを使うアプリをビルドするコンパイラが違っても動くんだぞ ABIの指定は仕方ねえだろ http://mevius.5ch.io/test/read.cgi/tech/1610096040/342
343: デフォルトの名無しさん [sage] 2021/01/31(日) 11:29:10.73 ID:2WBeknRq >>334 これか? サーバーじゃなくてパーサー部分だけだけど https://blog.8arrow.org/entry/2014/10/23/063044 http://mevius.5ch.io/test/read.cgi/tech/1610096040/343
344: デフォルトの名無しさん [] 2021/01/31(日) 12:10:02.04 ID:gXTMTlGe >>343 それです。 ありがとうございます。 http://mevius.5ch.io/test/read.cgi/tech/1610096040/344
345: デフォルトの名無しさん [sage] 2021/01/31(日) 13:12:26.22 ID:ZnRwde8F >>341 英語サイトでも、説明の仕方が誤解を招くようなものがありまして、もしかしたらそれは誤解かも知れません。 https://stackoverflow.com/questions/25090635/use-and-in-c-programs 「Here's what the C standard says (section 7.1.3): 1. All identifiers that begin with an underscore and either an uppercase letter or another underscore are always reserved for any use. 2. All identifiers that begin with an underscore are always reserved for use as identifiers with file scope in both the ordinary and tag name spaces.」 訳: 1. アンダースコアで始まって直後に英大文字が続くか、または、アンダースコアが連続して 続く識別子は、いかなる使用も予約されている。 2. アンダースコアで始まる全ての識別子は、通常または、タグ名前空間における ファイルスコープの識別子として常に予約されている。 1. の方は、_XXX か、__xxx は予約されていると言うことですが、 2. の方は、_xxx の形式は、例え xxx の部分の先頭が小文字であっても、ファイルスコープにおける 識別子として予約されており、ローカル変数名としては使うべきではないということだと思われます。 また、C++の方では、 https://stackoverflow.com/questions/228783/what-are-the-rules-about-using-an-underscore-in-a-c-identifier *Reserved in any scope, including for use as implementation macros: 10. identifiers beginning with an underscore followed immediately by an uppercase letter 11. identifiers containing adjacent underscores (or "double underscore") *Reserved in the global namespace: 12. identifiers beginning with an underscore この12.の書き方が(あなたに)誤解を招いた気がします。 また、11.によれば、xxx__yyy のように _ が連続するものは、識別子の中間であっても予約されている とのことです。 http://mevius.5ch.io/test/read.cgi/tech/1610096040/345
346: デフォルトの名無しさん [sage] 2021/01/31(日) 13:18:09.37 ID:ZnRwde8F >>337 それは問題ではないんだけど、 #define a(x) { int _x = 1; _x = x * 2; printf("%d",_x);} のようなマクロが有ったとすれば、 int y = 5; a(y); // 10 と表示される。 と int _x = 5; a(_x); // 2 と表示される。 http://mevius.5ch.io/test/read.cgi/tech/1610096040/346
347: デフォルトの名無しさん [sage] 2021/01/31(日) 13:42:32.29 ID:Rr91L/mp int と自作クラス A の pair を priority_queue に入れようと思ったら pair<int, A> に対する less の定義(?)が要るって言われました int だけに基づいてソートしてくれたら結構なんですが、最も簡単な書き方はどんなですか また、自作クラス A は array を継承しているのですが、less の定義も引き継ぐ方法はないのでしょうか http://mevius.5ch.io/test/read.cgi/tech/1610096040/347
348: デフォルトの名無しさん [sage] 2021/01/31(日) 14:05:10.94 ID:WjHCKOmN いろんな見解があってややこしいから、安全側に倒して「_で始まる名前は一切使うな」でいいと思ってる コンパイラ実装するような奴以外はそれで困らんやろ http://mevius.5ch.io/test/read.cgi/tech/1610096040/348
349: デフォルトの名無しさん [] 2021/01/31(日) 14:10:22.05 ID:gXTMTlGe 【HOW】予約済みの席に座る方法【TO】 http://mevius.5ch.io/test/read.cgi/tech/1610096040/349
350: デフォルトの名無しさん [sage] 2021/01/31(日) 14:15:41.43 ID:WjHCKOmN >>347 using Aitem = std::pair<int, A>; using Aqueue = std::priority_queue<Aitem>, std::vector<Aitem>, [](const Aitem& lhs, const Aitem& rhs){ return lhs.first < rhs.first; }> Aqueue your_queue; http://mevius.5ch.io/test/read.cgi/tech/1610096040/350
351: デフォルトの名無しさん [sage] 2021/01/31(日) 14:54:17.91 ID:bSEeGU13 >>345 ファイルスコープとローカルスコープは違うよ。 あと、今議論中なのはアンダースコアひとつで始まるメンバ変数についてなんで、アンダースコアの連続がアウトなのは誰でも知ってるし、餃子も324で書いてる http://mevius.5ch.io/test/read.cgi/tech/1610096040/351
352: デフォルトの名無しさん [] 2021/01/31(日) 15:06:11.72 ID:gXTMTlGe 盛 り 上 が っ て ま い り ま し た ↑ http://mevius.5ch.io/test/read.cgi/tech/1610096040/352
353: デフォルトの名無しさん [] 2021/01/31(日) 15:07:16.87 ID:gXTMTlGe SRELLって知ってますか? http://mevius.5ch.io/test/read.cgi/tech/1610096040/353
354: デフォルトの名無しさん [sage] 2021/01/31(日) 15:15:54.45 ID:ZnRwde8F >>351 undersocre で始まる識別子は、Cの仕様ではこうなっています: 「All identifiers that begin with an underscore are always reserved for use as identifiers with file scope in both the ordinary and tag name spaces.」 「undersocre で始まる識別子はfile scopeでは使用してはいけない」 とは言っておらず。 「undersocre で始まる識別子はfile scopeの識別子として使用される ことが予約されている」 と言っています。 with file scope の前置詞がなぜ in ではなく with になっているかは私には分かりかねますが、 その直後にも in が使われているので in が二重に使われるのを避けたのかも 知れません。 http://mevius.5ch.io/test/read.cgi/tech/1610096040/354
355: デフォルトの名無しさん [] 2021/01/31(日) 15:18:08.68 ID:gXTMTlGe inを踏むとか言ってみたくなるじゃないか。 責任とれ。 http://mevius.5ch.io/test/read.cgi/tech/1610096040/355
356: デフォルトの名無しさん [sage] 2021/01/31(日) 15:18:17.21 ID:ZnRwde8F どうやら、 「identifiers with file scope」は、「ファイルスコープを持つ識別子」 であり、with は、「持つ」の意味で使われているようです、。 http://mevius.5ch.io/test/read.cgi/tech/1610096040/356
357: デフォルトの名無しさん [sage] 2021/01/31(日) 15:41:47.21 ID:bSEeGU13 >>354 予約されてるとはつまり使うなってことだけど、いずれにせよファイルスコープの話であって、ローカル変数の話じゃないよ。 http://mevius.5ch.io/test/read.cgi/tech/1610096040/357
358: デフォルトの名無しさん [sage] 2021/01/31(日) 16:03:58.33 ID:fCVb5Gn/ >>346 #define a(x) { int z = 1; z = x * 2; printf("%d",z);} int y = 5; a(y); int z = 5; a(z); これと何が違うの? 下線で始まることとは無関係だろ http://mevius.5ch.io/test/read.cgi/tech/1610096040/358
359: デフォルトの名無しさん [sage] 2021/01/31(日) 16:08:45.08 ID:q0ry4PhJ STLコンテナの継承ってしない方が良いんですかね? たとえばarrayに機能を追加 ([i][j] で i 行 j 列の要素を取得する等) して行列クラスを作りたいとき、 ・arrayを継承する ・行列クラス内で要素を格納するメンバを array として持つ の2パターンが考えられますが、皆さん的にはどっちが好ましいですか? 行列 is an array なので今こそ継承の使いどころだと思ったのですがいかがでしょうか http://mevius.5ch.io/test/read.cgi/tech/1610096040/359
360: デフォルトの名無しさん [sage] 2021/01/31(日) 16:16:47.40 ID:WjHCKOmN arrayは仮想デストラクタ持ってないからポリモは出来ない データ構造使うだけなら必要ない やめとけ http://mevius.5ch.io/test/read.cgi/tech/1610096040/360
361: デフォルトの名無しさん [sage] 2021/01/31(日) 16:20:57.91 ID:NgKJGEE4 かか関数型マクロなら不用意に定義されていても int y = (a)(x) という書き方おすれば問題無くマクロじゃない関数a()の方が呼ばれるので問題無い! 事前に typedef double a; とかされていた場合は知らんが、 http://mevius.5ch.io/test/read.cgi/tech/1610096040/361
362: デフォルトの名無しさん [sage] 2021/01/31(日) 16:21:36.60 ID:2wqasnUt 好きにしたら? C++なんて自己流全開で俺スゲーしてなんぼ、他人の顔色伺ってたらダメ 行列なんてプロダクションではどうせ出来合いのライブラリ使うんだし http://mevius.5ch.io/test/read.cgi/tech/1610096040/362
363: デフォルトの名無しさん [sage] 2021/01/31(日) 16:22:25.80 ID:q0ry4PhJ >>360 じゃあメンバとして要素(array)を持てば良いってことですよね? []の定義の仕方はわかるのですが、[][]ってどうやって定義するんでしたっけ? http://mevius.5ch.io/test/read.cgi/tech/1610096040/363
364: はちみつ餃子 ◆8X2XSCHEME [sage] 2021/01/31(日) 16:27:00.30 ID:+XHxoAeu >>363 直接には出来ない。 (二引数を受け取れるようにしようという提案はある。) operator[] を持つ別のクラス (のオブジェクト) を返すという形で実装する。 http://mevius.5ch.io/test/read.cgi/tech/1610096040/364
365: デフォルトの名無しさん [] 2021/01/31(日) 16:27:38.50 ID:X7lGC0go case by case だろうけど Array と Matrix に関してなら 直観的に考えると後者かな 継承する意味が無い http://mevius.5ch.io/test/read.cgi/tech/1610096040/365
366: デフォルトの名無しさん [] 2021/01/31(日) 16:30:29.11 ID:X7lGC0go [][][]だと3引数になるの? [][][][]だと4引数になるの? って疑問が出るので operator[] を持つ自分自身のクラス (のオブジェクト)が正解だと思う http://mevius.5ch.io/test/read.cgi/tech/1610096040/366
367: デフォルトの名無しさん [sage] 2021/01/31(日) 16:31:13.60 ID:NgKJGEE4 std::array<std::vector<double> > x; みたいな http://mevius.5ch.io/test/read.cgi/tech/1610096040/367
368: デフォルトの名無しさん [sage] 2021/01/31(日) 16:32:01.22 ID:NgKJGEE4 ジャグ配列になってしまう…orz http://mevius.5ch.io/test/read.cgi/tech/1610096040/368
369: デフォルトの名無しさん [sage] 2021/01/31(日) 16:32:06.68 ID:fCVb5Gn/ 継承といえば type_infoは仮想デストラクタ持ってるけど 派生クラス作ったやついる? 実験でなく http://mevius.5ch.io/test/read.cgi/tech/1610096040/369
370: デフォルトの名無しさん [sage] 2021/01/31(日) 16:34:24.04 ID:ZnRwde8F >>358 命名規約に従って変数名をつけていれば、>>346のマクロはバグらない。 一方、>>358のマクロは、命名規約に従って合法的に定義されたローカル 変数zに対して使ってもバグる。 その違い。 http://mevius.5ch.io/test/read.cgi/tech/1610096040/370
371: はちみつ餃子 ◆8X2XSCHEME [sage] 2021/01/31(日) 16:34:43.94 ID:+XHxoAeu >>366 operator{] にこだわらずに要素にアクセスするメンバ関数を用意するのでもそんなに困らない。 見栄えだけの問題。 まあ見栄えも大事なんだけど。 http://mevius.5ch.io/test/read.cgi/tech/1610096040/371
372: デフォルトの名無しさん [sage] 2021/01/31(日) 16:36:28.41 ID:ZnRwde8F >>357 そうではなく、_xxx は、グローバル変数で使うことが予約されているので、 ローカル変数では使ってはならない、と読み取れるように思う。 http://mevius.5ch.io/test/read.cgi/tech/1610096040/372
373: デフォルトの名無しさん [sage] 2021/01/31(日) 16:38:11.57 ID:q0ry4PhJ >>366 すみません。どう書いたら良いのか分かりません []は int& operator [] (int i) {return elem[i];} みたいな感じですよね? http://mevius.5ch.io/test/read.cgi/tech/1610096040/373
374: デフォルトの名無しさん [sage] 2021/01/31(日) 16:43:15.04 ID:fCVb5Gn/ >>370 そのためにinlineとconstexprが用意されてるわけだが なぜマクロで作らなければならないんだ? どこぞのOS屋がmaxなんてクソマクロ作ってたせいで みんな迷惑してたよな http://mevius.5ch.io/test/read.cgi/tech/1610096040/374
375: はちみつ餃子 ◆8X2XSCHEME [sage] 2021/01/31(日) 16:45:04.61 ID:+XHxoAeu >>372 ファイルスコープで予約されている名前とローカル変数で名前がかぶっても 単にシャドウされるだけなので衝突しない。 ローカル変数名として使うべきでないという理由にならない。 http://mevius.5ch.io/test/read.cgi/tech/1610096040/375
376: デフォルトの名無しさん [sage] 2021/01/31(日) 16:51:19.01 ID:ZnRwde8F >>370 [補足] マクロ引数が二重に評価されてしまうのを防ぐため、マクロ作者が 気を利かせたつもりで次のようなマクロを書いたとする: #define b(x,y) {int _x=x; int _y=y; f(_x,_y); g(_x,_y); } 作者の意図としては、 char *ptr1, *ptr2; b(*ptr1++, *ptr2++); のような場合にも正しく動作するようにしたいということで、 この場合は、*ptr1++, *ptr2++ は、それぞれ1回ずつ評価されるので、 ptr1, ptr2 は、それぞれ 1ずつ前に進むので、アプリ作者の意図を 組むことが出来る。 一方、使う側が命名規約に従わず、アプリのローカル変数で_x,_yを定義し、 int _x=1; int _y=2; b(_y,_x); とすると、このマクロは誤動作し、 int x=1; int y=2; b(y,x); と書いたときと結果が変わってくる。 http://mevius.5ch.io/test/read.cgi/tech/1610096040/376
377: デフォルトの名無しさん [sage] 2021/01/31(日) 16:55:15.98 ID:wwbd/Qx2 こういうクソしょーもない話って馬鹿でも理解できるから盛り上がるよね http://mevius.5ch.io/test/read.cgi/tech/1610096040/377
378: デフォルトの名無しさん [] 2021/01/31(日) 16:57:55.61 ID:ZnRwde8F >>375 まあ、そうなんだけども、多分、英語の意味をそのまま素直に汲み取れば、 単純に>>372の意味のはず。 またそれは>>376のような状況を防ぐことが出来る。 >>374 まあ実際それはそういうこともあることは有るが、マクロでしか書けないような 例もあるわけで、>>376のようなマクロ作者のせっかくの配慮が、命名規約 を破って書かれたアプリでは逆効果になってしまうことがある。 http://mevius.5ch.io/test/read.cgi/tech/1610096040/378
379: デフォルトの名無しさん [sage] 2021/01/31(日) 17:00:34.53 ID:ZnRwde8F [補足] なお、Cの伝統だと、 #define b(x,y) {int _x=x; int _y=y; f(_x,_y); g(_x,_y); } ではなく、 #define b(x,y) do {int _x=x; int _y=y; f(_x,_y); g(_x,_y); } while(0) と書く。 こうしておくと、このマクロを{}ブロックを伴わないif文に書いたときに異常動作 をしない。 http://mevius.5ch.io/test/read.cgi/tech/1610096040/379
380: はちみつ餃子 ◆8X2XSCHEME [sage] 2021/01/31(日) 17:08:36.84 ID:+XHxoAeu >>378 素直に読めばグローバルスコープで予約されているものは グローバルスコープで予約されているという意外の意味を読み取ることは出来ない。 そこからローカル変数も制約されるという主張が出てくる理由が不在なんで、 何を言うてんのやろ……? ってなるわけ。 http://mevius.5ch.io/test/read.cgi/tech/1610096040/380
381: デフォルトの名無しさん [sage] 2021/01/31(日) 17:11:34.77 ID:ziXVeJXQ >>350 in instantiation of function template specialization ... requested here というエラーが出ます http://mevius.5ch.io/test/read.cgi/tech/1610096040/381
382: デフォルトの名無しさん [sage] 2021/01/31(日) 17:14:33.59 ID:fCVb5Gn/ >>376 だから二重評価が問題になるようなことをマクロでやるなって その例だってinlineで書けるだろ 邪道なやり方を保護するために 本筋が迷惑を被るのは本末転倒だ http://mevius.5ch.io/test/read.cgi/tech/1610096040/382
383: デフォルトの名無しさん [sage] 2021/01/31(日) 17:15:05.39 ID:ZnRwde8F >>380 「All identifiers that begin with an underscore are always reserved for use as identifiers with file scope in both the ordinary and tag name spaces.」 「file scopeを持つ識別子として使用されるために予約されている」 だべ? block scopeを持つ識別子として使用されたら、話がおかしいと思うが。 「この自動車は、仕事で使うために予約されています」 の場合、その自動車を私用で使えば、規則違反だよね。 http://mevius.5ch.io/test/read.cgi/tech/1610096040/383
384: デフォルトの名無しさん [sage] 2021/01/31(日) 17:15:45.54 ID:fCVb5Gn/ int _x; //こんなのがあっても #define b(x,y) {int _x=x; int _y=y; f(_x,_y); g(_x,_y); } //ブロックスコープで保護されるだろうが http://mevius.5ch.io/test/read.cgi/tech/1610096040/384
385: デフォルトの名無しさん [sage] 2021/01/31(日) 17:19:07.49 ID:ZnRwde8F >>382 でも、_ が最初に来る名前をアプリが使っちゃいけない、というのは伝統的にそういう ことが一番の目的だと思うぞ。 もう一つは、コンパイラの内部でこっそり使う場合があって、それと知らないうちに 衝突する可能性が僅かにあるため。 なぜこっそり使うかと言うと、絶対に衝突しないようにコンパイラ側を 書こうとするとコンパイラ作りに手間がかかるから。 もし、アプリ側が命名規約を守ってくれていれば、コンパイラ作りが楽になる ことがある。 http://mevius.5ch.io/test/read.cgi/tech/1610096040/385
386: デフォルトの名無しさん [sage] 2021/01/31(日) 17:20:06.45 ID:ZnRwde8F >>384 b(_y,_x) と書いたらどうなるか考えてみたらしだんご。 http://mevius.5ch.io/test/read.cgi/tech/1610096040/386
387: デフォルトの名無しさん [sage] 2021/01/31(日) 17:25:17.52 ID:fCVb5Gn/ >>385 おまえさんはコンパイラ屋か? そうだとして同業者は__builtin_va_argのように注意深くやってるぞ 自分らのエゴのために客に制限をかけるようなことを でかい声で叫びまくるのはやめてくれ http://mevius.5ch.io/test/read.cgi/tech/1610096040/387
388: デフォルトの名無しさん [sage] 2021/01/31(日) 17:30:48.87 ID:ZnRwde8F >>387 まあ、本当はコンパイラ内部でこっそり使う場合、絶対に衝突しないような もっと変な名前を使っているから大丈夫なんだ。 起動時の TickCounter の値を変数名の一部に入れたりとかね。 http://mevius.5ch.io/test/read.cgi/tech/1610096040/388
389: デフォルトの名無しさん [sage] 2021/01/31(日) 17:37:15.73 ID:2WBeknRq >>383 ローカルスコープで同じ名前の別変数を定義するのは「その自動車を私用で使う」ことには当たらないって言ってるの http://mevius.5ch.io/test/read.cgi/tech/1610096040/389
390: デフォルトの名無しさん [] 2021/01/31(日) 17:42:24.07 ID:/1NNOLNs ヘッダーファイルに書くか、ソースファイルに書くかの違いも大きい。 ヘッダーファイルに書くときは名前衝突に対する細心の注意が必要。 http://mevius.5ch.io/test/read.cgi/tech/1610096040/390
391: デフォルトの名無しさん [sage] 2021/01/31(日) 17:45:15.36 ID:fCVb5Gn/ >>386 {int _x=_y; int _y=_x; f(_x,_y); g(_x,_y); } どうなるって言いたいんだ? http://mevius.5ch.io/test/read.cgi/tech/1610096040/391
392: デフォルトの名無しさん [] 2021/01/31(日) 17:51:16.48 ID:/1NNOLNs C/C++の場合、スコープだけ意識するのは不十分で、ヘッダーかソースかで厳格さを変える柔軟性が必要。 ヘッダーに書くと影響範囲が大きいから。 http://mevius.5ch.io/test/read.cgi/tech/1610096040/392
393: デフォルトの名無しさん [sage] 2021/01/31(日) 17:57:13.23 ID:fCVb5Gn/ テンプレートなんか普通にヘッダに内容全部を書くが マクロでバカやるやつがいなければ平和だよ http://mevius.5ch.io/test/read.cgi/tech/1610096040/393
394: デフォルトの名無しさん [sage] 2021/01/31(日) 17:58:49.95 ID:A8yllSCF ローカルスコープでも _x が禁止だというなら >>346 のマクロ a 定義内で _x を使っていい理屈もわからんよな。 http://mevius.5ch.io/test/read.cgi/tech/1610096040/394
395: デフォルトの名無しさん [] 2021/01/31(日) 18:55:26.91 ID:gXTMTlGe std::pair<>を継承してquadを作る場合どうなりますか? http://mevius.5ch.io/test/read.cgi/tech/1610096040/395
396: デフォルトの名無しさん [] 2021/01/31(日) 18:58:05.19 ID:gXTMTlGe std::regexが意外と使える子に成長してますが、標準化委員会では捨て去る提案まで出てるそうで。 http://mevius.5ch.io/test/read.cgi/tech/1610096040/396
397: デフォルトの名無しさん [] 2021/01/31(日) 19:37:14.68 ID:/1NNOLNs std::regexはプロパティが貧弱なので結局、従来の正規表現ライブラリ使う羽目になる。 std::regexと互換性のあるインターフェースを持つ正規表現クラスを提供するよう呼びかけるのが現実的。 http://mevius.5ch.io/test/read.cgi/tech/1610096040/397
398: デフォルトの名無しさん [sage] 2021/01/31(日) 19:51:04.44 ID:vFnk+kXo 順序付き pair って自分で順番に格納するのと2要素のsetにするのどっちが良いですか http://mevius.5ch.io/test/read.cgi/tech/1610096040/398
399: デフォルトの名無しさん [] 2021/01/31(日) 20:39:53.24 ID:/1NNOLNs pairはSTLのアルゴリズムの恩恵を得るための物。 自宅の郵便受けを豪華にしたところで、郵便事業には何の関係もない。ただの趣味の世界。 http://mevius.5ch.io/test/read.cgi/tech/1610096040/399
400: デフォルトの名無しさん [sage] 2021/01/31(日) 21:08:09.18 ID:vFnk+kXo set< pear<int, int> > で、ある数を含む pear を高速に検索する方法ってある? http://mevius.5ch.io/test/read.cgi/tech/1610096040/400
401: デフォルトの名無しさん [] 2021/01/31(日) 21:47:36.00 ID:jyYnHelr set<int, vector<pair<int,int>*>> 元の集合に1億個程度のペアが入ってるとすると、住所録めいたものをあらかじめ生成しておく 配列でやっても速そう list[m].empty() こういうリストで空っぽかどうかわかればいいわけだ vector<vector<pair<int,int>*>>>; それならドでかい二次元配列に入れた方がラクかもしれない 連想配列でも出来る map<int ,vector<pair<int,int>*>>> 静的な話だったが動的つまり追加と検索が交互に起こるとおそらく話は違ってくる 全部試して早かったモンが高速である、程度の他愛ない結論に落ち着く http://mevius.5ch.io/test/read.cgi/tech/1610096040/401
402: デフォルトの名無しさん [sage] 2021/01/31(日) 22:01:19.63 ID:gvpDZJRs 構造体にしろよバカども 読みにくいだろ http://mevius.5ch.io/test/read.cgi/tech/1610096040/402
403: ◆QZaw55cn4c [sage] 2021/01/31(日) 22:54:08.94 ID:wKQ2AmTw >>333 >>339 では _x ではなく x_ にしようっかな‥‥ http://mevius.5ch.io/test/read.cgi/tech/1610096040/403
404: デフォルトの名無しさん [sage] 2021/01/31(日) 23:01:41.96 ID:eyFvwlDf googleスタイルガイドはそちらを推してるな http://mevius.5ch.io/test/read.cgi/tech/1610096040/404
405: デフォルトの名無しさん [sage] 2021/02/01(月) 01:17:42.16 ID:FSry25xS >>391 int _x=_y; int _y=_x; ここの二行目の右辺の_xは、b(_y,_x)の第二引数の_xではなく、一行目 で宣言した_xになっているので、b(_y,_x)の第一引数の_yになる。つまり、 int _x=引数の_y; int _y=引数の_y; となるので、{}の中の_x, _yは、どちらも引数の_yの値に等しくなってしまう。 これではマクロ作者が意図したことではなくなってしまう。 http://mevius.5ch.io/test/read.cgi/tech/1610096040/405
406: デフォルトの名無しさん [sage] 2021/02/01(月) 01:19:32.38 ID:FSry25xS >>394 まあ、それはもっともな指摘なのだが、アプリ本体では使用禁止で、 マクロでは使用可能と勝手に解釈してしまうのが一つの流儀。 http://mevius.5ch.io/test/read.cgi/tech/1610096040/406
407: デフォルトの名無しさん [sage] 2021/02/01(月) 01:22:56.68 ID:FSry25xS >>389 そうではなくて、ローカルスコープで使うことそのものが、file scope で使ってないことに当たるので、規約違反と言うことになると解釈できる 気がするんだ。 なぜそんなルールにしたのかは分からんがな。 http://mevius.5ch.io/test/read.cgi/tech/1610096040/407
408: デフォルトの名無しさん [sage] 2021/02/01(月) 03:22:30.15 ID:fw9rYrIy >>405 残念だったね。インライン関数使おうね。 >>406 あなたの流儀を規格の定めであるかのように話すのは迷惑なのでやめてくださいね。 >>407 file scope で予約されてる名前を file scope で使ってないなら問題ないね。 規約違反などという解釈にはならない。気のせい。そんなルールになってない。ってことで終われよ。 http://mevius.5ch.io/test/read.cgi/tech/1610096040/408
409: デフォルトの名無しさん [sage] 2021/02/01(月) 07:01:58.51 ID:v6ebtUL1 >>400 unordered_map<int, int> http://mevius.5ch.io/test/read.cgi/tech/1610096040/409
410: デフォルトの名無しさん [sage] 2021/02/01(月) 07:30:17.18 ID:LhepLs74 >>406 マクロ定義内の仮引数名は当のマクロ定義外の何者とも関係しないのでは… いわゆる束縛変数 http://mevius.5ch.io/test/read.cgi/tech/1610096040/410
411: デフォルトの名無しさん [sage] 2021/02/01(月) 07:38:30.21 ID:LhepLs74 として安全に取り扱われる 一方>>346の_xはa(x)が展開された結果が他のプリプロセッサ定義で再置換され得るなら危険 これが起きるかはプリプロセッサの仕様(規格)を見たら白黒付くが 個人的には君子なので危うきには近づかないことに死体、 http://mevius.5ch.io/test/read.cgi/tech/1610096040/411
412: デフォルトの名無しさん [sage] 2021/02/01(月) 08:09:47.67 ID:v6ebtUL1 うちの若いのがあんなアホマクロ書いてたら張っ倒す まあ、やらかしそうなのはいないけど http://mevius.5ch.io/test/read.cgi/tech/1610096040/412
413: デフォルトの名無しさん [sage] 2021/02/01(月) 09:26:53.82 ID:5yr9aQzL >>346 そもそもそのマクロで生成される変数はファイルスコープでないから、そもそも問題外では? 仮にファイルスコープな変数を宣言するようなマクロでも、ユーザが意図せず http://mevius.5ch.io/test/read.cgi/tech/1610096040/413
414: デフォルトの名無しさん [sage] 2021/02/01(月) 11:43:32.41 ID:xFB8fPis 仕事に情熱が持てなくなった http://mevius.5ch.io/test/read.cgi/tech/1610096040/414
415: デフォルトの名無しさん [sage] 2021/02/01(月) 11:43:38.91 ID:VhfMLcQM >>346 アホだ http://mevius.5ch.io/test/read.cgi/tech/1610096040/415
416: デフォルトの名無しさん [] 2021/02/01(月) 12:06:54.06 ID:ZelzH3+k >>414 コロナの影響だろな。 福島大爆発の影響も計り知れない。 「原爆ぶらぶら病」で検索してください。 http://mevius.5ch.io/test/read.cgi/tech/1610096040/416
417: デフォルトの名無しさん [] 2021/02/01(月) 12:30:15.68 ID:jyRtFT93 >>408 >file scope で予約されてる名前を file scope で使ってないなら問題ないね。 そうじゃない。 英語原文を読めば、file scopeで予約されているのではなく、file scopeで 使用するために予約されているのだ。 だから、file scope以外で使用することが禁止されている。 http://mevius.5ch.io/test/read.cgi/tech/1610096040/417
418: デフォルトの名無しさん [sage] 2021/02/01(月) 12:32:18.30 ID:jyRtFT93 >>417 日本語で言うなら、「file scope 専用」。 http://mevius.5ch.io/test/read.cgi/tech/1610096040/418
419: デフォルトの名無しさん [sage] 2021/02/01(月) 12:46:40.95 ID:/T40sBmV >>414 ちゃんと飯を食え。 週末はちゃんち休め。 年10日は連続した休暇をとれ http://mevius.5ch.io/test/read.cgi/tech/1610096040/419
420: デフォルトの名無しさん [sage] 2021/02/01(月) 12:55:04.41 ID:ioMwojjO >>417 その一文ばっかりやたらこだわるけど これが属しているセクションの名前って「17.4.3.1.2 Global names」なんだわ グローバル名前空間の名前以外については言及してないの ドラフトならインターネットで無料で見られるんだからこの辺の全容見てきな? http://mevius.5ch.io/test/read.cgi/tech/1610096040/420
421: デフォルトの名無しさん [sage] 2021/02/01(月) 13:14:13.18 ID:Z79JHlVc >>417 あらゆる場所で使ってはいけないのなら、7.1.3でわざわざ1つ目と対比させるように使用用途を限定して記載した理由を説明してよ。 普通はコンパイラ実装者のために予約されている、だけで十分でしょ http://mevius.5ch.io/test/read.cgi/tech/1610096040/421
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 581 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.025s