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:DKQ0QQLH0318デフォルトの名無しさん (ワッチョイ)
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ぐらいだと思うんだが
347デフォルトの名無しさん (ワッチョイ)
2019/07/01(月) 15:17:48.47ID:a6aZqP3P0 >>343
ところが、
1. TYPE[10][10] aaa; は理解しやすくても、
2. TYPE aaa[10][10];
3. TYPE *aaa[10][10];
4. TYPE (*aaa)[10][10];
3, 4 となると意味不明になる人が多いらしい。また、典型的な例として、
2の場合に、aaa[5] の意味を理解できない人が多い。
ところが、
1. TYPE[10][10] aaa; は理解しやすくても、
2. TYPE aaa[10][10];
3. TYPE *aaa[10][10];
4. TYPE (*aaa)[10][10];
3, 4 となると意味不明になる人が多いらしい。また、典型的な例として、
2の場合に、aaa[5] の意味を理解できない人が多い。
348デフォルトの名無しさん (ワッチョイ)
2019/07/01(月) 15:21:46.37ID:9r8RZXK30349デフォルトの名無しさん (ワッチョイ)
2019/07/01(月) 15:24:39.60ID:9r8RZXK30 >>342
実際にそういう人もいるが、自分が難しくて理解できないだけなのに、
言語設計に問題があるという風に捕らえる人もいる。そして多数決だと
圧倒的に後者のように感じる人が多くなってしまう。微分積分や
複素数、ベクトルはどれも美しい理論だが、理解できないために、
不要論が出てくるのと同じ。
実際にそういう人もいるが、自分が難しくて理解できないだけなのに、
言語設計に問題があるという風に捕らえる人もいる。そして多数決だと
圧倒的に後者のように感じる人が多くなってしまう。微分積分や
複素数、ベクトルはどれも美しい理論だが、理解できないために、
不要論が出てくるのと同じ。
350デフォルトの名無しさん (ブーイモ)
2019/07/01(月) 15:39:49.57ID:EBI1AAR2M 言語設計は誉められたもんじゃないだろ
数学に例えられるレベルじゃない
数学に例えられるレベルじゃない
351デフォルトの名無しさん (ワッチョイ)
2019/07/01(月) 15:47:20.77ID:VrgMufZ30 でもC/C++に変わるものが無いのが現実なんだよね
結局これがベター
結局これがベター
352デフォルトの名無しさん (ワッチョイ)
2019/07/01(月) 16:34:31.14ID:a6aZqP3P0 >>350
でも、ポインタの書き方なんかはC設計者によるとても美しい設計とも言える部分。
言語設計が汚いのは、むしろ、C++に後から追加されてきた部分で、特に
最近に付け加えられてきた部分が誰かの言ったように「ハウルの動く城」的
になっている。
ところが、逆のことを言ってしまう人がいて、その人はポインタが理解できる
才能が無い人だと思う。
でも、ポインタの書き方なんかはC設計者によるとても美しい設計とも言える部分。
言語設計が汚いのは、むしろ、C++に後から追加されてきた部分で、特に
最近に付け加えられてきた部分が誰かの言ったように「ハウルの動く城」的
になっている。
ところが、逆のことを言ってしまう人がいて、その人はポインタが理解できる
才能が無い人だと思う。
353デフォルトの名無しさん (ブーイモ)
2019/07/01(月) 17:17:50.53ID:P3ZjOgE1M >>351
そりゃ他の言語はC++のクラスを手本にクラスの仕様を決めてるからな
そりゃ他の言語はC++のクラスを手本にクラスの仕様を決めてるからな
354デフォルトの名無しさん (スフッ)
2019/07/01(月) 17:40:46.64ID:LBwvGCQOd355デフォルトの名無しさん (ワッチョイ)
2019/07/01(月) 17:43:47.18ID:9r8RZXK30 >>354
右辺値参照が理解できないのは分かるけど、単なる TYPE &aaa みたいな参照型
は、ポインタが理解しにくい人用に用意されたとも言われてる機能で、
ポインタが理解できたのにそれが理解できないとは考えにくい。
右辺値参照が理解できないのは分かるけど、単なる TYPE &aaa みたいな参照型
は、ポインタが理解しにくい人用に用意されたとも言われてる機能で、
ポインタが理解できたのにそれが理解できないとは考えにくい。
356デフォルトの名無しさん (ブーイモ)
2019/07/01(月) 18:19:11.58ID:P3ZjOgE1M 右辺値と左辺値で参照レベルが変わるのがややこしい原因だと思うけどね。
変数名aを左辺で使うとaという入れ物、右辺で使うとaの中身。
*bを左辺で使うとbの中身のアドレスが指し示す場所、
右辺で使うとbの中身が指してるアドレスの中に入ってる値。
参照レベルを変える演算子のない言語なら意識しないところだが。
変数名aを左辺で使うとaという入れ物、右辺で使うとaの中身。
*bを左辺で使うとbの中身のアドレスが指し示す場所、
右辺で使うとbの中身が指してるアドレスの中に入ってる値。
参照レベルを変える演算子のない言語なら意識しないところだが。
357デフォルトの名無しさん (ワントンキン)
2019/07/01(月) 19:34:03.65ID:/QTcp5brM glvalue
rvalue
lvalue
xvalue
prvalue
入門者の皆さんはまず上記の違いを把握することから始めましょう!
rvalue
lvalue
xvalue
prvalue
入門者の皆さんはまず上記の違いを把握することから始めましょう!
358デフォルトの名無しさん (ワッチョイ)
2019/07/01(月) 21:19:13.74ID:CBwS2tFI0 そういうのしょうもないと思わないってのはほんとセンスないわ。
359デフォルトの名無しさん (ブーイモ)
2019/07/01(月) 21:23:38.44ID:EBI1AAR2M 皮肉だろ
否定3つも使うな
お前は国語のセンスない
否定3つも使うな
お前は国語のセンスない
360デフォルトの名無しさん (ワッチョイ)
2019/07/01(月) 21:30:29.37ID:/C7KUVH40 韻を踏んでるのかと思った
361蟻人間 ◆T6xkBnTXz7B0 (スフッ)
2019/07/01(月) 21:40:34.52ID:4oyko1E1d ♪そうゆうの〜、しょ〜もないって、思わないって、ほんとセンスないないさぁ〜
作曲頼む
作曲頼む
362デフォルトの名無しさん (ワッチョイ)
2019/07/01(月) 21:54:03.12ID:DUIe02Rn0 槇原敬之かよ
363デフォルトの名無しさん (ワッチョイ)
2019/07/02(火) 08:17:38.82ID:vQT+qXro0 >>357
入門者はCを学んだ後、C++の class、メンバ関数、仮想関数、コンストラクタ、
デストラクタ、演算子のオーバーロード、継承、templateの基本などを学べば
C++の重要な部分は使えるので、xvalue、glvalue、prvalueなどは
すぐには分からなくてもいいと思う。
入門者はCを学んだ後、C++の class、メンバ関数、仮想関数、コンストラクタ、
デストラクタ、演算子のオーバーロード、継承、templateの基本などを学べば
C++の重要な部分は使えるので、xvalue、glvalue、prvalueなどは
すぐには分からなくてもいいと思う。
364デフォルトの名無しさん (ワッチョイ)
2019/07/02(火) 08:29:28.55ID:vQT+qXro0 便利そうに見えても、CやC++の基礎をすっ飛ばしてboostやSTLを学ぶのは
C++の本質が学べないので良くない。それらにも配列やリストなどがあって、
C#などの高級言語風に使えるので初心者は勘違いしてしまいがちだが、
それらは「動的」なものが多く、本来のC++の速度が出ない事がある。
もともとのC++は、静的な配列が基本なので、速度を上げたいなら、
静的な方で済む場合にはなるべく静的なものを使うべき。その基本を知らずに
STLだけを何の配慮も無く使っていたら、昔からのC++のような高速なアプリ
を作るのは困難。
C++の本質が学べないので良くない。それらにも配列やリストなどがあって、
C#などの高級言語風に使えるので初心者は勘違いしてしまいがちだが、
それらは「動的」なものが多く、本来のC++の速度が出ない事がある。
もともとのC++は、静的な配列が基本なので、速度を上げたいなら、
静的な方で済む場合にはなるべく静的なものを使うべき。その基本を知らずに
STLだけを何の配慮も無く使っていたら、昔からのC++のような高速なアプリ
を作るのは困難。
365デフォルトの名無しさん (ワッチョイ)
2019/07/02(火) 09:16:37.23ID:4nney+pq0366デフォルトの名無しさん (オイコラミネオ)
2019/07/02(火) 09:47:27.28ID:OxvoR50aM std::arrayとかあるじゃん
367デフォルトの名無しさん (ワッチョイ)
2019/07/02(火) 10:32:43.01ID:uMGeffjZ0 たとえ動的な、vector を使っていても、それよりも速いコードを書けないw
368デフォルトの名無しさん (アウアウウー)
2019/07/02(火) 11:01:07.84ID:YKseWMPYa それCで良くねってなってSTLとか使うのがおかしいとか言ってくるようになるんだろ?
テンプレートなんか使うんじゃねえとか。
テンプレートなんか使うんじゃねえとか。
369デフォルトの名無しさん (ワッチョイ)
2019/07/02(火) 13:50:47.02ID:vQT+qXro0 >>368
そうはならない。C++とCの違いは、STLが使えるかどうかではなく、
class、コンストラクタ、デストラクタ、メンバ関数、仮想関数、
演算子の多重定義、template などが使えるかどうかだから。
STLは、言語ではなく、template library。
そうはならない。C++とCの違いは、STLが使えるかどうかではなく、
class、コンストラクタ、デストラクタ、メンバ関数、仮想関数、
演算子の多重定義、template などが使えるかどうかだから。
STLは、言語ではなく、template library。
370デフォルトの名無しさん (ワッチョイ)
2019/07/02(火) 13:52:51.90ID:vQT+qXro0 Cにおいては、「標準ライブラリ」と呼ばれたライブラリは効率が良かったので
特殊な環境や黎明期以外では、それ以外を使う必要性は特になく、ほとんどの
場合それを使えば良いと考えられた。
ところが、STLはそういう設計にはなっていないことが多いので注意が必要だと
言っている。
特殊な環境や黎明期以外では、それ以外を使う必要性は特になく、ほとんどの
場合それを使えば良いと考えられた。
ところが、STLはそういう設計にはなっていないことが多いので注意が必要だと
言っている。
371デフォルトの名無しさん (ワンミングク)
2019/07/02(火) 14:21:08.67ID:0IWRI8p9M で、STLのどの辺が具体的に効率悪いの?
372デフォルトの名無しさん (ワッチョイ)
2019/07/02(火) 15:28:23.54ID:vQT+qXro0 >>371
Cの基本的な配列などを理解してない人は、コンピュータの動作の細かな仕組み
が分かってないので、挿入時間や末尾追加時間、参照のための時間などが
O(1)やO(N) などと言われてもちゃんと理解できないので、良く分からずに
単純なC風の配列で済むところを、vector などを使って遅くなったりしやすい。
array, vector, deque, list などを目的別に区別して使うためには、Cの配列や
ポインタが理解できないと難しいはずだ。どれもデータを集合させるためのもので、
速度やメモリの効率以外には余り違いは無いが、どういう違いがあるかはCや
アセンブラでの基礎が出来てなければ理解できしにくいと思われる。
たとえば構造体のメンバに配列データを入れる場合、サイズが固定である場合も
多いが、その場合には、文句なしに、TYPE aaa[16]; のような C流の配列で
十分。そこに vector を使ってしまう人がいて、それはかなり効率面で問題となる。
そのような場合には、std::array を使うのも避けるべきである。
Cの基本的な配列などを理解してない人は、コンピュータの動作の細かな仕組み
が分かってないので、挿入時間や末尾追加時間、参照のための時間などが
O(1)やO(N) などと言われてもちゃんと理解できないので、良く分からずに
単純なC風の配列で済むところを、vector などを使って遅くなったりしやすい。
array, vector, deque, list などを目的別に区別して使うためには、Cの配列や
ポインタが理解できないと難しいはずだ。どれもデータを集合させるためのもので、
速度やメモリの効率以外には余り違いは無いが、どういう違いがあるかはCや
アセンブラでの基礎が出来てなければ理解できしにくいと思われる。
たとえば構造体のメンバに配列データを入れる場合、サイズが固定である場合も
多いが、その場合には、文句なしに、TYPE aaa[16]; のような C流の配列で
十分。そこに vector を使ってしまう人がいて、それはかなり効率面で問題となる。
そのような場合には、std::array を使うのも避けるべきである。
373デフォルトの名無しさん (ワッチョイ)
2019/07/02(火) 15:38:38.79ID:vQT+qXro0374デフォルトの名無しさん (ワンミングク)
2019/07/02(火) 16:10:20.92ID:0IWRI8p9M 計算量と配列使うかvector使うかは別の問題なんだけど…
あとarrayの要件分かってる?
あとarrayの要件分かってる?
375デフォルトの名無しさん (ワッチョイ)
2019/07/02(火) 16:14:23.02ID:vQT+qXro0376デフォルトの名無しさん (ワッチョイ)
2019/07/02(火) 16:44:50.17ID:6JNNUWgV0 組み込みなんかだとvector始めSTL全部使えないとかあった
環境によっては標準ライブラリも全部使えないとかあったし
スタックサイズまで気にしなきゃいけないような組み込み系の話
環境によっては標準ライブラリも全部使えないとかあったし
スタックサイズまで気にしなきゃいけないような組み込み系の話
377デフォルトの名無しさん (オイコラミネオ)
2019/07/02(火) 16:50:12.65ID:OxvoR50aM >>375
arrayとcの配列って速度一緒だろ
arrayとcの配列って速度一緒だろ
378デフォルトの名無しさん (ワッチョイ)
2019/07/02(火) 17:21:45.00ID:85iZu+nz0 初めはSTLやフレームワークに依存した書き方で学んでも構わんと思うがね
そういうものが使えない環境で開発する人は、その時にそのための書き方を学べばいい
そういうものが使えない環境で開発する人は、その時にそのための書き方を学べばいい
379デフォルトの名無しさん (スフッ)
2019/07/02(火) 17:29:58.39ID:++9dcTkMd ヒープに確保するならstd::vectorが実用上ほぼ最速
380デフォルトの名無しさん (ワンミングク)
2019/07/02(火) 17:45:38.13ID:0IWRI8p9M ダメだこりゃ
もうちょっとマシな答え返ってくるかと思ったが
もうちょっとマシな答え返ってくるかと思ったが
381デフォルトの名無しさん (ワッチョイ)
2019/07/02(火) 18:04:09.25ID:vQT+qXro0382デフォルトの名無しさん (ブーイモ)
2019/07/02(火) 18:05:26.83ID:B2rauTX7M スマポはしゃーない
ライブラリがヒープに構築するオブジェクトを例外安全に使おうと思ったら使わんと
ライブラリがヒープに構築するオブジェクトを例外安全に使おうと思ったら使わんと
383デフォルトの名無しさん (ワッチョイ)
2019/07/02(火) 18:09:34.75ID:z0GlqJ7U0 vecorというかSTLコンテナ全般だけど、push_back(void)みたいなデフォルトコンストラクタでの要素構築があればもっと良かった。
なんでないのかな。
なんでないのかな。
384デフォルトの名無しさん (ワッチョイ)
2019/07/02(火) 18:10:54.83ID:gnGzqTIu0 std::arrayでなく生配列を使うべき理由なんてC++03以前との相互運用性以外には一切ねえよクソ雑魚
385デフォルトの名無しさん (ブーイモ)
2019/07/02(火) 18:11:09.91ID:B2rauTX7M vectorも然りで、例外時にちゃんと捨ててくれないと困るときにはnewなんかやってられんし。
386デフォルトの名無しさん (ブーイモ)
2019/07/02(火) 18:13:44.29ID:B2rauTX7M >>383
emplace_backを空で呼べばぁ?
emplace_backを空で呼べばぁ?
387デフォルトの名無しさん (ブーイモ)
2019/07/02(火) 18:14:56.47ID:B2rauTX7M ところで生ポ怖いとかそんなヌルい理由でSTL使うやつおるの?w
ポインタ覚えたてのボクちゃんがイキってはるように見えますね。
ポインタ覚えたてのボクちゃんがイキってはるように見えますね。
388デフォルトの名無しさん (スフッ)
2019/07/02(火) 18:17:41.70ID:++9dcTkMd てか使わん理由がない
unique_ptrならオーバーヘッド0だろ
unique_ptrならオーバーヘッド0だろ
389デフォルトの名無しさん (ワッチョイ)
2019/07/02(火) 18:18:10.18ID:z0GlqJ7U0 >>386
それでもmoveが発生するでしょ。美しくないw
それでもmoveが発生するでしょ。美しくないw
390デフォルトの名無しさん (スフッ)
2019/07/02(火) 18:19:02.38ID:++9dcTkMd >>389
moveは発生しないだろ?
moveは発生しないだろ?
391デフォルトの名無しさん (ワッチョイ)
2019/07/02(火) 18:19:50.61ID:gnGzqTIu0 ナマポは怖いよ
あれの不適切な取扱いのせいで数限りないバグとセキュリティホールが生まれて莫大な損害を生み出してる歴史に学ぶべきだ
そうなれば適切な取扱いを強制する仕組みをなるべく取り入れるのは至極当然のことだ
あれの不適切な取扱いのせいで数限りないバグとセキュリティホールが生まれて莫大な損害を生み出してる歴史に学ぶべきだ
そうなれば適切な取扱いを強制する仕組みをなるべく取り入れるのは至極当然のことだ
392デフォルトの名無しさん (ワッチョイ)
2019/07/02(火) 18:23:26.11ID:z0GlqJ7U0 >>390
MSVCとclangで試した範囲では、基本的にはスタック上に構築されたインスタンスをメモリコピーするアセンブリが生成される。
もちろん最適化で消えることもあるけど、全てというわけではない。
内部で確保されたメモリに対してplacement newで直接コンストラクタを呼び出すのと比べると若干のオーバーヘッドになる。
MSVCとclangで試した範囲では、基本的にはスタック上に構築されたインスタンスをメモリコピーするアセンブリが生成される。
もちろん最適化で消えることもあるけど、全てというわけではない。
内部で確保されたメモリに対してplacement newで直接コンストラクタを呼び出すのと比べると若干のオーバーヘッドになる。
393デフォルトの名無しさん (スフッ)
2019/07/02(火) 18:26:53.67ID:++9dcTkMd それコンパイラかオプション腐ってね?
moveが無駄ってのがemplaceの存在意義だろ?
moveが無駄ってのがemplaceの存在意義だろ?
394デフォルトの名無しさん (ワッチョイ)
2019/07/02(火) 18:30:07.12ID:z0GlqJ7U0395デフォルトの名無しさん (ブーイモ)
2019/07/02(火) 18:34:24.96ID:B2rauTX7M コンストラクタしか呼ばんよ
396デフォルトの名無しさん (ワッチョイ)
2019/07/02(火) 18:36:54.51ID:gnGzqTIu0 push_backにも右辺値参照取るオーバーロードがあるんだけど?
397デフォルトの名無しさん (ワッチョイ)
2019/07/02(火) 18:37:04.80ID:z0GlqJ7U0 emplace系(moveコンストラクタ)の利点は一時オブジェクトのデストラクタを呼ばなくて良いことであって、
メモリコピー自体は発生するよ。
メモリコピー自体は発生するよ。
398デフォルトの名無しさん (ワッチョイ)
2019/07/02(火) 18:41:38.86ID:z0GlqJ7U0 すまん、おれが間違ってた、emplace_back(void)なんてものがあったんだなwwww
399デフォルトの名無しさん (ブーイモ)
2019/07/02(火) 18:42:45.57ID:B2rauTX7M ないない
アセンブリ出力なんか見なくても
各コンストラクタに自分の素性を出力させるようにしてテストすりゃあわかる。
emplace_backはコンストラクタしか呼ばない
ムーブやコピーなどの余計なコンストラクタは呼ばれない。
v.emplace_back(A())
なんてアホなことやってたら呼ばれるけどなw
アセンブリ出力なんか見なくても
各コンストラクタに自分の素性を出力させるようにしてテストすりゃあわかる。
emplace_backはコンストラクタしか呼ばない
ムーブやコピーなどの余計なコンストラクタは呼ばれない。
v.emplace_back(A())
なんてアホなことやってたら呼ばれるけどなw
400デフォルトの名無しさん (スフッ)
2019/07/02(火) 18:45:36.48ID:++9dcTkMd てかplacement newさせるための機能だから
401デフォルトの名無しさん (ワッチョイ)
2019/07/02(火) 19:01:52.58ID:gnGzqTIu0 よくよく規格読むとemplace_backの要件のところでなぜかvectorに限って要素型にMoveInsertable要求してるな
(Table 88 - Optional sequence container operations)
vectorに限ってはID:z0GlqJ7U0の言う通りmoveするのかもしれんが何故だろう
アロケータ絡み?
(Table 88 - Optional sequence container operations)
vectorに限ってはID:z0GlqJ7U0の言う通りmoveするのかもしれんが何故だろう
アロケータ絡み?
402デフォルトの名無しさん (スフッ)
2019/07/02(火) 19:20:16.00ID:++9dcTkMd それ、領域の再確保で既存要素をmoveする必要があるからじゃね
403デフォルトの名無しさん (ワッチョイ)
2019/07/02(火) 19:24:28.67ID:gnGzqTIu0 そうかと思ったんだけどdequeにはこの要求ないんよね
404デフォルトの名無しさん (スフッ)
2019/07/02(火) 19:40:57.73ID:++9dcTkMd dequeの場合、最初と最後に限っては既存要素の移動が必要ないからだろう
405デフォルトの名無しさん (ワッチョイ)
2019/07/02(火) 21:48:42.92ID:w/Y51Ss20 >>401
size()がcapacity()を超えた時ごっそり移すから
size()がcapacity()を超えた時ごっそり移すから
406デフォルトの名無しさん (ワッチョイ)
2019/07/02(火) 22:19:13.91ID:hWBdgMuf0 >>391
実際はナマポによる問題よりもスマポの取り扱いのわからんバカによる間違った使い方のが多いけどな。
重要なのは言語による強制じゃなくて、教育だわ。
そこのコストを無駄にケチるバカ企業はどんな言語使っても無駄。
実際はナマポによる問題よりもスマポの取り扱いのわからんバカによる間違った使い方のが多いけどな。
重要なのは言語による強制じゃなくて、教育だわ。
そこのコストを無駄にケチるバカ企業はどんな言語使っても無駄。
407デフォルトの名無しさん (アウアウウー)
2019/07/02(火) 23:11:40.30ID:YKseWMPYa なんかその間違えた使い方一覧とか見てみたくなるな
408デフォルトの名無しさん (ワッチョイ)
2019/07/03(水) 00:29:13.60ID:Odxsa8jS0 >>406
結局、生ポインタや生配列も必ず必要になるから、仕組みを理解せずに使えば
コンテナやスマートポインターの方こそが危険の原因になるのは容易に想像できる。
結局、実装の詳細を知らなければ危険なので、初心者向けでない。
結局、生ポインタや生配列も必ず必要になるから、仕組みを理解せずに使えば
コンテナやスマートポインターの方こそが危険の原因になるのは容易に想像できる。
結局、実装の詳細を知らなければ危険なので、初心者向けでない。
409デフォルトの名無しさん (ワッチョイ)
2019/07/03(水) 01:01:33.73ID:Lb2Tc2mw0 >>408
生ポインタや生配列をコンテナやスマートポインターに置き換えて危険の原因になる例おしえて。
生ポインタや生配列をコンテナやスマートポインターに置き換えて危険の原因になる例おしえて。
410デフォルトの名無しさん (アウアウウー)
2019/07/03(水) 01:10:58.57ID:TLK5eLSla >>408
俺も教えて欲しい。何が危険なの?
俺も教えて欲しい。何が危険なの?
411デフォルトの名無しさん (ワッチョイ)
2019/07/03(水) 01:29:58.72ID:mX2Zy9Do0 こうやって具体例も出さずに古い知識と気分と思い込みでコンテナやスマポを意味なく禁止してナマポや生配列を強要する老害が一番危険
412デフォルトの名無しさん (ワッチョイ)
2019/07/03(水) 05:15:48.05ID:924EnmCA0 生ポ受け取って処理して返す関数の中で
受け取った生ポをユニポに入れてしまって
関数から抜けるときに消えちゃうバカとか?
受け取った生ポをユニポに入れてしまって
関数から抜けるときに消えちゃうバカとか?
413デフォルトの名無しさん (アウアウウー)
2019/07/03(水) 06:37:42.42ID:TLK5eLSla それは生ポの危険性やん
414デフォルトの名無しさん (ワッチョイ)
2019/07/03(水) 07:37:02.82ID:Odxsa8jS0 >>409
全部置き換えることは出来ないから。
全部置き換えることは出来ないから。
415デフォルトの名無しさん (ワッチョイ)
2019/07/03(水) 07:54:35.14ID:mX2Zy9Do0 なんだキチガイか
416デフォルトの名無しさん (オイコラミネオ)
2019/07/03(水) 07:58:15.56ID:giz72OluM コンテナなりで確保して必要なときにポインタで渡すだけだろ
417デフォルトの名無しさん (ワンミングク)
2019/07/03(水) 08:21:07.41ID:y5Z0HSqrM 結局このての老害が居座ってるのがこの言語の一番の欠点だわ
下手にC言語と互換性があるから頭の悪いナマポおじさんが初心者に間違った知識を広げていくという
下手にC言語と互換性があるから頭の悪いナマポおじさんが初心者に間違った知識を広げていくという
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 小野田紀美・経済安保担当相「何か気に入らないことがあればすぐに経済的威圧をする国への依存はリスク」 ★2 [Hitzeschleier★]
- 【中国局長】両国関係に「深刻な影響」 首相発言の撤回要求 [蚤の市★]
- 【インバウンド】中国人観光客の日本での消費額は年間約2兆円超…中国政府は公務員の出張取り消し [1ゲットロボ★]
- 外務省局長は無言で厳しい表情…日中の高官協議終了か 高市首相“台湾”発言で中国が強硬対応 発言撤回求めたか…★3 [BFU★]
- 【維新】吉村知事「中国人観光客だけに頼るビジネスモデル変えていかないといけない」「高市総理の発言は撤回する必要はない」 [Hitzeschleier★]
- 【社会】40代以上のおじさん・おばさんは叩いてオッケーという風潮はなぜ加速したのか [七波羅探題★]
- 自分に自信がない女の子、陽キャ美容室で80cmのエクステを付けた結果wwwwwwwwwwwwwwwwwww [329329848]
- 【高市速報】日本人の3割「中国への武力行使に踏み切る必要がある」ANN世論調査 [931948549]
- 外務省局長、よくわからないまま帰国へ [834922174]
- 【実況】博衣こよりのえちえち歌枠🧪
- 【朗報】外務省局長、中国側の要求を断固拒否。「高市さんの答弁は日本政府の立場を変えるものではないし、撤回しない」 [519511584]
- 農林水産省「春頃にはコメ価格落ち着くのでは」新米の取引価格、過去最高を更新。 [256556981]
