C++相談室 part132
■ このスレッドは過去ログ倉庫に格納されています
次スレを立てる時は本文の1行目に以下を追加して下さい
!extend:on:vvvvv:1000:512
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。
前スレ
C++相談室 part131
http://mevius.2ch.net/test/read.cgi/tech/1501295308/
このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.101【環境依存OK】
http://mevius.2ch.net/test/read.cgi/tech/1500329247/
■長いソースを貼るときはここへ。■
http://codepad.org/
https://ideone.com/
[C++ FAQ]
https://isocpp.org/wiki/faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured まだ516の糞コードの話題やってんのか
まったく飽きないフレンズどもだな
セルリアンに喰われちまえよ 次は20が控えててどんどん進化してるけどmeyers本なしについていける自信がないよ。
17以降遭難者が続出するんじゃなかろうか。 17ってそんなに難しいか?
14以後ってか11以後、03までのストイックを通り越したマゾプレーからの離脱が
大きなテーマになっていてautoのinitializer_listみたいなミスはしながらも
ちゃんとそれを正していく自浄作用が機能していると俺は思うが auto_ptrとかgetsとかトライグラフとかboolの++とか
危険で無駄で混乱を招くゴミが続々取り除かれてどんどん使いやすくなってるよね
生ポインタや生配列をいじくり回してメモリ壊すこともほとんどなくなった c++の機能がこのまま進歩していったとしてマクロは消えるかな? constexprとかautoのおかげでtemplateもマクロとして使いやすくなったよね。
そう考えるとテンプレートで出来なくてマクロじゃないと出来ないのって何かある? >>605
テンプレートとマクロの本質的な違いがわかってないな
スコープに従うテンプレートやconstと
ほとんど何も考えてないおまえみたいなマクロは
オブジェクト指向という観点からは全く別次元なものだ 「ほとんどなにも考えていない」とは手厳しいですね… 何だこの日本語wwww
オブジェクト指向たいして関係ないだろ マクロの乱用をさけるためにテンプレートが発達してきたんだからマクロ使わないでね >>606
文字列リテラルを、リテラルとして連結するのはマクロじゃないと無理じゃないかな。 >>614
不可能ではないと思うけど、そう気軽ではないというのは確かだと思う。 const char8_t[] u8hage = "hage"; // = u8"hage"
const char16_t[] u16hage = "ハゲ"; // = u"ハゲ"
const char32_t[] u32hage = "禿"; // = U"禿"
const wchar_t[] whage = "はげ"; // = L"はげ"
みたいなプレフィックス省略が出来ればいいのになって思うときがあるね >>616
Haskell だとリテラルは多相になっていて、型推論で適当な型にあてはめられるんだが……。
C++ では返却値だけ型が違う関数はオーバーロードできないルールがある。
その延長でリテラルは無引数の関数のようなものと考えると文字列リテラルが様々な型で有りうるようなのは難しいと思う。
型の情報が重複してるのがダサいと思うなら型名の方を auto で書くくらいかなぁ。 kotlinとかswiftにあるiterator.forEach{}の構文がc++にもついてほしい
c++だとiterator.for[=]{ }みたいな構文になるんだろうか >>615
うーん…
文字列リテラルは無理じゃね? >>619
コンパイル時定数という意味でのリテラルであれば出来るが templateだったら関数の返り値が異なってもokだしconstexprならコンパイル時定数だから変換さえ出来ればやれそうな気もする。
>>618
範囲for文は駄目? 自作クラスならtemplate関数で範囲forを閉じ込めるとか?
試して無いけどこんな感じで
class test{
//begin()とend(),++が定義されているものとする
template<typename Func>
void for_(Func func){
for(auto& it: *this){
func(lt);
}
}
} そういう臭い書き方はC++ではあまり採用されない方針
オブジェクト指向じたい、もうあまり言われてなくて
テンプレートによるメタプログラミングが主体になってる
オブジェクト指向を前面に押し出した言語はオワコンになるという法則があって
なもんで、魔除け、キチガイ除けの意味も含めて
Java や C# や C++ など、主流言語は
「マルチパラダイム言語」、「オブジェクト指向をサポート」
といった、ちょっと距離を置いた付き合いかたをしてるね
きっと、「全ての手続きは必ずただ一つのオブジェクトに紐づかなくてはならない」
という強迫観念的ともいえる窮屈な考え方が脳や精神に良くなかったのだろう
本当に精神疾患を引き起こしてリタイアする人多いし 変数forならラッパ作れば終わりだけどなんかつまらないね。
apply(op).for(sequence)とかのほうがインターフェースとしては見栄えがいいかも >>624
ユニファイドコールシンタックスっていう提案が出ていたけど、ぽしゃった。
俺もほしい。 「制御構造までオブジェクトに属するべき」ってやり過ぎというより単に根拠のない主張だよね。 range-based forで十分じゃん何が不満なんだ理解できない
俺が思うのはインデックス取れたらいいなあということぐらい >>630
最終的な結果がその処理順序に影響する(ここのオブジェクトへの操作が独立していない)場合には範囲for文使うなってことじゃね?
標準で取れるようにしてる言語も中にはあるけど >>601
meyers本ってそんなに役立つかねぇ
最初のeffective c++ちょろっと読んだ程度なので最近のは知らんけど
あの人の本に従ってる人は、自分で考えて創意工夫しない人が多いよ
セオリーに固執する日本人はそういうパターンに陥りがち お前らの創意工夫よりメイヤーズの方が100倍信じられるから 自分の才能や経験の不足を虎の威で補おうとしてるのなら、終わってるよ
meyersが「こうしろ」と言ってることの、理由まで含めて納得するならいいけど
そうでない人の方が圧倒的に多いからなぁ
>>636がまともな実力持ってるなら、meyersが言うセオリーに当てはまらない場面なんて山ほど経験してるはずだが >>635
あーいう本は典型的・基本的な工夫を示すもので、それを踏まえてその先へ行くもんなんだよな。
基本でしかないことに拘泥するのは下策でも、基本的なことすらおさえずにいるのは論外だから役には立つよ。
ある程度の経験を積んでいればああいう本に書かれているようなことは習得していて当たり前だっていう意味で
有用さに疑問を持つって意味かな? ド素人の創意工夫とかマジ勘弁してほしいな
セオリーもちょろっとしか知らないのに自分のコードが正しいと思い込んじゃうパターンだなこれは >>637 >>639
手元にないので軽くぐぐってみたけど、確かに初心者が手元に置いておくべき良書だというのは否定できないw
ほとんど突っ込みどころなんて無いし(当たり前の内容も含めて、”大抵のパターンで”正しい話ばかりだと思う)、
ちょっとけなしすぎたかも
ただ「値を返す関数の戻り値にもconstつけよう」ってのは理解できんかったがw(古い本なのでしゃーないか?)
こういうのあるから鵜呑みは良くないと思うんだよね
結局は自分の頭で考えないといかん
まぁ最新の版だと変わってるかもしれんし本文がどう書かれてるかわからないので、間違ってたらスマソ 俺のつたない経験でも>>637は口先だけの使えない奴だとわかる >>643
そっくりそのまま返すわ、どうせ教えられた通りの書き方しか出来ない無能だろ? >>642
呆れた。
ろくに読まずになおも否定したいのか。 >>640
おかしな事を言うね
ど素人は好きに創意工夫すればいいんだし、そもそも自由だろ
プロはプロなりのレベルで創意工夫してるんだろうし、対象層がわからん >>645
だいぶ昔に借りて読んだ程度のうろ覚えで否定したが
>こういうのあるから鵜呑みは良くないと思うんだよね
meyers本に限らず、これが間違ってると思ってんの?
それとも
>「値を返す関数の戻り値にもconstつけよう」
これが正しいと思ってんの? >>647
発言を局所的に切り取ってやり玉に上げるマスゴミみたいなやつだな。
否定したいならちゃんと読んでからにしろよ。
それに世界中のc++erに査読されて正誤表も常に更新されている本に>>647が突っ込めるようなことは書いてないから。
後、c++11以降はmodern effectiveのほうだから間違えないようにね。 >>637が正しいなら「meyersが言うセオリーに当てはまらない場面」で使うべきセオリーを解説した書籍があって然るべきだが
そのセオリーを持っているのは世界中で>>637一人だけらしい >それに世界中のc++erに査読されて正誤表も常に更新されている本に>>647が突っ込めるようなことは書いてないから。
それ言い出すとmeyers本以外もそうだよね
>自分の才能や経験の不足を虎の威で補おうとしてる
と言ったのがよっぽど図星だったのか?
>「meyersが言うセオリーに当てはまらない場面」で使うべきセオリーを解説した書籍があって然るべき
何言ってんだこいつ・・・・ 上級者ぶったド素人が煽ってくることが最近多いんだよな・・・・沸かせてしまったようでスマン > 上級者ぶったド素人
笑うところなんだろうか... 何の役にも立たないことしか言えないマウンティング野郎なんて放って置けよ
俺も最近C++使う頻度が落ちてきてるので最新の規格について行くのがつらい
おすすめの本を紹介してくれよ あ、一つ看過できない文があったので突っ込んどく
>>650
>発言を局所的に切り取ってやり玉に上げるマスゴミみたいなやつだな。
>>647で切り取ったのは全て俺のレスなんだが・・・バカじゃないの >>646
プロであるということとド素人であるということが両立することもあるのが業界の闇ってやつだ。 プロってプロフェッショナルの略なんでしょう?
意味は専門家、本職
素人とは
その事に経験が浅く、未熟な人。
その道で必要な技能や知識をもっていない人。ま
た、その事を職業・専門としていない人。
両立はかなり困難。
プロになりすます素人なら有るかもしれないが、ちょっと意味が違うよね。 両立つーかさ、誤解されるんだよね
俺も時々ご近所のオバチャンに
パソコンのプロなんだと勘違いされる
俺はPCに関しては完全にお客さんなんだが >>659
その道で生計たててるド素人ってことだろ 人に教示して何らかの成果を与えられるレベルの人間を人はその道のプロと呼ぶ >>546
これって皆さんどう考えてますか?
うちのプロジェクトでは規約で
スタック領域は基本16KB未満、
例外で許容出来るのは1.8MBまで、
オートは厳禁と決まっているので
気にしたことなかったです >>664
>オートは厳禁
こっちの方が気になるんだが >>665
auto変数じゃないです
allocaのことです >>667=>>626
あんなアホな長文書けるやつに無能とか言われたくないわw
今はメタプログラミングが主流かーそうかー
あと、かつてオブジェクト指向を最も全面に押し出してたのがJavaだったんだけどね
ついでに>>650=>>657
ID変えてまでご苦労さん >>664
組み込みなら別に珍しくない
ってか関数単位の制限なら結構緩いと思う 言うなれば、そうだね
いい年越えたおっさんが、子供を笑ってるのがあまりに滑稽だったから
逆に笑いものにされてる、と言ったところか
あと、自分の発言の都合の良い部分だけ切り抜いて押し通そうとする幼稚な戦法が
通じると思っているあたり、随分な思い上がりだな ああ
> 都合の良い部分だけ切り抜いて押し通そうとする幼稚な戦法
は君の言う「自分で考えて創意工夫」の結果なのかな?
こーゆーのが透けて見えるから愚者と言われるんだろうな
気を付けたほうが良いよ >いい年越えた
こいた、な
メタプログラミングが主流、の説明してもらえる?
出来ないのなら、煽るしか能のない荒らしだと自覚した方がいいよ
C以来のテクニックやC++でのOOPなどの昔ながらの技術はもう出尽くしてるから
そういう誤解する初心者が多いんだろうけど・・・・まともにメタプログラミングやったことあれば
それが主流だなどと豪語できないよ それは君が文章やスレの流れを全く読めないというだけ
> メタプログラミングが主流、の説明してもらえる?
まさに一部だけ抜き出してマスコミ云々だな
それで一部だけ抜き出して自分のフィールドに持ってきて
ゴチャゴチャ言うのが君の創意工夫なのか?通用しねーよ
>C以来のテクニックやC++でのOOPなどの昔ながらの技術はもう出尽くしてるから
>そういう誤解する初心者が多いんだろうけど・・・・
>まともにメタプログラミングやったことあれば
>それが主流だなどと豪語できないよ
↑全体的に攻撃先がズレてて的外れ
>>618を読めば分かるが、「次期」C++に入ってほしい、というような内容
で、OOにこれ以上施すことはあまりないので、C++標準化委員は
OOよりメタプログラミングを主体に策定している
(から、今更OOっぽい書き方は入らないんじゃね?)と言ってるまで ああ、そういう流れだったか、そこは誤解してたようだスマン
ただし>>626の4行目以降、全部お前の願望だと思うがw
>まさに一部だけ抜き出してマスコミ云々だな
>それで一部だけ抜き出して自分のフィールドに持ってきて
>ゴチャゴチャ言うのが君の創意工夫なのか?通用しねーよ
うん、しつこいよ
というか>>656でその煽りが不適当だと指摘してるんだが本人謝りもしねーし
そういう悪意ある煽り文(しかも他人の文に乗っかって)を自分で読んでどう思う?
俺がこういうキツイ書き方してる相手は全部煽ってきた相手だけなんだが
>C++標準化委員はOOよりメタプログラミングを主体に策定している
11, 14, 17, 20の新機能見ても、そうは思えない
自分の願望をさも事実かのように書くのはいかんよ
>>618的な書き方が入ると思う、というわけではないけど 自分の発言だろうが、他人の発言だろうが
都合のいいところだけを切り取って流れを無視するのは
マスゴミ的って話だろ、そういう余計で姑息な工夫は要らないし
その意味で「お前の創意工夫は要らない」って笑われてるんだろ
誘導尋問じゃねーんだよ
> >C++標準化委員はOOよりメタプログラミングを主体に策定している
> 11, 14, 17, 20の新機能見ても、そうは思えない
あ、っそ 新機能の話をしていると初心者はさもそれが当たり前に使えなければならないように感じるがそんなことはない。
俺C++でクラスを自作することかなり少ないし。関数だけでもプログラミングはできる。
constexprも入ってやりやすくなったしな。そしてそれを全部内包するのがC++だ。 朱に交われば赤くなるって諺もあるしなぁ
初めからウンコを触るつもりで取り扱ってないと危険なのかも
思考が染まると、それを通して周りを見るので
ヒントが沢山あっても正しく捉えられなくて
なかなか抜け出せないのかもしれない
それか、初めから頭がおかしかったパターンもあるかも
どっぷりな人はそっちかも
黎明期は集団で流れることがあるからなぁ (なにせ悪は甘美)
学生運動とかいう今考えると理解しがたいのが流行ったり
大人側が組み入れながら徐々に脱却って感じかね >>676
うわ、話にならんわこいつ・・・
>>677
荒れさせておいて同意するのも申し訳ないけど、俺もそうとしか思えない
D&E読んでも、C++がマルチパラダイムを自称するのはそういうことだし
「知らないことがその人を不幸にしない」とかゼロオーバーヘッドの話はまさに>>677に合致する
最近C++を勘違いしてるヤツがデカイ口叩きすぎだわ
そういうのはごく一部で、大抵無視されてるんだろうけど、C++を学ぼうという初心者が減ったら迷惑なんだけどな・・・・
荒れさせてスマソ、バカが調子に乗ってるのでこの辺にしとく C++ってクラスとかテンプレート使うのがパチッとくる
場合はいいけれど、難しいで。
過去のCのプログラムとかC++のクラス使って書き直そうとすると。
実力なしでゴメソ。 OOに関してはひところ純粋主義者が極端な言説を展開してC++をdisる流れがあったから、
それに対する反発と恨みがあるんだろうよ >>681
俺もC++でOOのなんたるか理解しようとして心が折れそうになった。
肩身せまそうにbetter Cとしか使ってませんとか。
今ならrubyとか極端な話、powershellのコマンドいじくって
た方がわかりやすい。隠ぺいか(カプセル化)も
中身が細かく知りたいときには、イーッってなるし。 なんだかんだ、OOはオプションのうちの一つ
というありきたりの結論 >>682
カプセル化は、アクセス・窓口を制限・整理する、という目的だとおもいます
>>677
>新機能の話をしていると初心者はさもそれが当たり前に使えなければならないように感じるがそんなことはない。
じゃ、ムーブセマンティクスも忘れちゃっていいですか、RVO に頼るだけでいいですか?え?だめ?やっぱりやらなきゃだめですか >>684
最適化するんなら必須か知らんけど、あるていどはコンパイラさんに投げてもよいのでは? もうなんの話をしてるのかよくわからんけど
>>637
> >>636がまともな実力持ってるなら、meyersが言うセオリーに当てはまらない場面なんて山ほど経験してるはずだが
の具体的な場面だけは教えて欲しいわ >>684
>カプセル化は、アクセス・窓口を制限・整理する、という目的だとおもいます
(データ+アクセス専用関数)=クラスだろ OO用語の定義に関して、何か始まりそうな感じだが
もう何十回と繰り返されたか、初心者的にはまだまだやり足りないのかもしれないが
老婆心ながら言わせていただくと、OO用語の定義談義合戦は過去幾度となく繰り返されたが
特に意味はなかったから止めておいたほうが良いよ
OO自体、まじめに考えてもあんま意味ないっつーか、むしろまじめに考えるとドツボっつーか
一見正しいけど、本質的には意味が無いことってあるじゃん
ある視点で見れば正しいんだろうけど、そういうことじゃないっていう
どうしてもやりたいなら止めないけど 定義がないんだから議論の正しさの検証も測定もできないしね 測定機ならAliexpressでいろいろ売ってるよ。 C++のクラスなんて便利な構造体以上の何者でもない
OO宗教でそれ以上の縛りを入れる必要なんてないわ C++の書式がどーの新機能がどーのってプログラマーが、楽になる機能なわけで、本質は、楽してコードが動けばいい。
学術的だとどーでもいい。議論するだけ無駄。
コンパイラは、速くて、安全なアセンブリコードを吐いてくれればいいよ。 禿もそういう系の揉め方を防ぐように気を使っているらしいな
なんだっけ、どの分野の人々をも侮辱しないとか
全てが1つのクラスから派生しなければならないというのは押しつけがましいとか ??数値の比較をしていってある一定の差があるところを区切っていきたいです
たとえば{1,4,7,8,11}って値を先頭から見て行って差が2以上あるところ{1}{4}{7,8}{11}のような感じで区切る
どうすれば実現できるでしょうか >>694
「区切る」の定義をしてくれ
入力が文字列じゃなくて数値ってことは、間に区切り文字を挟むとかそういうことじゃないんだろう。 後ろから前を引いて2以下?なら前を前回と同じバッファにプッシュバック。的な感じ。 >>695
後々区切られたまとまり毎に操作したいので
できればまとまり毎にそれぞれ別の変数に入れたいです
ただ操作上絶対に有り得ない数値を区切り文字として使うのでも良いです
{1}{9999}{4}{9999}{7,8}{9999}{11}{9999}
みたいな形で >>694 の書き出し化けてない?
「??白lの比較をしていって…」と表示されるんだけど。
対象の {1,4,7,8,11} はconstの整数のvectorへの参照で受け取るとして、
結果は要素グループごとに格納したvectorのvectorで返すかな。
各グループの先頭要素へのインデクスを格納したvectorで返すかも。
>>697 を見ると、前者の方が後の使い勝手が良いのかな。
要素グループのvectorのvectorってこと。 ■ このスレッドは過去ログ倉庫に格納されています