1 名前:デフォルトの名無しさん mailto:sage [2020/07/13(月) 13:51:48.09 ID:WBkWHxcT.net] エスケープシーケンスやWin32APIなどの環境依存なものもOK そのような質問は必ず環境を書きましょう 半角空白やタブでのインデントはスレに貼ると無くなります コードを貼れる所 codepad.org/ https://ideone.com/ 前スレ 【初心者歓迎】C/C++室 Ver.105【環境依存OK】 https://mevius.5ch.net/test/read.cgi/tech/1556142878/
2 名前:デフォルトの名無しさん [2020/07/13(月) 13:53:44.41 ID:WBkWHxcT.net] C言語を256倍使うための本 ttps://www.%61mazon.co.jp/dp/4756100430 詳説 C++ 第2版 ttps://www.%61mazon.co.jp/dp/479732743X
3 名前:デフォルトの名無しさん mailto:sage [2020/07/13(月) 14:08:11.33 ID:p1lvDPnd.net] C++20 https://ja.cppreference.com/w/cpp/compiler_support https://ja.cppreference.com/ 豆 www.open-std.org/ https://www.slideshare.net/KMC_JP/ss-45855264 https://ja.wikipedia.org/wiki/%E5%80%8D%E7%B2%BE%E5%BA%A6%E6%B5%AE%E5%8B%95%E5%B0%8F%E6%95%B0%E7%82%B9%E6%95%B0 https://ja.wikipedia.org/wiki/%E8%AA%A4%E5%B7%AE#%E8%A8%88%E7%AE%97%E8%AA%A4%E5%B7%AE%E3%81%AE%E7%A8%AE%E9%A1%9E
4 名前:デフォルトの名無しさん mailto:sage [2020/07/13(月) 14:09:20.92 ID:p1lvDPnd.net] 禿 https://ja.wikipedia.org/wiki/%E3%83%93%E3%83%A3%E3%83%BC%E3%83%8D%E3%83%BB%E3%82%B9%E3%83%88%E3%83%AD%E3%83%B4%E3%82%B9%E3%83%88%E3%83%AB%E3%83%83%E3%83%97 https://ezoeryou.github.io/cpp-intro/ https://ezoeryou.github.io/cpp17book/ https://ezoeryou.github.io/cpp14-appendix/ https://ezoeryou.github.io/cpp-book/C++11-Syntax-and-Feature.xhtml
5 名前:デフォルトの名無しさん mailto:sage [2020/07/13(月) 14:14:23.03 ID:+mCuetAH.net] https://boostjp.github.io/ https://cpprefjp.github.io/
6 名前:デフォルトの名無しさん mailto:sage [2020/07/13(月) 14:17:35.80 ID:+mCuetAH.net] Qt https://www.qt.io/ https://www.slideshare.net/seanchas_t/qt-cpp-26692727 wxWidgets https://www.wxwidgets.org/ https://github.com/wxWidgets Tcl/Tk www.tcl.tk/
7 名前:デフォルトの名無しさん mailto:sage [2020/07/13(月) 16:28:13.78 ID:srh9sya6.net] メンバに自クラスの配列を持つクラスのメンバ配列の初期化はc++ではどうやりますか?Javaでは下のように出来てます。 ☆Javaでこうなっています class A { protected A[] node = new A[3]; } ☆c++でこうしたらエラーになりました。 @a.hpp class A { public: static A node[]; }; @a.cpp #include "a.hpp" A A::node[] = new A[3]; ちなみに型Aを適当にintとかにしたらc++の方もいけました。
8 名前:デフォルトの名無しさん mailto:sage [2020/07/13(月) 16:38:40.16 ID:ny9O75E1.net] >>7 nodeは静的メンバ変数でいいの? java同様、staticはすべてのクラスインスタンスで共通の変数って意味だけど。
9 名前:デフォルトの名無しさん mailto:sage [2020/07/13(月) 16:41:24.41 ID:srh9sya6.net] >>8 ダメだとは思ってましたが、つけないと不完全な型名は使用できませんと怒られました。 c++ではメンバに自クラスの変数がいるとダメなのですか?
10 名前:デフォルトの名無しさん [2020/07/13(月) 17:07:02.67 ID:WBkWHxcT.net] うまくいく例 class A { public: static A *node; }; A *A::node = new A[3];
11 名前:デフォルトの名無しさん mailto:sage [2020/07/13(月) 17:22:15.52 ID:ny9O75E1.net] staticにしない例 class A { public: A *node; A(); }; A::A() { node = new A[3]; }
12 名前:デフォルトの名無しさん mailto:sage [2020/07/13(月) 17:27:36.45 ID:ny9O75E1.net] あ、ループしちゃった
13 名前:デフォルトの名無しさん mailto:sage [2020/07/13(月) 17:30:23.80 ID:KVdg44rD.net] >>9 > c++ではメンバに自クラスの変数がいるとダメなのですか? そりゃだめだよ、もしそんなのができたら class A { A a; int b; }; A x; とした時に x.b; x.a.b; x.a.a.b; ... みたいに無限に int b; を作る羽目になるから。 Javaなどは class A { A *a; int b; }; みたいなのしかできないから問題ないだけ。
14 名前:デフォルトの名無しさん mailto:sage [2020/07/13(月) 17:33:49.37 ID:17o/9bhC.net] C++のクラス変数とJavaのクラス変数の違い、だっけ。 端的に「C++ではnewなしにクラス変数を宣言して使える」ようにするため。 Javaと対比しながら説明する能力がないんで中途半端で悪いけど。
15 名前:14 mailto:sage [2020/07/13(月) 19:29:02.10 ID:17o/9bhC.net] × 変数を宣言 ○ 変数を定義 中途半端な上に間違っててすまぬ。 あまつさえ細かい訂正のために貴重な投稿枠の浪費までも。
16 名前:デフォルトの名無しさん mailto:sage [2020/07/14(火) 08:27:52.03 ID:bhhAeN2N.net] >>14 クラス変数の問題ではなく、クラスのメンバとして配列を宣言した場合にC++では配列の実体をメンバとして持つのに対し、Javaでは配列の実体は別のところに作られて参照だけを持つというところでないの?
17 名前:デフォルトの名無しさん mailto:sage [2020/07/14(火) 08:30:26.07 ID:5kZc9hZE.net] 7の人です みなさんありがとうございます 別のやり方考えます
18 名前:デフォルトの名無しさん mailto:sage [2020/07/14(火) 09:28:38.75 ID:PHX4w74f.net] >>16 配列は関係ない C++はクラス型のクラス変数を定義すると実体を持つから自分自身を定義できないってだけ JavaやC#は実体じゃなくてポインタを持つだけだから問題ないってこと
19 名前:デフォルトの名無しさん [2020/07/14(火) 12:52:08.42 ID:Mma3I+br.net] C/C++ はヌルポを敢えて使う
20 名前:◆QZaw55cn4c mailto:sage [2020/07/14(火) 20:49:37 ID:M3PBKw+D.net] >>19 確かに仮想関数じゃなかったら普通に this に 0 を入れてもコールできますね… https://ideone.com/C6Hkwy
21 名前:デフォルトの名無しさん mailto:sage [2020/07/14(火) 23:49:13 ID:PYLNqhFb.net] 未定義動作
22 名前:はちみつ餃子 mailto:sage [2020/07/15(水) 01:04:37.36 ID:hr2ndtrb.net] >>20 わかりやすく変な挙動に突入する例。 https://wandbox.org/permlink/Olp5JUR1pg4MxBMd
23 名前:デフォルトの名無しさん [2020/07/15(水) 12:07:21 ID:cL9c5hZ8.net] enum {hoge, fuga, hage}; で hoge==0 fuga==1 hage==2 として使えるとして 0,1,2とかの数字から実行時にhoge,fuga,hageの名前を知りたい時って 何か便利なインターフェースありますか? みんな毎回線形探索のコード描くみたいにやってる?
24 名前:デフォルトの名無しさん mailto:sage [2020/07/15(水) 12:39:32.75 ID:fkxllX2L.net] >>23 連番なら配列に入れときゃいい 番号飛んでいて… ・件数少ないなら線形サーチ ・件数多いならハッシュとかバイナリサーチとか
25 名前:デフォルトの名無しさん mailto:sage [2020/07/15(水) 12:50:24.76 ID:Gd6Zo+Db.net] >>23 VSだったらデバッガで名前表示されるけど あれ列挙に名前までつけた時だけだっけな
26 名前:デフォルトの名無しさん [2020/07/15(水) 13:02:12.66 ID:cL9c5hZ8.net] 連番じゃないときとか 結構でかい番号だったりするときは困りますね
27 名前:デフォルトの名無しさん [2020/07/15(水) 13:08:43.15 ID:ONqo+DKP.net] ##演算子でどうにかなるんじゃね
28 名前:デフォルトの名無しさん [2020/07/15(水) 13:14:49.36 ID:jM1x+GOc.net] IT掲示板群 ttp://x0000.net/forum.aspx?id=15 学術の巨大掲示板群 - アルファ・ラボ ttp://x0000.net 数学 物理学 化学 生物学 天文学 地理地学 IT 電子 工学 言語学 国語 方言 など simulationライブラリで純粋な関数式プログラミングをする ttp://x0000.net/topic.aspx?id=3631-0 UIライブラリ (C#, 2D) を作ったよ ttp://x0000.net/topic.aspx?id=3688-0 連続と離散を統一した! ttp://x0000.net/topic.aspx?id=3709-0 4Dエンジン(画像有り) ttp://x0000.net/topic.aspx?id=3677-0 matrixのライブラリ ttp://x0000.net/topic.aspx?id=3711-0 ある強力なFor関数 ttp://x0000.net/topic.aspx?id=3630-0 SQLライブラリ ttp://x0000.net/topic.aspx?id=3675-0 ☆ VMを書いた(C#) * x86ではない! ttp://up.x0000.net/files/TSimulang.zip ☆ malloc / free を実装してみた (C#) ttp://up.x0000.net/files/TMallocTest.zip
29 名前:デフォルトの名無しさん [2020/07/15(水) 13:38:14.90 ID:cL9c5hZ8.net] 線形探索するにしても enum 用に foreach もあるのかなと思ったのですが sanichi999.hateblo.jp/entry/2014/12/19/011820 こんな感じですね 名前とか同じことを何度も書いてる気がしてしまうのと 割と定型な気がするのでコンパイラが提供してくれてないかなと思ったで質問しました
30 名前:はちみつ餃子 mailto:sage [2020/07/15(水) 15:30:19.58 ID:hr2ndtrb.net] 実行時に列挙定数の名前の文字列が欲しいことがそんなにあるかな? デバッグプリント用途くらいしか思いつかんのだけど。
31 名前:デフォルトの名無しさん mailto:sage [2020/07/15(水) 16:14:13 ID:LgiIyt9Z.net] vector<int> a = {8, 1, 9, 5, 7, 3}; があるときに例えば vector<int> b = a{0, 2, 5}; とかしたら b が {8, 9, 3} の配列みたいになってくれる書き方ってありますか?
32 名前:デフォルトの名無しさん mailto:sage [2020/07/15(水) 16:43:08 ID:stUpixMt.net] vector<int> b = {a[0], a[2], a[5]};
33 名前:はちみつ餃子 mailto:sage [2020/07/15(水) 20:59:08.41 ID:hr2ndtrb.net] >>31 そういう関数を書けばええだけちゃうの https://wandbox.org/permlink/qzItmLsbnO6HlTqs
34 名前:デフォルトの名無しさん mailto:sage [2020/07/15(水) 23:08:06.76 ID:4eO2mC8f.net] >>31 for(int& e: b) e = a[e];
35 名前:デフォルトの名無しさん mailto:sage [2020/07/16(木) 12:17:49.42 ID:rBscjMJk.net] >>23 msvc/clangのc++17限定でよければ、nameof c++というライブラリがある。
36 名前:デフォルトの名無しさん mailto:sage [2020/07/16(木) 12:58:54.15 ID:Bj5j4Y6i.net] >>33 https://ideone.com/x0lKkD で for(auto t: {indices...}) std::cout << source[t] << std::endl; だと動くのですが for(T t: {indices...}) std::cout << source[t] << std::endl; だとエラーになります どうして?
37 名前:はちみつ餃子 mailto:sage [2020/07/16(木) 13:49:08.52 ID:MICl0UeU.net] >>36 エラーメッセージを見ればわかるやろ。 T はパラーメーターパックであって、展開せずに使うということはできへんのや……。
38 名前:デフォルトの名無しさん mailto:sage [2020/07/16(木) 15:12:49.52 ID:sYAaUXpT.net] >>36 memo https://ideone.com/DZFPxq https://theolizer.com/cpp-school2/cpp-school2-16/
39 名前:デフォルトの名無しさん mailto:sage [2020/07/17(金) 13:55:06.86 ID:xXsIieN6.net] テンプレートが型付マクロにしかみえません 眼科に行った方が良いですか?
40 名前:デフォルトの名無しさん mailto:sage [2020/07/17(金) 14:44:53.44 ID:p55TjBUs.net] 型付であることこそ重要です
41 名前:デフォルトの名無しさん mailto:sage [2020/07/17(金) 17:27:51.73 ID:LIcKojh8.net] マクロといってのcのマクロではなくlispのマクロ的な機能 まあコンパイル時の制限はあるけど
42 名前:デフォルトの名無しさん [2020/07/18(土) 01:05:56.87 ID:vSXqjqjP.net] Win32APIでコンボボックスの値をオーナードローしているんですが、wchar_tで項目追加すると文字の描画ができるんですが、 c_str()だと文字化けします。何故ですか? ・WM_INITDIALOG 文字化けしないケース const wchar_t *a = L"あいうえお"; SendMessage(hForeColor, CB_ADDSTRING, 0, LPARAM(a)); 文字化けするケース std::wstring b = L"あいうえお"; SendMessage(hForeColor, CB_ADDSTRING, 0, LPARAM(b.c_str())); ・WM_DRAWITEM DrawText(lpDraw->hDC, (wchar_t*)lpDraw->itemData, -1, &r2, DT_LEFT | DT_VCENTER | DT_SINGLELINE);
43 名前:デフォルトの名無しさん mailto:sage [2020/07/18(土) 01:43:29.19 ID:2xoJksuz.net] 表示する時にはbが解放されてるんじゃないの?
44 名前:デフォルトの名無しさん mailto:sage [2020/07/18(土) 02:35:10.07 ID:IdAxqtyn.net] オーナードローの時、CBS_HASSTRINGSスタイル指定しないと、そんな感じになるっぽいね CB_ADDSTRINGメッセージに書いてあるね
45 名前:デフォルトの名無しさん [2020/07/18(土) 13:25:54.56 ID:94poIsAY.net] 1つの言語をある程度やりこまないと能力値がリセットされますか?
46 名前:デフォルトの名無しさん [2020/07/18(土) 13:38:50.50 ID:uRU3MGLx.net] 理解する能力と 使いこなす能力と 創造する能力は 全部別
47 名前:デフォルトの名無しさん [2020/07/18(土) 15:42:57.82 ID:94poIsAY.net] 理解力のことです ごめんなさい
48 名前:デフォルトの名無しさん mailto:sage [2020/07/18(土) 15:58:14.32 ID:qVma+RcU.net] リセットはされない。 複数言語を学ぶときは並行にやって混乱するか順番にやって混乱するかのどちらか。 自分に向いた方を選べ。
49 名前:デフォルトの名無しさん mailto:sage [2020/07/18(土) 16:14:37.72 ID:C0jdHcgs.net] ある程度やりこまなければある程度落ちるのは常識 ある程度やりこめばある程度上がるのも常識
50 名前:デフォルトの名無しさん mailto:sage [2020/07/18(土) 17:22:27.13 ID:Bt+NBO6d.net] >>45 リセットされたのではなく、自分が理解できていたと思い込んでいただけで実際の理解がその程度だったということに気づかされただけだと思うぞ。
51 名前:デフォルトの名無しさん [2020/07/18(土) 18:01:57.62 ID:51enBbxV.net] あるある
52 名前:デフォルトの名無しさん mailto:sage [2020/07/18(土) 18:20:51.79 ID:sJrDCvPM.net] fopenでccs=utf-8を指定して改行コードのCRLFをfputwsで書き込んだら CRCRLFになったんですけど。バグですか?
53 名前:デフォルトの名無しさん [2020/07/18(土) 18:38:01.13 ID:yqiH8/gB.net] appendで開いてたり
54 名前:蟻人間 mailto:sage [2020/07/18(土) 18:39:23.19 ID:5h3AvQ+O.net] >>52 WindowsではLFがCR LFに変換されるので、仕様ですよ。 CRを出力しないか、バイナリファイルとして出力して下さい。
55 名前:デフォルトの名無しさん mailto:sage [2020/07/18(土) 19:04:26.79 ID:sJrDCvPM.net] 何と!
56 名前:デフォルトの名無しさん mailto:sage [2020/07/18(土) 19:10:12.51 ID:tp8HW1uL.net] バイナリじゃなく、テキスト処理してる場合は、 各OS のAPI を使った時に、 Windows なら、CRLF になって、 Linux なら、LF になるのだろう Ruby でもそう。 Windows にインストールしたものは、CRLF になって、 Linux にインストールしたものは、LF になる
57 名前:デフォルトの名無しさん mailto:sage [2020/07/18(土) 19:19:47.61 ID:zDePOjuW.net] LFがCRLFになるんじゃなくて\nがCRLFになっただけじゃないのか?
58 名前:蟻人間 mailto:sage [2020/07/18(土) 19:26:44.67 ID:NJ+LQ+vq.net] \nがLFなんだよ。
59 名前:デフォルトの名無しさん mailto:sage [2020/07/18(土) 19:38:21.74 ID:zDePOjuW.net] \x0aを出力してみればはっきりする。
60 名前:56 mailto:sage [2020/07/18(土) 19:57:14.80 ID:tp8HW1uL.net] Global New Line みたいな指定もある。 \n が、OS によって自動的に切り替わるもの Windows なら、CRLF になって、 Linux なら、LF になる
61 名前:デフォルトの名無しさん mailto:sage [2020/07/19(日) 06:39:45.80 ID:wsDBDsuq.net] \nはコンパイラが読み込んだ時点でLFに変換される そうでないと、'\n'みたいな文字を読み込んだ時に 保存に2バイト必要になってしまう
62 名前:デフォルトの名無しさん [2020/07/21(火) 11:50:35.81 ID:IJfaFmgd.net] C++のenumの仕様について質問させてください enum Aとenum Bが定義されていた時、 void func(enum A); void func(enum B); のようにオーバーロードできるでしょうか。
63 名前:デフォルトの名無しさん [2020/07/21(火) 11:58:59.44 ID:+OCbOnRh.net] enum class
64 名前:蟻人間 mailto:sage [2020/07/21(火) 17:34:57.28 ID:w/y1zMfY.net] >>62 https://twitter.com/katahiromz/status/1285493340574584832/photo/1 可能みたいだよ。 (deleted an unsolicited ad)
65 名前:デフォルトの名無しさん [2020/07/21(火) 23:37:14.31 ID:4GG7eaxB.net] main が無いって言われたω https://ideone.com/9as1fP
66 名前:デフォルトの名無しさん mailto:sage [2020/07/22(水) 00:40:20 ID:JDoVEEwE.net] 正確にはなんて言われた?
67 名前:デフォルトの名無しさん [2020/07/22(水) 01:34:47.06 ID:JL2g1NmT.net] ここのひとか https://mevius.5ch.net/test/read.cgi/tech/1589120427/581-
68 名前:デフォルトの名無しさん [2020/07/31(金) 02:13:31 ID:zHNUGG0v.net] 最近C++勉強し始めて疑問に思ったので教えて下さい std::vector<int>vec; auto result = std::find(vec.begin(), vec.end(),3); 上記のようにvectorを宣言だけで初期化せずにfind関数内でbegin()、end()を使用しても例外が発生しません これは範囲外の要素にアクセスしているわけじゃないという理解でよろしいでしょうか
69 名前:デフォルトの名無しさん mailto:sage [2020/07/31(金) 02:35:13 ID:E2vmFTLm.net] そうだね というか最初はbegin=endだから、findで一度もループ処理が発生しないだけ
70 名前:デフォルトの名無しさん mailto:sage [2020/07/31(金) 08:38:17.94 ID:UG/y1RVK.net] >>68 自分で明示的に初期化していないだけで、vectorの変数を宣言しただけで勝手に(サイズが0のvectorとして)初期化してくれる。 vectorのコンストラクタがそれをやってくれている。
71 名前:デフォルトの名無しさん mailto:sage [2020/07/31(金) 10:00:44.09 ID:zHNUGG0v.net] >>69-70 わかりやすい説明ありがとうございました なんかスッキリしました
72 名前:デフォルトの名無しさん [2020/07/31(金) 11:04:11.23 ID:N0eufbNj.net] #include <vector> #include <algorithm> #include <iostream> int main() { std::vector<int>vec; vec.reserve(10); auto result = std::find(vec.begin(), vec.end(),3); std::vector<int>vec2; vec2.resize(10); auto result2 = std::find(vec2.begin(), vec2.end(),3); return 0; }
73 名前:デフォルトの名無しさん mailto:sage [2020/08/04(火) 14:37:50.75 ID:Rtr7oft5.net] boostっていうやつはもう下火なんですか?
74 名前:はちみつ餃子 mailto:sage [2020/08/04(火) 20:36:32.51 ID:tYSlSmQK.net] んなわけない
75 名前:デフォルトの名無しさん mailto:sage [2020/08/04(火) 22:16:06 ID:GxIT23CH.net] 極力使わずに済ませたい
76 名前:デフォルトの名無しさん mailto:sage [2020/08/05(水) 08:45:38 ID:FS19WAoY.net] 下火っていうか 調理場にあるラップのようなもので特に意識されることはないけど欠かすことのできないもの でもラップを使った料理っていうとどうしてもお手軽感がぬぐえない プロの調理師はこういうものはできるだけ人目につかないようにする
77 名前:デフォルトの名無しさん mailto:sage [2020/08/05(水) 12:41:11.56 ID:2ArdD7yz.net] ラップは隠さんだろ 化調でどうよ
78 名前:デフォルトの名無しさん mailto:sage [2020/08/06(木) 09:55:51.94 ID:oJAb3tlF.net] 聞き方が悪かった boostは習熟したほうがいいですか?
79 名前:デフォルトの名無しさん mailto:sage [2020/08/06(木) 10:17:16 ID:5aD4OAJs.net] あなたのやりたいことに役立つのなら。
80 名前:デフォルトの名無しさん [2020/08/06(木) 11:01:09.05 ID:6QU45l4b.net] boostじゃなくても同じことが出来るものがあったら後者を選ぶな なんでだろ自分でもわからんω
81 名前:デフォルトの名無しさん [2020/08/06(木) 11:13:25 ID:YI93igBY.net] いまならasioなどのために使うのでは。 そしてネットワーキングTSが標準に入ると、また使わなくなる。 そういうサイクルがあるのでは。
82 名前:デフォルトの名無しさん mailto:sage [2020/08/07(金) 21:54:30 ID:3kAM9W6f.net] >>42 win32api使うならTCHAR使いましょうよ
83 名前:デフォルトの名無しさん mailto:sage [2020/08/08(土) 02:45:50.43 ID:sjyRGzAl.net] MBCS対応する気ないならTCHAR使う意味ないよ MBCS_Support_Deprecated_In_MFCだし
84 名前:デフォルトの名無しさん mailto:sage [2020/08/08(土) 07:16:16.82 ID:f+HIJ1ud.net] WCHAR決め打ちで行くんならDrawTextWにしないと
85 名前:デフォルトの名無しさん [2020/08/08(土) 10:09:00.08 ID:noFfmCPy.net] >>82 TCHARはオワコン 全く不要
86 名前:デフォルトの名無しさん mailto:sage [2020/08/08(土) 11:52:52.81 ID:xwl14JrI.net] じゃあ何使うか言え
87 名前:デフォルトの名無しさん mailto:sage [2020/08/08(土) 12:49:23.95 ID:jGasFcRb.net] ナウはQuattroかな
88 名前:デフォルトの名無しさん mailto:sage [2020/08/08(土) 13:08:28.52 ID:Lqpd9lsB.net] >>86 wchar_tでいいよ ちなみに>>84 みたいなのはバカのやること
89 名前:デフォルトの名無しさん mailto:sage [2020/08/08(土) 13:25:08.03 ID:xwl14JrI.net] >>88 ありがとう
90 名前:デフォルトの名無しさん [2020/08/08(土) 15:09:16 ID:OT1M6D83.net] https://ja.uncyclopedia.info/wiki/Progress_display これは素晴らしいな。
91 名前:デフォルトの名無しさん [2020/08/08(土) 15:39:24 ID:pp0rnVLU.net] https://ja.wikipedia.org/wiki/Sl_(UNIX)
92 名前:デフォルトの名無しさん [2020/08/08(土) 16:39:57.58 ID:/RuHG5bH.net] C++11の前はboostめ
93 名前:っちゃ使ってました [] [ここ壊れてます]
94 名前:デフォルトの名無しさん [2020/08/08(土) 16:52:58.78 ID:OT1M6D83.net] Debianがgcc8なのでfilesystemをboostのほう使うとか。 互換性が動機という場合もありますね。
95 名前:デフォルトの名無しさん mailto:sage [2020/08/08(土) 19:24:55 ID:Sbg9T/ud.net] C++ の仕様に関する質問です。 OpenGL では、 typedef unsigned char GLboolean; #define GL_FALSE 0 #define GL_TRUE 1 void glVertexAttribPointer (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer); となっていますが、 glVertexAttribPointer(locAttr, 3, GL_FLOAT, GL_FALSE, 8 * sizeof(float), (void*)0); と書いた場合、第四引数の GL_FALSE は 0 なので、int 型の整数リテラル(32BIT)ですが、対応する仮引数は、 GLboolean 型(8BIT)となっています。 overload resolution で、best matching アルゴリズムで最適な関数を探す際、対象の関数のプロトタイプ宣言の仮引数の型と 実引数の型を比較して、1つでも型が不適格のものが見つかった場合、「viable function」ではないとみなされ、候補から除外されます。 例として、unsigned char 型の仮引数に、int 型の変数を渡そうとすれば、不適格に成り、その関数は対象から除外されます。 しかし、この場合の様に、0 や 1 という整定値ならどうなるでしょうか。つまり、 unsigend char 型の仮引数に int 型の整数であるところの 0 という整数リテラルが、「適合」するというのは、 正しい仕様でしょうか?
96 名前:デフォルトの名無しさん mailto:sage [2020/08/08(土) 20:40:58.31 ID:jGasFcRb.net] その関数はCの関数なので、そもそもマンぐり返されてないし、より適合するオーバーロード関数の存在なんて考慮してないんじゃね?
97 名前:デフォルトの名無しさん mailto:sage [2020/08/08(土) 21:31:49.81 ID:Sl6pvmJG.net] >>94 > unsigned char 型の仮引数に、int 型の変数を渡そうとすれば、不適格に成り、その関数は対象から除外されます。 これが誤解なのでは? 暗黙変換されるでしょ。
98 名前:デフォルトの名無しさん mailto:sage [2020/08/09(日) 00:18:25.48 ID:5wTPapRC.net] >>96 確認しました。charの仮引数の場所に、int 変数を実引数にして渡しても、 エラーも警告も出ませんでした。 関数呼び出しだけでなく、 int i = 0x123456; char c = i; としてもエラーも警告も出ませんでした。 テストは、VS2019のC++で行いました。
99 名前:はちみつ餃子 mailto:sage [2020/08/09(日) 00:32:08.26 ID:ayHdPpdd.net] 整数型同士はどの組み合わせでも暗黙の型変換はされるんじゃね。 変換後の型が符号付きかつ、変換後の型が表現できる範囲に収まらない値だったときの挙動が未定義ではあるので、 狭い方向への変換のときに警告くらいは出してくれることもあるみたいだが、 オーバーロードの解決の際に排除されることはない。
100 名前:デフォルトの名無しさん mailto:sage [2020/08/09(日) 12:09:42.16 ID:5wTPapRC.net] >>98 ついでに、お聞きしたいのですが、 class CBase {・・・}; class CDerived : public CBase {・・・}; の場合、 CDerive* ---> CBase* への変換は標準変換は有りますが、 CBase* ---> CDerive* への変換は標準変換は有りませんよね。 しかし、 CBase *pBase; に対して、 (CDerived*)pBase というcastは、down castであり、気をつけなければならないキャストではありますが、組み込みのcastとして、 どのコンパイラでもサポートしています。 (この場合、型の解釈の変更だけでなく、マシン語レベルでの生の値も、offset分だけ変更になることがあるのは 周知の通りです。) ということは、標準変換ではないにも関わらず、キャストではなぜかサポートしていると言うことになるのでしょうか?