C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。
前スレ
C++相談室 part142
https://mevius.5ch.net/test/read.cgi/tech/1554124625/
このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.105【環境依存OK】
https://mevius.5ch.net/test/read.cgi/tech/1556142878/
■長いソースを貼るときはここへ。■
http://codepad.org/
https://ideone.com/
[C++ FAQ]
https://isocpp.org/wiki/faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
----- テンプレ ここまで -----
VIPQ2_EXTDAT: default:vvv:1000:512:----: EXT was configured
探検
C++相談室 part143
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ)
2019/06/15(土) 13:51:53.57ID:DKQ0QQLH0247デフォルトの名無しさん (ワッチョイ)
2019/06/29(土) 09:36:35.93ID:TGC7pT1Z0248デフォルトの名無しさん (ワッチョイ)
2019/06/29(土) 09:56:05.74ID:XuKJ1prL0 >>245
alignasが目的に合うように見えるが使ったことがないから適切かどうか分からん
alignasが目的に合うように見えるが使ったことがないから適切かどうか分からん
249デフォルトの名無しさん (ワッチョイ)
2019/06/29(土) 09:59:59.32ID:YSWfxQRJ0250デフォルトの名無しさん (ワッチョイ)
2019/06/29(土) 10:02:29.39ID:xxikbG460 アライメント指定してnewしてほしいクラスがある時
newする側にそれをどうやって伝えるべきか?という問題です
newする側にそれをどうやって伝えるべきか?という問題です
251デフォルトの名無しさん (ワッチョイ)
2019/06/29(土) 10:18:23.37ID:YSWfxQRJ0 __attribute__ ((aligned(x)))
252デフォルトの名無しさん (ワッチョイ)
2019/06/29(土) 10:20:28.90ID:TGC7pT1Z0 アライメント指定してnewしてほしいクラスTのoperator new()を
オーバーロードしてaligned_malloc()でも呼ぶようにすれば良い
オーバーロードしてaligned_malloc()でも呼ぶようにすれば良い
253デフォルトの名無しさん (ワッチョイ)
2019/06/29(土) 10:35:52.45ID:vBcvr2/W0 class C {
public:
__m512i aa;
void* operator new(std::size_t n) {
std::cout << "new" << std::endl;
return ::operator new(n, std::align_val_t(64));
}
};
こういうことではなく?
public:
__m512i aa;
void* operator new(std::size_t n) {
std::cout << "new" << std::endl;
return ::operator new(n, std::align_val_t(64));
}
};
こういうことではなく?
254デフォルトの名無しさん (ワッチョイ)
2019/06/29(土) 10:37:05.53ID:1DstyLuX0 >>246
でもそれだと、intとdoubleで別々の処理を書かないといけなくなる。
vector<int>とvector<double>を両方作ってtemplate関数で呼び分ければ処理の記述自体は1つにできるでしょ。
でもそれだと、intとdoubleで別々の処理を書かないといけなくなる。
vector<int>とvector<double>を両方作ってtemplate関数で呼び分ければ処理の記述自体は1つにできるでしょ。
255デフォルトの名無しさん (ワッチョイ)
2019/06/29(土) 10:45:25.08ID:cHNlfV280 >>246
整数値のビット数が長いとdoubleじゃダメ
整数値のビット数が長いとdoubleじゃダメ
256デフォルトの名無しさん (ワッチョイ)
2019/06/29(土) 10:55:17.59ID:TGC7pT1Z0257デフォルトの名無しさん (ワッチョイ)
2019/06/29(土) 10:59:12.33ID:TGC7pT1Z0 >>254
どっちかというとunionベースのクラスの出番かとオモテタ
要素型の方でキャスト演算子を定義するなどして整数型解釈と浮動小数点型解釈に両方対応したら、
コンテナを2種類用意する必要はなくなる
キモス
どっちかというとunionベースのクラスの出番かとオモテタ
要素型の方でキャスト演算子を定義するなどして整数型解釈と浮動小数点型解釈に両方対応したら、
コンテナを2種類用意する必要はなくなる
キモス
258デフォルトの名無しさん (ワッチョイ)
2019/06/29(土) 11:35:29.00ID:sVUKPNaW0 V言語が出来るからC++なんて誰も使わなくなる
259デフォルトの名無しさん (ワッチョイ)
2019/06/29(土) 12:00:09.50ID:V+jAPY2V0 >>250
alignas
alignas
260デフォルトの名無しさん (ワッチョイ)
2019/06/29(土) 12:03:32.81ID:vBcvr2/W0 >>258
今度こそ本当だろうな?
今度こそ本当だろうな?
261デフォルトの名無しさん (ワッチョイ)
2019/06/29(土) 12:40:30.78ID:LSTTNlMa0 >>258
流行る要素がない
流行る要素がない
262デフォルトの名無しさん (ワッチョイ)
2019/06/29(土) 13:00:13.77ID:N8jtlPKB0 アライメント指定はとっくに言語に組み込まれてるんだけど…
263デフォルトの名無しさん (アウアウウー)
2019/06/29(土) 13:07:40.29ID:HkzJkYF9a C++ってハウルの動く城みたいな言語だよね
264デフォルトの名無しさん (ワッチョイ)
2019/06/29(土) 13:12:22.27ID:xxikbG460265デフォルトの名無しさん (ワッチョイ)
2019/06/29(土) 15:10:49.18ID:TGC7pT1Z0 newを呼び出す側がアライメントサイズを過少に設定しても、
コンパイラはnewしようとする構造体に含まれる全メンバのアライメント要請を把握しているはずなので
>>247式に構造体定義を対策しておけば問題無い配置でポインタを返してくれる気もする(そうすべきなのが道理
が(さもないとARMとかで例外で落ちるコードを簡単に量産できてしまう
newの細かい仕様は知らんのでわからん
コンパイラはnewしようとする構造体に含まれる全メンバのアライメント要請を把握しているはずなので
>>247式に構造体定義を対策しておけば問題無い配置でポインタを返してくれる気もする(そうすべきなのが道理
が(さもないとARMとかで例外で落ちるコードを簡単に量産できてしまう
newの細かい仕様は知らんのでわからん
266デフォルトの名無しさん (ワッチョイ)
2019/06/29(土) 15:31:17.71ID:vBcvr2/W0 そんなに迷うことある?
267デフォルトの名無しさん (ワッチョイ)
2019/06/29(土) 16:11:26.09ID:N8jtlPKB0 どっちかというとmallocしたメモリよりスタックで確保した場合に問題なることがある
環境やコンパイルオプションにもよるけど
環境やコンパイルオプションにもよるけど
268デフォルトの名無しさん (ブーイモ)
2019/06/29(土) 16:12:26.58ID:oMQgVAVxM atoiとかで解析する前後でオーバーフローを検出する方法ってあるの?
269デフォルトの名無しさん (オイコラミネオ)
2019/06/29(土) 16:15:01.31ID:gccJajeoM 長さでもみとけばいいんじゃないの
270デフォルトの名無しさん (ワッチョイ)
2019/06/29(土) 16:19:54.13ID:N8jtlPKB0271デフォルトの名無しさん (ワッチョイ)
2019/06/29(土) 16:35:00.54ID:/vAOJE6i0 >>263
でも便利なんだな、実は。
でも便利なんだな、実は。
272デフォルトの名無しさん (ワッチョイ)
2019/06/29(土) 16:43:49.04ID:ggIuLAhq0 vtableの仕様を標準規格化してれば、もっと便利になっていたのにな。
273デフォルトの名無しさん (ワッチョイ)
2019/06/29(土) 17:08:11.53ID:/vAOJE6i0 clangやLLVMって、coff 形式の object file は作れないのかな?
274デフォルトの名無しさん (ワッチョイ)
2019/06/29(土) 21:36:10.47ID:TGC7pT1Z0275デフォルトの名無しさん (ワッチョイ)
2019/06/29(土) 22:45:38.89ID:zjX1HUko0276デフォルトの名無しさん (ワッチョイ)
2019/06/30(日) 00:04:22.02ID:ft0B/0dK0277デフォルトの名無しさん (ワッチョイ)
2019/06/30(日) 00:15:31.74ID:DqQWlJNh0 C言語が一番使いやすいからな
278デフォルトの名無しさん (ワッチョイ)
2019/06/30(日) 00:34:51.63ID:UuQw9kvG0 C++はSTLの既存クラスに、新たなメンバ関数を追加できますか? 継承の新クラス作るのはではなく。
javascriptとかは追加できたとおもいます。
javascriptとかは追加できたとおもいます。
279デフォルトの名無しさん (ワッチョイ)
2019/06/30(日) 00:43:41.85ID:DqQWlJNh0 無理だからフリー関数作りましょう
280デフォルトの名無しさん (ワッチョイ)
2019/06/30(日) 01:56:53.48ID:exYwiLt20281デフォルトの名無しさん (ワッチョイ)
2019/06/30(日) 03:02:40.95ID:xrN+8YHV0 >>275
ありがとうございます。owner_lessを使えばbimapだけで済むとわかり、こんなふうにしてましたが
boost::bimap<boost::bimaps::set_of<weak_ptr<string>, owner_less<weak_ptr<string>>>, int>
unordered_setを使う方法もあるんですね。
しかしググってみると、参照先が消えたらハッシュ値が変わるから駄目だ、少し遅くてもstd::set<weak_ptr>にしとけって意見もあるようです。
https://stackoverflow.com/questions/13695640/how-to-make-a-c11-stdunordered-set-of-stdweak-ptr
まぁ自分で分かってやるなら好きにすればいい感じですかね
ありがとうございます。owner_lessを使えばbimapだけで済むとわかり、こんなふうにしてましたが
boost::bimap<boost::bimaps::set_of<weak_ptr<string>, owner_less<weak_ptr<string>>>, int>
unordered_setを使う方法もあるんですね。
しかしググってみると、参照先が消えたらハッシュ値が変わるから駄目だ、少し遅くてもstd::set<weak_ptr>にしとけって意見もあるようです。
https://stackoverflow.com/questions/13695640/how-to-make-a-c11-stdunordered-set-of-stdweak-ptr
まぁ自分で分かってやるなら好きにすればいい感じですかね
282デフォルトの名無しさん (ワッチョイ)
2019/06/30(日) 07:01:13.58ID:V2b2ALnu0 昔C++にお世話になってたんだけどその頃はゲームでよく使われる言語だったんだよね
今でもゲーム開発によく使われてるの?
今でもゲーム開発によく使われてるの?
283デフォルトの名無しさん (ワッチョイ)
2019/06/30(日) 07:14:28.67ID:CneIN5yy0284デフォルトの名無しさん (ワッチョイ)
2019/06/30(日) 08:26:27.75ID:VKcFh0qo0 ゲームエンジン自体はC++だけど、購入したエンジンを使って作る場合にはエンジンによって使う言語は変わる
285デフォルトの名無しさん (ワッチョイ)
2019/06/30(日) 08:41:33.25ID:V2b2ALnu0286デフォルトの名無しさん (ワッチョイ)
2019/06/30(日) 10:05:11.67ID:ft0B/0dK0287デフォルトの名無しさん (ワッチョイ)
2019/06/30(日) 10:59:26.27ID:xpepSpla0 新言語上げでよくやられてるC++叩きって、書いてる方の知識が98/03で止まってて
「そんなん最近のC++でも出来るし…」ってなる事が多い印象が強い
もちろん新言語の本当に優れてるところもあるんだろうけど、比較するなら比較元もちゃんと勉強しろと言いたい
あと「C++はこんなに危険!」ってどうしようもないクソコードを藁人形に出してきたりな
お前らの新言語の新機能も間違った理解でクソみたいな使い方したら危険だっての
「そんなん最近のC++でも出来るし…」ってなる事が多い印象が強い
もちろん新言語の本当に優れてるところもあるんだろうけど、比較するなら比較元もちゃんと勉強しろと言いたい
あと「C++はこんなに危険!」ってどうしようもないクソコードを藁人形に出してきたりな
お前らの新言語の新機能も間違った理解でクソみたいな使い方したら危険だっての
288デフォルトの名無しさん (ワッチョイ)
2019/06/30(日) 11:09:37.42ID:BKgyqS0e0 メタではみんなLISPを作りたがるんだけど、表現方法の違いで文法が狂う。
289デフォルトの名無しさん (ワッチョイ)
2019/06/30(日) 11:19:26.11ID:HRz15QoR0 そうはいってもRustは良さげなので
コンパイルがVisual C++クラスに瞬時に終わって
Visual Studioクラスの光速で反応するインテリセンスができたらぜひやりたい
変数がデフォルトでimmutableなのがたいへん痺れる、
コンパイルがVisual C++クラスに瞬時に終わって
Visual Studioクラスの光速で反応するインテリセンスができたらぜひやりたい
変数がデフォルトでimmutableなのがたいへん痺れる、
290デフォルトの名無しさん (ワッチョイ)
2019/06/30(日) 11:23:39.34ID:/mKHwNLn0 確かに今のC++の用途で置き換えられる可能性がありそうなのはRust位だな
291デフォルトの名無しさん (ワッチョイ)
2019/06/30(日) 11:27:27.66ID:ft0B/0dK0 でもRustは使いたくない。
292デフォルトの名無しさん (ワッチョイ)
2019/06/30(日) 11:30:06.24ID:BKgyqS0e0 Rustは情緒的に言って錆びだからな。蓄積使うんですーって感じの命名なのだろう。
293デフォルトの名無しさん (ワッチョイ)
2019/06/30(日) 11:39:32.70ID:iTCTHGA20 RustってC++11以降の機能を勉強して
難しすぎると感じた人がやったらすんなり入れるんだよね
でも普通の言語から移った人は何じゃこれってなる
C++11以降に挫折した人のための言語
難しすぎると感じた人がやったらすんなり入れるんだよね
でも普通の言語から移った人は何じゃこれってなる
C++11以降に挫折した人のための言語
294デフォルトの名無しさん (ワッチョイ)
2019/06/30(日) 13:14:05.13ID:HRz15QoR0 RustでC++ → Rustトランスレータを書いたら勉強になると思うわ
295デフォルトの名無しさん (ワッチョイ)
2019/06/30(日) 13:31:27.33ID:BKgyqS0e0 >>294
間にLLVM挟むと公共の福祉になりえます。
間にLLVM挟むと公共の福祉になりえます。
296デフォルトの名無しさん (ワッチョイ)
2019/06/30(日) 13:54:46.76ID:HRz15QoR0297デフォルトの名無しさん (ブーイモ)
2019/06/30(日) 14:03:37.82ID:aHps5PsQM298デフォルトの名無しさん (ワッチョイ)
2019/06/30(日) 14:31:31.86ID:BKgyqS0e0299デフォルトの名無しさん (ブーイモ)
2019/06/30(日) 15:34:49.82ID:TD3JD5CyM みんなC++がここまで残ることになるとは予想してた?
このままだとC++30とか40とか普通に来そう
このままだとC++30とか40とか普通に来そう
300デフォルトの名無しさん (ワッチョイ)
2019/06/30(日) 16:01:24.12ID:y+UHg1Q80 OSを除けば基礎的なソフトはだいたいC++でしょ
ふつーに重要言語の1つ
ふつーに重要言語の1つ
301デフォルトの名無しさん (ワッチョイ)
2019/06/30(日) 16:06:12.25ID:/mKHwNLn0 C++11以降標準のフットワークが軽くなってありがたい
その代わり要るんかこれ?みたいのもガンガン入ってくるけど
その代わり要るんかこれ?みたいのもガンガン入ってくるけど
302デフォルトの名無しさん (ワッチョイ)
2019/06/30(日) 16:09:27.02ID:9MaqxN1M0 >OSを除けば基礎的なソフトはだいたいC++でしょ
docker, kubeはgolangだが?
docker, kubeはgolangだが?
303デフォルトの名無しさん (ワッチョイ)
2019/06/30(日) 16:09:52.38ID:9MaqxN1M0 ちなみにgitはc
304デフォルトの名無しさん (ラクッペ)
2019/06/30(日) 16:10:56.10ID:Eya2a1WdM >>303
開発者があいつだからだろ
開発者があいつだからだろ
305デフォルトの名無しさん (ワッチョイ)
2019/06/30(日) 16:37:46.54ID:iTCTHGA20 golangが増えてきたね
Cを置き換える感じになりそう
言語仕様もCとPython混ぜたような言語だし
Cを置き換える感じになりそう
言語仕様もCとPython混ぜたような言語だし
306デフォルトの名無しさん (ワッチョイ)
2019/06/30(日) 16:42:10.94ID:9MaqxN1M0 c++が使われるとこってのはゲーム、ブラウザ、windows, MSoffice
とか、GUIでかつ計算資源どっかり使うようなプログラムだわ。
とか、GUIでかつ計算資源どっかり使うようなプログラムだわ。
307デフォルトの名無しさん (ワッチョイ)
2019/06/30(日) 16:59:55.50ID:HRz15QoR0 確かにVC++はMFCが使えるからGUI向きだな!
308デフォルトの名無しさん (ワッチョイ)
2019/06/30(日) 18:33:30.39ID:y+UHg1Q80 clang, llvm, jdk, .net core, chrome,ほとんどのゲームエンジン
この辺C++
他の主要ブラウザも大体C++のはず
dockerはgoで書かれたせいで性能が悪いって言ってる記事を読んだ事がある
この辺C++
他の主要ブラウザも大体C++のはず
dockerはgoで書かれたせいで性能が悪いって言ってる記事を読んだ事がある
309デフォルトの名無しさん (ワッチョイ)
2019/06/30(日) 18:34:08.60ID:y+UHg1Q80310デフォルトの名無しさん (ワッチョイ)
2019/06/30(日) 18:40:59.64ID:y+UHg1Q80 要するにC++は「ソースコードが大規模かつ性能がシビアに要求される」場面で使われる。
開発効率はJavaより悪い事が実証されてたはず。
なんかの研究論文もあったし多くの開発者の経験談もある。
だから開発効率を多少悪化させてでも性能を求める場合に使われる。
開発効率はJavaより悪い事が実証されてたはず。
なんかの研究論文もあったし多くの開発者の経験談もある。
だから開発効率を多少悪化させてでも性能を求める場合に使われる。
311デフォルトの名無しさん (ワッチョイ)
2019/06/30(日) 18:45:18.35ID:/mKHwNLn0 使える人揃えるの大変なんだよ
Rustの導入談とか見ると、
性能に問題があって他言語導入を検討したがC++は使える人がいないのでRustにしましたとか書いてあるし
Rustの導入談とか見ると、
性能に問題があって他言語導入を検討したがC++は使える人がいないのでRustにしましたとか書いてあるし
312デフォルトの名無しさん (ワッチョイ)
2019/06/30(日) 19:27:38.00ID:y5K6zYFc0 マジで?
313デフォルトの名無しさん (ワッチョイ)
2019/06/30(日) 19:34:56.51ID:CneIN5yy0 そもそもポインタが理解できる人が、アメリカの大学の理系の学生でもほとんどいないという話がある。
だから、C++が悪い言語というより、C++がある種の数学みたいに難しすぎて理解できない人が多いので
Javaなんかが必要になったらしい。
だから、C++が悪い言語というより、C++がある種の数学みたいに難しすぎて理解できない人が多いので
Javaなんかが必要になったらしい。
314デフォルトの名無しさん (アウアウカー)
2019/06/30(日) 19:49:13.48ID:+OB1DaoJa Rustはポインタ理解でない人が使える言語ではない気がする
315デフォルトの名無しさん (ワッチョイ)
2019/06/30(日) 19:56:47.32ID:9MaqxN1M0 ポインタが理解できるとかそういう問題じゃねーわ。
むしろ「〜の概念が理解できる」てだけでドヤって
まともなプログラム書けると思い込むバカが問題なんだわ。
むしろ「〜の概念が理解できる」てだけでドヤって
まともなプログラム書けると思い込むバカが問題なんだわ。
316デフォルトの名無しさん (ワッチョイ)
2019/06/30(日) 19:57:51.51ID:DqQWlJNh0 ポインタすら理解できない人にプログラミングは難しすぎないか?
317デフォルトの名無しさん (ワッチョイ)
2019/06/30(日) 20:16:06.58ID:y+UHg1Q80 >>313はただのデマだろう
ポインタが理解できないなんてことはありえない
ポインタが理解できないなんてことはありえない
318デフォルトの名無しさん (ワッチョイ)
2019/06/30(日) 20:16:57.22ID:y+UHg1Q80 C++がある種の数学ってなんだよ
この板最近一人おかしな作り話書き込み続けてるやつがいるよ
この板最近一人おかしな作り話書き込み続けてるやつがいるよ
319デフォルトの名無しさん (ワッチョイ)
2019/06/30(日) 20:17:37.05ID:v919s9nK0 包丁使えない人に料理は難しすぎないか?みたいな話だな。
包丁使えなくてもハサミ使えば料理できるでしょ。
包丁使えなくてもハサミ使えば料理できるでしょ。
320デフォルトの名無しさん (ワッチョイ)
2019/06/30(日) 20:19:17.74ID:vP+txDXc0 リファクタリング中毒言語
勉強すればするほど書き直したくなる
勉強すればするほど書き直したくなる
321デフォルトの名無しさん (ワッチョイ)
2019/06/30(日) 20:21:38.63ID:y+UHg1Q80 なんだろうな
中学生とかかな
中学生とかかな
322デフォルトの名無しさん (ワッチョイ)
2019/06/30(日) 20:57:12.06ID:9MaqxN1M0 どんな書き方しても新しい規格は出てくるわけで、
そこで古い書き方だからとかいちいち引っかかる奴はc++は向いてない。
そこで古い書き方だからとかいちいち引っかかる奴はc++は向いてない。
323デフォルトの名無しさん (ワッチョイ)
2019/06/30(日) 21:18:32.10ID:HRz15QoR0 RustスレなのにC++の話で申し訳ないが、この前
template<class T, class U> void tr_pos(const T& src, U& dst) { ... } // メンバ関数T::get()、U::set()がある前提
というテンプレートを1個書いて、メンバ関数get()やset()を有する無数のクラスA、B、C、...について
任意の組み合わせでの相互変換(および同一型のコピー)を可能ならしめたんじゃわ
C++は数学や!とそのときオモタわ
次の日、今度はメンバ関数get()やset()を持たないクラスFooとBarについて
template<class U> void tr_pos(const Foo& src, U& dst) { ... } // メンバ関数U::set()がある前提
template<class T> void tr_pos(const T& src, Foo& dst) { ... } // メンバ関数T::get()がある前提
template<class U> void tr_pos(const Bar& src, U& dst) { ... } // メンバ関数U::set()がある前提
template<class T> void tr_pos(const T& src, Bar& dst) { ... } // メンバ関数T::get()がある前提
というテンプレートを追加して、{ A, B, C, ... }とFoo、および{ A, B, C, ... }とBar、
および(前日実現済みの){ A, B, C, ... }内の任意のクラス間のの相互変換を
tr_pos(src, dst)と書いただけで可能ならしめるという壮大な体系を実現したんじゃわ
C++は数学や!という思いをそのときさらに強くしたわ
template<class T, class U> void tr_pos(const T& src, U& dst) { ... } // メンバ関数T::get()、U::set()がある前提
というテンプレートを1個書いて、メンバ関数get()やset()を有する無数のクラスA、B、C、...について
任意の組み合わせでの相互変換(および同一型のコピー)を可能ならしめたんじゃわ
C++は数学や!とそのときオモタわ
次の日、今度はメンバ関数get()やset()を持たないクラスFooとBarについて
template<class U> void tr_pos(const Foo& src, U& dst) { ... } // メンバ関数U::set()がある前提
template<class T> void tr_pos(const T& src, Foo& dst) { ... } // メンバ関数T::get()がある前提
template<class U> void tr_pos(const Bar& src, U& dst) { ... } // メンバ関数U::set()がある前提
template<class T> void tr_pos(const T& src, Bar& dst) { ... } // メンバ関数T::get()がある前提
というテンプレートを追加して、{ A, B, C, ... }とFoo、および{ A, B, C, ... }とBar、
および(前日実現済みの){ A, B, C, ... }内の任意のクラス間のの相互変換を
tr_pos(src, dst)と書いただけで可能ならしめるという壮大な体系を実現したんじゃわ
C++は数学や!という思いをそのときさらに強くしたわ
324デフォルトの名無しさん (ワッチョイ)
2019/06/30(日) 21:19:31.58ID:HRz15QoR0 さらに次の日、Foo型オブジェクトsrcとBar型オブジェクトdstについてtr_pos(src, dst)と
書いたらビルドエラーになったわ;
仕方ないので関数のオーバーロードを使って
void tr_pos(const Foo& src, Bar& dst) { tr_pos(src, A); tr_pos(A, dst); }
void tr_pos(const Bar& src, Foo& dst) { tr_pos(src, A); tr_pos(A, dst); }
のようにして解決したんじゃわ
C++はちょっとしたテクニックを要する数学や!とそのときオモタわ
さらに次の日、Foo型同士、およびBar型同士でコピーしたくなったので、
一昨日書いたテンプレートを特殊化したら行けるやろ、と思って
template<> void tr_pos<Foo>(const Foo& src, const Foo& dst) { ... }
template<> void tr_pos<Bar>(const Bar& src, const Bar& dst) { ... }
と書いたらコンパイラが一昨日書いたテンプレートではなくて昨日書いた
オーバーロード関数を特殊化しようとしてビルドエラーになるわrz
C++はいろいろ破綻している罠だらけの言語やとそのとき確信したわ;
書いたらビルドエラーになったわ;
仕方ないので関数のオーバーロードを使って
void tr_pos(const Foo& src, Bar& dst) { tr_pos(src, A); tr_pos(A, dst); }
void tr_pos(const Bar& src, Foo& dst) { tr_pos(src, A); tr_pos(A, dst); }
のようにして解決したんじゃわ
C++はちょっとしたテクニックを要する数学や!とそのときオモタわ
さらに次の日、Foo型同士、およびBar型同士でコピーしたくなったので、
一昨日書いたテンプレートを特殊化したら行けるやろ、と思って
template<> void tr_pos<Foo>(const Foo& src, const Foo& dst) { ... }
template<> void tr_pos<Bar>(const Bar& src, const Bar& dst) { ... }
と書いたらコンパイラが一昨日書いたテンプレートではなくて昨日書いた
オーバーロード関数を特殊化しようとしてビルドエラーになるわrz
C++はいろいろ破綻している罠だらけの言語やとそのとき確信したわ;
325デフォルトの名無しさん (アウアウウー)
2019/06/30(日) 21:42:30.00ID:quJHbj16a C++スレでC++の話をして何が悪いの
326デフォルトの名無しさん (ワッチョイ)
2019/06/30(日) 21:45:46.60ID:HRz15QoR0 C++の話は悪くないかもしれないが、関数テンプレートの部分特殊化ができないというC++の仕様は悪い
※ 個人の感想です
※ 個人の感想です
327デフォルトの名無しさん (アウアウウー)
2019/06/30(日) 21:47:02.52ID:quJHbj16a >>324
念のため確認なんだけど
template<> void tr_pos<Foo,Foo>(const Foo& src, const Foo& dst) { ... }
template<> void tr_pos<Bar,Bar>(const Bar& src, const Bar& dst) { ... }
じゃなくて?
念のため確認なんだけど
template<> void tr_pos<Foo,Foo>(const Foo& src, const Foo& dst) { ... }
template<> void tr_pos<Bar,Bar>(const Bar& src, const Bar& dst) { ... }
じゃなくて?
328デフォルトの名無しさん (ワンミングク)
2019/06/30(日) 21:47:07.25ID:FO3LFjkXM 皮肉もわからんか
オーバーロードの解決順を制御するTipsがあった気が
この辺はマジで分かりにくいわ
コンパイルオプションで名前解決の過程が可視化できるとありがたいんだけど
オーバーロードの解決順を制御するTipsがあった気が
この辺はマジで分かりにくいわ
コンパイルオプションで名前解決の過程が可視化できるとありがたいんだけど
329デフォルトの名無しさん (ワッチョイ)
2019/06/30(日) 21:50:50.85ID:DqQWlJNh0 constexpr ifで解決
330デフォルトの名無しさん (ワッチョイ)
2019/06/30(日) 22:04:25.11ID:HRz15QoR0331デフォルトの名無しさん (アウアウウー)
2019/06/30(日) 22:15:40.66ID:quJHbj16a さらに言えば<Foo,Foo>と<Bar,Bar>の所消しても動かん?
template<>void tr_pos(const Foo...
template<>void tr_pos(const Foo...
332デフォルトの名無しさん (ワッチョイ)
2019/06/30(日) 22:49:04.24ID:HRz15QoR0 >>331
それはさすがに駄目で、VC++で次のエラーになる
error C2912: 明示的な特殊化; 'void tr_pos(const Foo&,Foo &)' は関数テンプレートの特殊化ではありません。
原因は1日目に追加したtr_pos<T, U>(const T&, U&)、および2日目に追加したtr_pos<U>(const Foo&, U&)、tr_pos<T>(const T&, Foo&)の
3種類のうちのどれを特殊化すべきなのかわからないかららしい
それはさすがに駄目で、VC++で次のエラーになる
error C2912: 明示的な特殊化; 'void tr_pos(const Foo&,Foo &)' は関数テンプレートの特殊化ではありません。
原因は1日目に追加したtr_pos<T, U>(const T&, U&)、および2日目に追加したtr_pos<U>(const Foo&, U&)、tr_pos<T>(const T&, Foo&)の
3種類のうちのどれを特殊化すべきなのかわからないかららしい
333デフォルトの名無しさん (ワッチョイ)
2019/07/01(月) 01:21:35.16ID:BYU8+sPJ0 まとめ: >>323-324の状況において、特殊化は次のように手段を使い分けねばならない
(1) 3日目のtr_pos(Foo, Bar)の追加は、関数テンプレートの特殊化ではエラーになるので関数のオーバーロードで特殊化する必要がある。
(理由)
tr_pos(Foo, Bar)は以下の関数テンプレート全てに当てはまってしまい、コンパイラが特殊化対象を特定できない。
tr_pos<T, U>(T, U), tr_pos<U>(Foo, U), tr_pos(U, Bar)
(2) 4日目のtr_pos(Foo, Foo)の追加は、関数テンプレートを>>327のように型パラメータ<T, U>を全て指定して明示的特殊化するなら逝ける
(理由)
関数引数にBarが現れないことから、tr_pos<U>(U, Bar)は特殊化対象から外れる。
型パラメータ<T, U>を両方明示することにより、tr_pos<U>(Foo, U)も特殊化対象から外れる。
==> 残るtr_pos<T, U>(T, U)が特殊化対象の関数テンプレートであるとコンパイラが判断できる。
(3) 一方、4日目のやつを暗黙的特殊化で行おうとするとビルドエラーで失敗する。
(>>332でも述べたが、上記(1)と同じことになる。
T::get()やU::set()を持たないクラスであるFooやBarを無理やりtr_pos()というシグネチャで他と統一的に扱おうとした結果スゲー薄氷を踏むようなプログラミングになっていた、
ことがわかった、、
(1) 3日目のtr_pos(Foo, Bar)の追加は、関数テンプレートの特殊化ではエラーになるので関数のオーバーロードで特殊化する必要がある。
(理由)
tr_pos(Foo, Bar)は以下の関数テンプレート全てに当てはまってしまい、コンパイラが特殊化対象を特定できない。
tr_pos<T, U>(T, U), tr_pos<U>(Foo, U), tr_pos(U, Bar)
(2) 4日目のtr_pos(Foo, Foo)の追加は、関数テンプレートを>>327のように型パラメータ<T, U>を全て指定して明示的特殊化するなら逝ける
(理由)
関数引数にBarが現れないことから、tr_pos<U>(U, Bar)は特殊化対象から外れる。
型パラメータ<T, U>を両方明示することにより、tr_pos<U>(Foo, U)も特殊化対象から外れる。
==> 残るtr_pos<T, U>(T, U)が特殊化対象の関数テンプレートであるとコンパイラが判断できる。
(3) 一方、4日目のやつを暗黙的特殊化で行おうとするとビルドエラーで失敗する。
(>>332でも述べたが、上記(1)と同じことになる。
T::get()やU::set()を持たないクラスであるFooやBarを無理やりtr_pos()というシグネチャで他と統一的に扱おうとした結果スゲー薄氷を踏むようなプログラミングになっていた、
ことがわかった、、
334デフォルトの名無しさん (ワッチョイ)
2019/07/01(月) 01:26:55.48ID:VrgMufZ30 constexpr if使えって
335デフォルトの名無しさん (ワッチョイ)
2019/07/01(月) 07:07:40.85ID:BYU8+sPJ0 >>333プチ訂正orz
誤: tr_pos(U, Bar)
正: tr_pos<T>(T, Bar)
>>334
手元の環境はC++14なので使えないっぽい
および、>>323-324のガンはtr_pos<U>(Foo, U), tr_pos<T>(T, Bar)の2つのテンプレートの名前が
tr_pos<T, U>(T, U)と同じであることにあるのは確定的に明らかなので、これを治療するのが筋
constexpr ifに逃げるのはいささか筋が悪いかと、
※ tr_pos<U>(Foo, U), tr_pos<T>(T, Bar) を、それぞれtr_pos以外の固有の名前に改名し
(例えばtr_pos_from_Foo,とtr_pos_to_Bar)、
tr_pos<T, U>(T, U)にてそれらを使って共通の名前tr_posで実体化するテンプレートを書くならば、
テンプレート機能の中だけで目的(tr_pos(T, U)式のシグネチャへの統一)を果たせてシンプル&スマートに解決する。
誤: tr_pos(U, Bar)
正: tr_pos<T>(T, Bar)
>>334
手元の環境はC++14なので使えないっぽい
および、>>323-324のガンはtr_pos<U>(Foo, U), tr_pos<T>(T, Bar)の2つのテンプレートの名前が
tr_pos<T, U>(T, U)と同じであることにあるのは確定的に明らかなので、これを治療するのが筋
constexpr ifに逃げるのはいささか筋が悪いかと、
※ tr_pos<U>(Foo, U), tr_pos<T>(T, Bar) を、それぞれtr_pos以外の固有の名前に改名し
(例えばtr_pos_from_Foo,とtr_pos_to_Bar)、
tr_pos<T, U>(T, U)にてそれらを使って共通の名前tr_posで実体化するテンプレートを書くならば、
テンプレート機能の中だけで目的(tr_pos(T, U)式のシグネチャへの統一)を果たせてシンプル&スマートに解決する。
336デフォルトの名無しさん (ワッチョイ)
2019/07/01(月) 09:30:45.05ID:9r8RZXK30 >>317
アメリカのコンピュータ科学系の学生の7割がポインタが理解できないらしい。
アメリカのコンピュータ科学系の学生の7割がポインタが理解できないらしい。
337デフォルトの名無しさん (ワッチョイ)
2019/07/01(月) 10:02:33.15ID:PRpBlBSs0338デフォルトの名無しさん (ワッチョイ)
2019/07/01(月) 11:10:00.06ID:O1pDJEnN0 Ruby の女神・池澤あやかが言ってる
大学で、C言語を教えるから、ほとんどの人がプログラムを嫌いになる!
だから、Rubyから始めるべきだって!
YouTube に動画を上げてるKENTA も、初心者はRubyから始めるべきだって言ってる!
多言語やってる専門家は、皆、Rubyからって言う
大学で、C言語を教えるから、ほとんどの人がプログラムを嫌いになる!
だから、Rubyから始めるべきだって!
YouTube に動画を上げてるKENTA も、初心者はRubyから始めるべきだって言ってる!
多言語やってる専門家は、皆、Rubyからって言う
339デフォルトの名無しさん (ワッチョイ)
2019/07/01(月) 11:18:05.93ID:VrgMufZ30 動いているプログラムそのものを記述できるC言語を理解できないとコンピュータサイエンスを修めたとは言えないでしょ
340デフォルトの名無しさん (ワッチョイ)
2019/07/01(月) 11:58:55.18ID:PRpBlBSs0 俺もCから始めるべきだって思ってた
ま、俺自身はHSPやった後にCやったんだけど
最初スクリプト言語みたいなライトウェイトなやつやるべきだってのは正しいのかもね
ま、俺自身はHSPやった後にCやったんだけど
最初スクリプト言語みたいなライトウェイトなやつやるべきだってのは正しいのかもね
341デフォルトの名無しさん (ワッチョイ)
2019/07/01(月) 12:02:11.46ID:9r8RZXK30 実は、プログラミングに興味がある人は多くても、適性が余り無い人の方が多い。
だから、誰でも出来る言語の人気が高まる。それがスクリプト言語であり、
VBやC#だろう。多数決の投票では平易な言語が上位に来る。
だから、誰でも出来る言語の人気が高まる。それがスクリプト言語であり、
VBやC#だろう。多数決の投票では平易な言語が上位に来る。
342デフォルトの名無しさん (ワッチョイ)
2019/07/01(月) 12:20:44.35ID:egPtqar40 個人的にはC++は難しいのではなく面倒くさい言語だと思っている
343デフォルトの名無しさん (スップ)
2019/07/01(月) 12:24:01.47ID:1rDt3gobd ポインタが理解できないなら参照も理解できないと思うんだけどな
344デフォルトの名無しさん (ワッチョイ)
2019/07/01(月) 13:20:50.81ID:s+tlfRKE0 日本にはc言語ポインターだけを解説した本が有るじゃないか
自分はあれを読んで初めて
ポインターの何を理解出来ていないのかが解った
c言語は人間の認識的に誤りやすい書き方になっているのが問題
そういうのをシマンテッスク問題とか言うらしい
自分はあれを読んで初めて
ポインターの何を理解出来ていないのかが解った
c言語は人間の認識的に誤りやすい書き方になっているのが問題
そういうのをシマンテッスク問題とか言うらしい
345デフォルトの名無しさん (アウアウカー)
2019/07/01(月) 13:42:23.56ID:8FaRxtrBa アセンブリ言語を先に勉強すべきだんだよな
それだとメモリとそのアドレスを当たり前のように使うし
それこそがコンピュータなのだとわかる
そのあとで変数や参照はどう受け渡しされるのかを理解すればスムーズ
それだとメモリとそのアドレスを当たり前のように使うし
それこそがコンピュータなのだとわかる
そのあとで変数や参照はどう受け渡しされるのかを理解すればスムーズ
346デフォルトの名無しさん (ワッチョイ)
2019/07/01(月) 15:06:31.19ID:AV54Usro0 問題はアセンブリを始めるには手頃なアセンブラが無いというところか?
手頃さで言ったらGASぐらいだと思うんだが
手頃さで言ったらGASぐらいだと思うんだが
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- バリ島で男子生徒ら集団万引きか、防犯カメラ映像が拡散 京都の大谷中学・高校が「窃盗行為」謝罪★4 [七波羅探題★]
- 中国軍機レーダー照射、トランプ氏沈黙突く 試される日本外交 [蚤の市★]
- 【地震】青森県で震度6強 長周期地震動も 津波注意報すべて解除 ★7 [ぐれ★] [ぐれ★]
- トランプ大統領 エヌビディア製AI半導体の中国輸出許可 安全保障重視の方針転換 [蚤の市★]
- 【速報】高市首相 青森震度6強地震で負傷者30人 [蚤の市★]
- 【広島】「万引きした人を追跡」コンビニ店員の男性(46)を果物ナイフで刺したか 中国籍の少年(17)を殺人未遂容疑で現行犯逮捕 [ぐれ★]
- 【高市悲報】しかし、香港の火災とか青森の地震で不謹慎な事を言う奴が日中にいたら、そいつこそが世界の「癌」だよな [784715804]
- 気象庁・高市内閣「この後311級の地震の可能性があります。北海道〜関東の人は1週間は地震が来てもすぐ逃げられる格好をしてください」 [597533159]
- 寒さしのげる場所があって食べ物も豊富にあるなら熊は冬眠しないの?
- 冨岡ゆうんやが ニックネーム考えてや
- 常盤貴子の全盛期ってどれくらい凄かったの?
- 【悲報】高市早苗の擬人化がXで大バズりwwwwwwwwwwww [455031798]
