C++相談室 part143

■ このスレッドは過去ログ倉庫に格納されています
2019/06/15(土) 13:51:53.57ID:DKQ0QQLH0
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
2019/06/15(土) 16:03:43.75ID:yU4M2XeV0
すっぱい葡萄
ttps://ja.wikipedia.org/wiki/%E3%81%99%E3%81%A3%E3%81%B1%E3%81%84%E8%91%A1%E8%90%84
 自分のものにしたくてたまらないにもかかわらず、努力しても到底かなわない対象である場合、
 人はその対象を「価値の無いもの」「自分にふさわしくないもの」と見なそうとし、
 それをあきらめの理由として納得し、心の平安を得ようとするものである。
 フロイトの心理学では、これを防衛機制および合理化の例とする。また、社会心理学においては、認知的不協和の例とされる。
 英語には、この寓話を元に生まれた熟語として "sour grapes" があるが、これは「負け惜しみ」を意味する。
3デフォルトの名無しさん (ワッチョイ)
垢版 |
2019/06/16(日) 12:29:06.82ID:yEr4r4hL0
ttps://qiita.com/hirokidaichi/items/adccebb41f77eaa6132f
>Paul曰く:
>人は、その人のアイデンティティの一部となっている事について、実りある議論はできない。
>これすなわち、自分のホームに近い話題ほど論理よりも感情が優先されてしまうということ。
>Kathy曰く:
>他の人が夢中になるほど、そのプロダクトやブランドへの憎しみは強くなる
>これはつまり、彼らはクールエイドを飲んでしまってるということだ。
2019/06/16(日) 16:55:32.05ID:NJ2skO190
質問です。

https://dotup.org/uploda/dotup.org1873815.zip
ここまで作ってデバッグしようとしたらシェアードポインタが継承扱ってくれない感じになった。
2017ではできていた気がしたけど、なぜですか?
2019/06/16(日) 17:32:43.45ID:/ZY8dphZ0
thinkFirst
ThinkFirst

オーバーライドするときはoverrideつけたら?
2019/06/16(日) 17:36:44.99ID:NJ2skO190
>>5
サンクス。こんなことか・・・。
そういえばそういう習慣持ってないなぁ。余裕があったらやってみる。

コンパイル通ったので再開。

助かりましたありがとう。
2019/06/16(日) 19:27:55.97ID:gDHKfsB60
test
2019/06/17(月) 00:12:48.76ID:oaY4OAXG0
>>1

前スレ>>1000の人は関数型プログラミング的プログラミングを自らに課している人なのであろう
つまり全てのオブジェクトは属性がコンストラクタで設定され、immutable、、、
2019/06/17(月) 00:55:04.38ID:qMa7jD650
getterは読み取り専用のメンバを作りたいときに必要
setterはpimpl化したときに必要
2019/06/17(月) 01:18:11.69ID:a5RA1dZMa
const publicがあればいいのか
2019/06/17(月) 09:36:57.72ID:FBMbqlks0
getterならread only修飾子を導入して
コンパイル時に書きこまれないことを保証すればいい
かんたんだろ
2019/06/17(月) 09:43:06.17ID:NDzOpmZcM
mutable なオブジェクトだとしても、setter を付けるメンバー変数は少ないな。
3つのうち1つぐらいの感じ。
2019/06/17(月) 14:59:51.76ID:otIzoLhyd
セマンティクス上で重要なメンバ関数の区別は、オブジェクトの内部状態を変更するものか(非constメンバ関数)と、変更せずに内容を見るためのものか(constメンバ関数)の違いであって
その具体的な処理内容が特定のprivateデータメンバのgetterかsetterかなんて観点は大して重要じゃないし、そんなものに固執して設計を考えるのは馬鹿馬鹿しいし危険だと思う
2019/06/17(月) 15:13:59.52ID:NDzOpmZcM
>>13
「状態を変更」の方はまあいいけど「内容を見る」という表現は狭すぎないか。
2019/06/17(月) 15:20:09.82ID:otIzoLhyd
そうね引数を加工するとか他のオブジェクトへのプロキシになるとか色々あるね
getterのイメージに引きずられすぎちゃった
2019/06/17(月) 15:54:46.05ID:cgazGIue0
コンテナのset, map, multi_mapはconst_iteratorじゃないと正しくforループを回せないって制限あった気がする。どうだっけ?
2019/06/17(月) 16:13:33.58ID:ikLTlFyV0
ペアのインデックサがわを弄ったら、ソートぶっこまれて順番が狂う感じの奴かい?
2019/06/17(月) 17:06:03.61ID:xa2u5Y3Ua
構造体のメンバ変数をまとめて以下のように文字列でアクセスできるようにしたいのですが、
構造体のポインタを以下のpointerに一括で割り当てる方法はないでしょうか?

Params {
int param1, param2;
} params;

std::map<std::string, void*> pointer;

// 同じ操作
params.param1 = 1;
*static_cast<int*>(pointer["param1"]) = 1;
2019/06/17(月) 17:11:32.29ID:xa2u5Y3Ua
Paramsは複数の型のメンバ変数を持ちますがpointerにtypeidを合わせて持たせることで使用時の問題は解決できます
2019/06/17(月) 17:11:48.82ID:cgazGIue0
>>18
日本語でok
2019/06/17(月) 17:15:04.87ID:xa2u5Y3Ua
以下のように一つずつ割り当てるのではなく、構造体に含まれるメンバの名前とポインタをイテレートして割り当てたいのです
pointer["param1"] = &params.param1;
pointer["param2"] = &params.param2;
2019/06/17(月) 17:26:50.49ID:FBMbqlks0
リフレクションすれば早い
そうでしょう?
23デフォルトの名無しさん (ワッチョイ)
垢版 |
2019/06/17(月) 18:55:58.16ID:8WZxEIm50
そこでプロパティ型ですよ。
2019/06/17(月) 21:01:33.96ID:kTiNst+JM
中身が長ったらしい(と言っても200行程度)ラムダ式ってやめたほうがいいですか?
一般的には普通の関数にするんでしょうがヘッダーに書きたくないんです
2019/06/17(月) 21:09:43.46ID:Xk2fRyfla
その関数に名前がつけれないならいいんじゃない
2019/06/17(月) 21:20:42.23ID:qMa7jD650
ヘッダーに書きたくないって…、cpp内で関数を宣言/定義してもいいんだぞ
2019/06/17(月) 22:03:41.11ID:cgazGIue0
ラムダ式の存在意義は、コンパイラではなく人間にとっての可読性の改善にある。
どうも可読性が低いなぁと思ったら、ラムダ式をやめるべきだね。
2019/06/17(月) 23:09:14.61ID:W17QvXl10
>その関数に名前がつけれないならいいんじゃない
完全にダメなパターンだろ。。
2019/06/17(月) 23:37:37.03ID:ZwasbMRy0
カッコよくラムダで比較関数を書いたものの、あちこちで同じ比較関数が必要になって結局関数オブジェクトを作る不毛な作業
2019/06/17(月) 23:40:11.50ID:D3j4bHhT0
>>21
c++使わないのが正解
2019/06/17(月) 23:44:17.67ID:DTomrwq60
>>29
別にいいじゃない
32デフォルトの名無しさん (アウアウウー)
垢版 |
2019/06/17(月) 23:44:34.66ID:DMQyXySba
>>29 わざわざ関数オブジェクト作成するくらいならラムダをauto変数にいれるのはどうですか?
2019/06/17(月) 23:45:22.46ID:W17QvXl10
クロージャの利点っていうのは
クラスとメソッドに比べたらアクセスするデータのスコープがわかりやすく渡せるってことだが
c++だと同時にデータが処分されるタイミングを考えなきゃならなくて逆にむずい。
2019/06/17(月) 23:49:52.62ID:x+yzwFNm0
大抵の言語でループ変数をキャプチャするlambdaを配列に入れるとかするとはまるよね

c++の場合コピーキャプチャ使えばすむけど、キャプチャ方式指定できない言語だと結構面倒なことになる
2019/06/17(月) 23:56:31.71ID:kTiNst+JM
>>26
そういえばそうでした…そうします
>>27
ですよね
初歩的な質問ですいませんでした
2019/06/18(火) 03:06:02.01ID:0f68xvDd0
>>22
リフレクションっていうんですね
このサイトのリフレクションの実装を超簡易的に真似してみました
結局一つずつ追加することになりますが扱いやすさは悪くないはず…
http://motchy-usk.blogspot.com/2010/07/blog-post.html
https://ideone.com/zc6oHM
37デフォルトの名無しさん (ワッチョイ)
垢版 |
2019/06/18(火) 06:13:56.61ID:3nOE2mBA0
プログラム板にキチガイ降臨中!botに一晩も反応する異常さ
一般人(学校恩師)に殺害予告をしているのでスレ建て通報してください。
https://mevius.5ch.net/test/read.cgi/tech/1559872586/

142 名前:a4 ◆700L1Efzuv 投稿日:2019/06/18(火) 05:29:55 ID://qVkzO
>>141
名古屋の人な 俺ね、君の問題を大橋先生と混ぜないことにする。つまりね、
片桐孝洋のことをボコろうと思う。普通に顎の骨を折る。これくらいで警察来るか?
一般市民とかさ、普通にさ、俺らの秘密なんだけどさ、日本人なんて復活ねーから。
2019/06/18(火) 08:12:45.67ID:Y0myl0p20
BoostのSerializationはいつ標準ライブラリに入るの?
もしかしてあまり使われてないの?
39デフォルトの名無しさん (ワッチョイ)
垢版 |
2019/06/18(火) 19:32:46.11ID:lBFdU5Sd0
現場で困った早引きできるいい本ってないですかねぇ。今度の現場が初のC++でして
2019/06/18(火) 20:34:17.73ID:DSQg2zLR0
>>39
https://github.com/cplusplus/draft
41デフォルトの名無しさん (ワッチョイ)
垢版 |
2019/06/19(水) 02:12:33.91ID:/zwjJHhK0
そこでマクロですよ。
2019/06/19(水) 02:37:43.11ID:0yjsH3hg0
>>39
cpprefjp
43デフォルトの名無しさん (ワッチョイ)
垢版 |
2019/06/19(水) 02:46:18.73ID:8qBvJS/J0
https://postd.cc/embedded-cpp/
>最近のC++のアップデートにより、コンパイラ開発にかかる時間が大いに短縮されました。

これって具体的には何ですか?
2019/06/19(水) 02:46:53.30ID:G/RPQnNp0
言語仕様系なら「C++11/14 コア言語」??
2019/06/19(水) 02:49:21.59ID:G/RPQnNp0
オートとレジスタが死んだこと?
2019/06/19(水) 03:19:29.65ID:0DgdOBcz0
>>43
GCCのバージョンアップでカスタマイズしやすくなった、とかじゃないの?
2019/06/19(水) 07:16:37.76ID:h4x/aIUc0
>>43
原文は "The pace of compiler development has increased with the recent updates to C++, ..." で、
C++03時代はバグ修正や最適化の向上がメインだったコンパイラ開発が、C++11以降は
大きな機能追加も伴う規格の改定に追いつくためにペースアップした、という感じかと。
改めて訳すとしたら「最近のC++のアップデートに伴ってコンパイラ開発のペースは増しており、〜」ぐらいかな。
2019/06/19(水) 12:07:30.39ID:52Ph4xCha
>>39
ポケットリファレンス
ただ次の現場がレガシーC++ならあまり参考にならないだろうけど
2019/06/19(水) 13:56:12.54ID:20CU6qie0
原文なんて読む必要あるの?
2019/06/19(水) 14:50:44.89ID:mPuTh16gM
実務で原文読んでたら、一生原文読むだけで終わりそう
2019/06/19(水) 15:09:23.72ID:hDOeQD4v0
大部分の軍人は銃や刀剣の作り方について深く知る必要はない。
2019/06/19(水) 16:36:38.81ID:yMqJGQdwM
バカな日本語訳や要約を読んで首ひねる暇があれば原文読んだほうが早い
2019/06/19(水) 17:36:22.46ID:0yjsH3hg0
日本語と同じく速度で英語を読めるようになりたい
2019/06/19(水) 19:14:55.87ID:hDOeQD4v0
>>53
結局のところ、たくさんの単語を覚えるしかない。数は力だよ。
2019/06/19(水) 20:55:08.64ID:DQACirUv0
昔に比べれば英文なんてそこら中にあるんだから読めばいい。
2019/06/19(水) 21:04:53.64ID:0Op2NPvz0
引き籠りが毎日ひたすら英語版のwikipediaを読んでいたらいつのまにかとんでもない英語力が
57デフォルトの名無しさん (ワッチョイ)
垢版 |
2019/06/19(水) 23:14:25.37ID:hDOeQD4v0
昔は民主主義はどうのこうのとか洗脳じみたreaderしかなかったよな?
2019/06/19(水) 23:58:30.86ID:pr4rVpx+0
C++のスレッドや並行処理でこれ読んどけっていう資料や本などありますか?
pthreadはもう使いたくない
2019/06/20(木) 00:00:20.59ID:nbok5ERN0
今時はstd::thread使えば済むんじゃね
2019/06/20(木) 00:11:04.17ID:lLho4HyI0
えーっと、終わりが明確なものは、std::asyncでスレッド投げればいいと思うよ。
2019/06/20(木) 00:35:57.46ID:984l1qct0
>>58
他の本はしらないが、「Effective Modern C++」には必要なことは書いてある、と思う。
2019/06/20(木) 04:18:30.46ID:fuxDfWBK0
std::asyncって生まれた瞬間にdeprecated送りになってなかったっけ?
2019/06/20(木) 11:45:49.37ID:M/WWMkF90
std::asyncはダメなの?
2019/06/20(木) 12:24:14.76ID:j9Uc7TedM
>>62
なんか別のものと間違えてない?
2019/06/20(木) 14:54:38.04ID:bgVEzQPq0
11でのasyncの自動でjoinする仕様について
『致命的な問題でありasyncは実用にならない欠陥品。
破壊的変更になっても次の規格で修正すべき』
って声が(一部で)あったんよ(※表現は誇張しております)
2019/06/20(木) 15:21:36.40ID:M/WWMkF90
std::async使ってみましたがstd::launch::async指定すると自動でjoinしますね
デストラクタで待ってるんですかね
std::launch::defferredを指定するとすぐ返ります
確かに微妙に使いにくいw
2019/06/20(木) 15:52:17.95ID:lDaMx0VnM
実装依存だから環境によってはスレッド作成すらしてないかも知れない
2019/06/20(木) 16:18:06.15ID:lLho4HyI0
お約束ですね。
2019/06/20(木) 17:57:10.96ID:BT0cBtynM
rust使ったほうが楽
2019/06/20(木) 18:03:13.72ID:lLho4HyI0
コンセプトですよコンセプト。来年に期待しましょう。
unifide call syntaxもその後入ることに期待です。
関数チェインしたいんです!

と、唐突に宣伝を始めるなど。
71デフォルトの名無しさん (ワッチョイ)
垢版 |
2019/06/20(木) 19:15:02.26ID:EITLfG5y0
>>56
不思議なことに、読めるようになると、聞き取れるようにもなるんだよね。
どうしてだろね。
不思議不思議。
2019/06/20(木) 23:00:29.85ID:H2FAKrDC0
読み書き話すはできるが聞き取れねーんだけど・・・
2019/06/21(金) 00:28:19.29ID:5xL7WT2l0
読み書きは下手くそでも時間かかってもなんとか通じるからいいけど音声はGoogle翻訳に頼れないのがつら
2019/06/21(金) 00:32:02.14ID:5mFcIDLA0
Youtubeに音声自動翻訳字幕機能ほしいよねw
75デフォルトの名無しさん (ササクッテロ)
垢版 |
2019/06/21(金) 16:04:18.10ID:Vcgrp8ZVp
再帰を用いずに、
a0=0
an=( an-1×an-1 )+1
の1〜6を出せ
ってやつが全然できないので教えてください。
2019/06/21(金) 16:41:53.38ID:rC321OP20
意味わからん
2019/06/21(金) 16:49:46.98ID:vf8hmAK4M
0からループ使えばいいだけじゃないの
2019/06/21(金) 16:52:32.29ID:uFs7CW+50
>>75
#include <stdio.h>
int f(int n)
{
int i, a = 0;
for (i = 1; i <= n; ++i) a = a * a + 1;
return a;
}
int main(void)
{
int i;
for (i = 1; i <= 6; ++i) printf("a_%d: %d\n", i, f(i));
return 0;
}
2019/06/21(金) 20:41:29.94ID:9XN8XoXIM
>>75
> 再帰を用いずに、
その意図は?
単にスタック使いたくないだけなら最近のコンパイラにまかせりゃ末尾呼出最適化ぐらいはするから気にすんな
2019/06/21(金) 21:07:41.81ID:G412ZpUw0
なんかの課題だろ
2019/06/21(金) 21:12:24.28ID:o/bRPi0pa
平均値も出せないMath.hはクソだと思う理由

1.エクセル関数で簡単にできちゃう
2.電卓でもできることがプログラムになると煩雑になる
3.平均値を出すのにコードを書き換える手間など
2019/06/21(金) 21:19:00.28ID:dWgEej/X0
平均値の計算は実は簡単ではない
2019/06/21(金) 21:21:02.30ID:rC321OP20
そもそもmath.hはC言語のライブラリ
2019/06/21(金) 21:29:06.50ID:5xL7WT2l0
そのエクセルの関数の機能や電卓ツールはmath.hを使って作られている
2019/06/21(金) 21:48:48.65ID:0JVOBbqs0
浮動小数甘く見過ぎ
86デフォルトの名無しさん (ワッチョイ)
垢版 |
2019/06/22(土) 15:16:07.71ID:ecTKxvDL0
C++コードをC++コンパイラでコンパイルするのと
CにトランスパイルしてCコンパイラでコンパイルするのと

どっちが性能良いんだろう?
トランスパイラの優秀さにもよりそうだが
2019/06/22(土) 15:35:26.46ID:XJUTErWD0
CがC++よりハイパフォーマンスという前提がありそうだが、そんなことはない
2019/06/22(土) 16:04:32.30ID:LOXx/aGE0
今時c言語のみのコンパイラなんて見かけないな
2019/06/22(土) 16:12:52.94ID:9zxAgsAB0
>>86
いったんトランスパイルを挟むと、C++の元のコードをCで表現できる範囲内のコードに置き換えなきゃならないから、その時点で元のコードのままならなできた最適化のうちの一部はできなくなるだろうし、わざわざ効率の悪いコードに置き換えなきゃならないこともあるだろう。
トランスパイルの方が効率が上がる理由はないと思うよ。
2019/06/22(土) 16:38:05.67ID:ICCmixle0
現時点で利用可能な C++→C トランスパイラは何ですか?
2019/06/22(土) 16:53:56.35ID:3PgdpjOh0
llvm
92デフォルトの名無しさん (ワッチョイ)
垢版 |
2019/06/22(土) 17:03:11.19ID:ecTKxvDL0
https://benchmarksgame-team.pages.debian.net/benchmarksgame/fastest/cpp.html

C++がCに勝ってる項目があるんだけど信じがたい
93デフォルトの名無しさん (ワッチョイ)
垢版 |
2019/06/22(土) 17:16:00.48ID:ecTKxvDL0
https://gist.github.com/simonhf/de808e0f8240ef27dac655505c8bf30f#file-result-summary-txt

こっちだとJavaにすら負けてる
なんなんだろうねベンチマークって
94デフォルトの名無しさん (ワッチョイ)
垢版 |
2019/06/22(土) 17:19:10.62ID:ecTKxvDL0
http://blog.dhananjaynene.com/2008/07/performance-comparison-c-java-python-ruby-jython-jruby-groovy/
どうやらC++はメモリの確保と解放にコストがかかるから
Javaはまとめて大量にヒープをもってプールして使ってくから
そこでJavaが勝利する場合があるらしい。
C++もメモリをプールしていちいち確保しないようにすればJavaより速くなる。
しかしいちいちそんな事やってられるか?
2019/06/22(土) 17:20:50.35ID:VTgUFffK0
>>89
c++のままでないとできない最適化って何がある?
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況