C++相談室 part142

■ このスレッドは過去ログ倉庫に格納されています
2019/04/01(月) 22:17:05.84ID:wmfpIKt/
次スレを立てる時は本文の1行目に以下を追加して下さい。
!extend:on:vvvvv:1000:512

C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。

前スレ
C++相談室 part137 (正しくはpart138)
http://mevius.5ch.net/test/read.cgi/tech/1535353320/
C++相談室 part139
https://mevius.5ch.net/test/read.cgi/tech/1538755188/
C++相談室 part140
https://mevius.5ch.net/test/read.cgi/tech/1547326582/
C++相談室 part141
https://mevius.5ch.net/test/read.cgi/tech/1550772463/

このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.103【環境依存OK】
https://mevius.5ch.net/test/read.cgi/tech/1530384293/

■長いソースを貼るときはここへ。■
 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
2019/04/15(月) 01:36:50.54ID:20PlYkfs
ラムダに11個の引数を参照で渡すのと、キャプチャするの、どっちが速いかな?
2019/04/15(月) 02:40:05.27ID:e1RUhzz1
測ればいいだろ
2019/04/15(月) 02:50:17.52ID:94OTneyx
>>291
メリットのときもデメリットのときもあるだろう。
2019/04/15(月) 02:59:24.82ID:XbOtvNIU
参照渡しな時点でその場で呼び出すのだろ。
最適化かければ結局同じようなアセンブリになるよ。
2019/04/15(月) 09:13:13.35ID:+swIGlrx
それはわからんだろ
ブロック待ちするかもしれないわけで
297デフォルトの名無しさん
垢版 |
2019/04/15(月) 19:29:41.18ID:8vw8m6ly
引数で渡すとスタックに積まれる可能性があるけど、キャプチャするとそうならないのでは。
2019/04/15(月) 19:36:28.26ID:XbOtvNIU
いや、形式上は無名クラスにキャプチャを変数としてぶちこんだもののインスタンス作ってメンバ関数のoperator()呼ぶのだから、スタックは使うだろ。
2019/04/15(月) 20:08:47.93ID:Auf6nZgf
C言語じゃダメなんですか!
2019/04/15(月) 20:20:07.70ID:NSErsM12
いいよ
2019/04/15(月) 20:25:01.30ID:IXPbMXJW
無駄に複雑にしとるな。
302デフォルトの名無しさん
垢版 |
2019/04/16(火) 01:01:07.13ID:ZVmLHBMP
>>298
じゃあ、引数で渡すとスタックに積まれない可能性があるので、速い場合もあるのでは?
2019/04/16(火) 02:15:09.28ID:WfxisTJA
海外だと、Javaに負けて、Rustに圧倒的実力で追いやられるC++
2019/04/16(火) 02:27:07.22ID:WfxisTJA
>>303
https://insights.stackoverflow.com/survey/2019#technology-_-what-languages-are-associated-with-the-highest-salaries-worldwide
2019/04/16(火) 15:01:04.19ID:RMLQoksE
本当に、コンパイル時に何かしたいならRustだけどね
306デフォルトの名無しさん
垢版 |
2019/04/16(火) 18:28:44.44ID:ZVmLHBMP
>>304
Java圧倒的な強さだな。
307デフォルトの名無しさん
垢版 |
2019/04/16(火) 18:30:10.89ID:ZVmLHBMP
全部足すと500%位になりそうだから、複数の言語を使う人が多いんだろね。
2019/04/16(火) 21:18:54.40ID:dFuxCqAG
江添が転職できずに困っとるw
まあこいつがクソなだけでc++の問題ってわけじゃないんだがイメージは悪いわな。
2019/04/16(火) 21:36:49.03ID:jMhdT2ep
こうしてみるとホッシーの全タクシー移動ってのは理に適ってるな
バカな公害に捕まる心配が減る
2019/04/16(火) 23:25:27.27ID:LsPOsuul
なんか私怨でもあるんかいな
2019/04/16(火) 23:41:35.10ID:InK+cNH/
喫煙者が目に入った途端癇癪起こして殴り掛りかかる狂犬なんだっけ?
2019/04/17(水) 00:03:12.24ID:vVzTJh6n
知らね
よく人を招いているようだし揉めたことがある人も少なくはないんじゃいか
2019/04/17(水) 01:12:11.58ID:UWuCQ9XR
>>310-311
当事者の様々な主張の食い違いがあるので、結論としては「わからない」。
少なくとも彼自信の主張としては掴みかかってきたのを払いのけた結果として眼鏡が割れたということになっている。
(江添が殴りかかったわけではなく、むしろ防衛した側、と江添は主張している。)

江添が煙草について過激な意見を持っているのは確かだが、
シェアハウス内で禁煙場所であると合意がなされている場所で煙草を吸った客人がいたというところは当事者全体が認めているようだ。
2019/04/17(水) 08:21:52.75ID:DaACwh1w
恨みというかまともにコード書かない奴がクソ意見で現場荒らすって事自体がクソだと思うわけで、
まあその反動で現場で働くことができないって事になればザマァって思う。
2019/04/17(水) 09:46:31.27ID:vVzTJh6n
現場を荒らしてる?
2019/04/17(水) 09:53:30.15ID:vVzTJh6n
どのプロジェクトにも参加してないと認識してたけど乗り込んでケチつけてたりするのかな
まあ俺ドワンゴとは縁が無いからどこで何してようが関係ないけど
2019/04/17(水) 17:08:02.09ID:I32j715f
C++がPython抜いて3位 - 4月TIOBE言語ランキング 2019/04/17 10:55 後藤大地
https://news.mynavi.jp/article/20190417-810363/

TIOBE Softwareから、2019年4月のTIOBE Programming Community Index (PCI)が公開された。
TIOBE PCIは、複数の検索エンジンの検索結果から、対象となるプログラミング言語が
どれだけ話題になっているかをインデックス化したもの。

4月TIOBE Programming Community Index / 円グラフ
https://news.mynavi.jp/article/20190417-810363/images/001.jpg

2019年4月はC++がPythonを抜いて3位に返り咲いた。ただし、Pythonのシェアが下落したの
ではなく、Pythonの増加傾向をC++の増加が上回ったことによる結果と思われる。C++は
長期にわたって下落傾向が続いていいたものの、2019年に入ってから増加傾向へ転じている。
Pythonも増加傾向が続いており、どちらも今後さらにインデックス値を増やす可能性がある。

長期にわたって1位を確保しているJavaは依然として1位のポジションにあるが、下落の
傾向が続いている。2位のC言語も長期で見ると下落を続けており、C++やPythonの存在感が
強くなってきている。
2019/04/17(水) 17:11:50.34ID:hoIwj+sG
>>317
何回だからみんな何回もググってるんだよ
319デフォルトの名無しさん
垢版 |
2019/04/17(水) 18:34:58.84ID:LllPIzo0
俺が検索しまくったからだろうな。
2019/04/17(水) 19:59:29.56ID:fJF68+PR
今もしインターネットが完全にシャットダウンされると
プログラム書けなくなるプログラマけっこう数いるだろうな
2019/04/17(水) 20:18:46.81ID:UWuCQ9XR
>>320
cpprefjp はとりあえず手元にダウンロードしてあるけど。
2019/04/17(水) 20:35:09.94ID:P5fp2rRi
どうやってダウンロードしたの?
巡集じゃできなかった…
2019/04/17(水) 20:39:18.77ID:WWgiT6Ow
githubじゃない?
2019/04/17(水) 21:27:54.32ID:P5fp2rRi
そうなんだ、ありがとう
325デフォルトの名無しさん
垢版 |
2019/04/19(金) 02:16:29.43ID:/DYxLH/O
どういたしまして。
2019/04/19(金) 08:26:54.03ID:gmGy9oTC
江添は職質裁判でも、不当判決が出たので控訴するみたい

警官は、複数人で口裏合わせするから、民間人は勝てない

漏れもやられたけど、酒酔い運転でも、漏れが機械に息を吹き掛けても、ランプが点かない。
そこで、警官がクルッと後ろを向くと、ランプが点く

そっと見たら、酔っ払い警官が、自分で息を吹きかけて、ランプを点ける

こういう裁判で争っている人もいるけど、
警官は複数人で口裏合わせするから、絶対に勝てない!

警官は皆、このやり方で出世しとる
2019/04/19(金) 08:33:03.47ID:PWe5dNBv
ありゃ普通に対応してりゃ済む話だと思うがね。

やってることは完全に当たり屋だろ。
2019/04/19(金) 09:27:15.01ID:biH+fvR8
>>326
Rubyバカの人か。相変わらず思い込みが激しく、言っていることが滅茶苦茶だな。
2019/04/19(金) 12:05:02.85ID:rPSCrubJ
どんだけ江添好きなの?w
2019/04/19(金) 13:28:48.91ID:W5tFDDw/
日本でC++真剣にやってるのって彼だけだし
2019/04/19(金) 13:41:25.74ID:mypEidUJ
だけ、というのは言い過ぎだと思うが、
日本語で最新の C++ の事情を本にしているのは江添くらいしかいないからなぁ。

江添本人は自分のことを実務家ではなく教育者だと考えているようだし、
(肩書は何なんだろ? エヴァンジェリストのようにも見えるが……)
今のポストは妥当なとこだろ。
そのままやってくれればありがたいもんだ。
2019/04/19(金) 13:41:50.58ID:i8rhoxHy
つまり他の日本人は竹刀とか木刀ってことか。
2019/04/19(金) 13:50:35.12ID:rPSCrubJ
江添個人の裁判は完全にスレチなんだよなあ
仮に違法な取り締まりだと判断されても警察のやり方が改まるわけもないだろうし
2019/04/19(金) 14:15:26.68ID:JVA9qfGz
江添すなわちC++なのだから
江添の話題は全てC++の話題だょ
2019/04/19(金) 15:08:33.32ID:j263LUSd
宗教の話はよそでやってくれないか
2019/04/19(金) 15:16:01.57ID:JwgM4FAg
もう少しc++の話をしてくれと思う事もある
337デフォルトの名無しさん
垢版 |
2019/04/19(金) 18:50:10.05ID:/DYxLH/O
はちみつさんも真剣にやってると思います。
2019/04/19(金) 19:16:13.92ID:yj9Iz3m1
こんな事言うと勘違いされそうだが、はちみつ餃子はちゃんとしてると思うよ
C++に関しておかしなことは言っていない
ていうか、はちみつ餃子ってものすごい不味そうなんだがそんなの本当にあるのだろうか・・?
2019/04/19(金) 19:17:39.46ID:j263LUSd
肉料理にはちみつを入れること自体はわりと普通
量の問題
2019/04/19(金) 19:28:19.17ID:PWe5dNBv
いや明らかに開発してねーだろって感覚じゃねーか。
まあここならそれでもいいんだろうけれど。
2019/04/19(金) 19:51:37.44ID:mypEidUJ
>>338
ググればわかるけどはちみつ餃子はそこそこありふれた料理だよ。

その昔、 higepon が自分でもどうして higepon などと名乗ったかわからない
と述べていたので、そのくらい意味不明感じにしようと思って適当に
思いついた語をコテハンにした。
Scheme スレが本来の住処なので当初は SCHEME餃子 と名乗っていたけど、
他のスレにも顔を出すようになったのでなんとなくはちみつ餃子になった。
およそ意味不明な組合せにしたつもりだったんだけど、
実際にある料理だとは後になってから知った。
2019/04/19(金) 21:11:54.81ID:fEN/Hp+M
initializer_listを引数に取るオブジェクトを引数に取る関数で
下記のケースでUniversal Initializationが効かないのですが
何かいい手はないでしょうか

using KVPCollectionType = std::map<std::string, std::string>;
void f(const KVPCollectionType&& kvps = {});

f(); // OK
f({}); // OK
f(KVPCollectionType{{"key1", "value1"},{"key2","value2"}}); // OK

f({{"key1", "value1"},{"key2","value2"}}); // NG これをやりたい!!
2019/04/19(金) 21:13:17.21ID:UQpKfTQY
エピ…いや何でもない
2019/04/19(金) 21:17:05.52ID:fEN/Hp+M
すみません、訂正です
× void f(const KVPCollectionType&& kvps = {});
○ void f(const KVPCollectionType& kvps = {});
345デフォルトの名無しさん
垢版 |
2019/04/19(金) 21:22:53.30ID:/DYxLH/O
アークエンジェルに搭載されてるstd::variant<>。
2019/04/19(金) 22:49:42.25ID:DWxUZ3pl
wandboxで試したらclangでもgccでもc++11 -pedanticで通ったけど?
2019/04/20(土) 00:01:37.25ID:a7z6m7l4
ごめんなさい、ごめんなさい。本当にごめんなさい。
勝手に脳内で要約したのが間違えまくってました

正確には以下の通りです。
#include <map>
#include <memory>
using KVPCollectionType = std::map<std::string, std::string>;
class c {
public:
c(const KVPCollectionType&& kvps = {}){}
};
int main()
{
auto ok = std::make_shared<c>(KVPCollectionType{{"key1", "value1"},{"key2","value2"}}); // OK
auto ng = std::make_shared<c>({{"key1", "value1"},{"key2","value2"}}); // NG!!!
}
348デフォルトの名無しさん
垢版 |
2019/04/20(土) 10:47:21.77ID:5oa1AZjP
全てのバグを絶滅せよ。
「今日は死に日和」好評発売中。
2019/04/20(土) 11:08:43.59ID:3kBWifqd
C++11や14を使ってる人、コンパイラは何ですか。
2019/04/20(土) 11:25:30.96ID:m+a2EYsq
ゲームエンジン作ってる人いますか
351デフォルトの名無しさん
垢版 |
2019/04/20(土) 11:30:38.02ID:5oa1AZjP
clとgcc。
2019/04/20(土) 13:20:15.93ID:lwVpLCzw
c+11以降はバージョン違うと全く別のコンパイラ
2019/04/20(土) 13:23:19.12ID:8Vh3F1FF
Twitchでプログラミングしてるやつの中でゲームエンジンも居たような
2019/04/20(土) 13:30:02.11ID:7hm/FBJ7
>>347
テンプレートの推論ルールとして「関数テンプレートのパラメータとして波カッコの初期化子リストを渡して型推論させることはできない。」
ということになっている。 ( https://cpprefjp.github.io/lang/cpp11/uniform_initialization.html )
make_shared の実際の型は template <class T, class... Args> shared_ptr<T> make_shared(Args&&... args); なので、
このとき Args が推論できない以上はどうにもならん。
型を固定した専用の関数をはさんでこんな感じにするくらいのことしか思いつかないな。

#include <map>
#include <memory>
#include <initializer_list>
#include <utility>

using KVPCollectionType = std::map<std::string, std::string>;
class c {
public:
c(const KVPCollectionType&& kvps = {}){}
c(const std::initializer_list<typename KVPCollectionType::value_type>){}
};

std::shared_ptr<c> make_c_shared(std::initializer_list<typename KVPCollectionType::value_type> a) {
return std::make_shared<c>(std::move(a));
}

std::shared_ptr<c> make_c_shared(KVPCollectionType&& a) {
return std::make_shared<c>(std::move(a));
}

int main() {
auto ok = make_c_shared(KVPCollectionType{{"key1", "value1"},{"key2","value2"}});
auto ng = make_c_shared({{"key1", "value1"},{"key2","value2"}});
}
2019/04/20(土) 13:32:51.70ID:7hm/FBJ7
>>347 >>354
呼出す側で

auto ng = std::make_shared<c, std::initializer_list<typename KVPCollectionType::value_type>>({{"key1", "value1"},{"key2","value2"}});

というように型を明記してもかまわないけど、使う側でいちいちこんなこと書きたいわけじゃないだろ?
2019/04/20(土) 13:35:42.76ID:7hm/FBJ7
>>347
ちゃんと考えたら >>354 はいらんことしとるな……
これで充分か

#include <map>
#include <memory>
#include <utility>

using KVPCollectionType = std::map<std::string, std::string>;
class c {
public:
c(const KVPCollectionType&& kvps = {}){}
};

std::shared_ptr<c> make_c_shared(KVPCollectionType&& a) {
return std::make_shared<c>(std::move(a));
}

int main() {
auto ok = make_c_shared(KVPCollectionType{{"key1", "value1"},{"key2","value2"}});
auto ng = make_c_shared({{"key1", "value1"},{"key2","value2"}});
}
2019/04/21(日) 08:19:35.76ID:jJhiZdMc
>>354-356
ありがとうございます、その手を使わせていただきます
状況によって推定ルールが変わるのはやめて欲しいなってちょっと思ったんですけど。
2019/04/22(月) 23:55:58.01ID:uyfay/gq
メンバアクセスにthis->つける?
2019/04/23(火) 00:01:58.24ID:cW1os5L0
エディタの補完機能使いたいときにたまにそうやって補完して最後に消す。
が、たまに忘れる。
2019/04/23(火) 00:02:35.52ID:BSgCsXpz
IDEの都合で付ける事が良くある
付けないと補完候補多すぎて
2019/04/23(火) 00:09:08.10ID:JKfCESEZ
ああなるほど
補完候補を絞るのには便利ですね
362デフォルトの名無しさん
垢版 |
2019/04/23(火) 18:16:01.64ID:Wx+D+gzo
メンバであるという保証ができるので付ける
2019/04/23(火) 19:39:28.32ID:cE0Yu4R7
メンバ名は頭にm_付けろみたいなクソルールよりずっといいと思うので付けるべき
2019/04/23(火) 19:42:38.83ID:JKfCESEZ
仮引数と別の名前つけるのだるいからm_は別に良いと思う
2019/04/23(火) 20:02:01.86ID:8XemHsTC
メンバ変数に専用の色付けたらいいじゃん
2019/04/23(火) 20:13:43.06ID:sktjqElV
引数そのままメンバに入れるなら引数に_つけてvar(_var)って初期化してるわ
2019/04/23(火) 20:16:13.74ID:JSYnwir1
>>366
それって var(var) でも問題ないんですよ…
2019/04/23(火) 21:18:06.78ID:DAl4rXky
バーバー
2019/04/23(火) 21:32:08.36ID:BSgCsXpz
>>367
綴り間違えたら悲惨なことになった
370デフォルトの名無しさん
垢版 |
2019/04/23(火) 21:34:08.78ID:3k1+3l7a
ハンガリアン記法は、入力補完のないエディタ上での可読性を高めるのに役立ってるでしょ。今でも。
2019/04/23(火) 21:35:06.30ID:8XemHsTC
ゴミ使ってる奴のことなんか知らん
2019/04/23(火) 21:36:10.37ID:BSgCsXpz
あれ可読性落ちるだろ
2019/04/23(火) 21:39:11.30ID:lLaZpSEH
定期的にunsignedとsigned混在させてハマるアホをみるとハンガリアン必要だと思うわ
2019/04/23(火) 21:40:37.34ID:lAbUfbw7
C#で入力補完のないエディタがどうとかさすがにナンセンスでは
だってvisual studio使うじゃん
2019/04/23(火) 21:41:16.53ID:ZkNEZW45
どっちでもいいわ。
大抵の場合そんなとこに気を使わんといかんコードになってることのが問題。
2019/04/23(火) 21:45:47.89ID:lLaZpSEH
>>375
こういうやつがそのうちハマって丸1日つぶしたりするんだよなw
2019/04/23(火) 21:51:11.17ID:8XemHsTC
>>373
関係なくて草
2019/04/23(火) 21:55:03.06ID:lLaZpSEH
関係あることわかってなくて草
2019/04/23(火) 21:55:54.04ID:8XemHsTC
黙ってろゴミw
2019/04/23(火) 21:59:25.62ID:ZkNEZW45
>>376
だから人を嵌めるようなコード書くなつってんだよばか。
2019/04/23(火) 22:06:36.15ID:lLaZpSEH
>>380
コードの問題じゃなくて言語仕様の問題だから
こういうえらそうなくせに何もわかってないカスが一番始末に困る
2019/04/23(火) 22:53:19.60ID:ZkNEZW45
いつの間にかハンガリアンが言語仕様になってた。。
2019/04/23(火) 23:10:13.77ID:lLaZpSEH
ハンガリアンも防御的なプログラミングと考えたら悪くないよ
成り立ち調べてみな
でも基本型とポインタだけだな
クラスには無用だと思う
2019/04/23(火) 23:27:23.37ID:8XemHsTC
てめーらはまともなIDEかエディタ使ってねえのかよ
2019/04/23(火) 23:37:57.35ID:JKfCESEZ
むしろVSがないと何も書けない
386デフォルトの名無しさん
垢版 |
2019/04/23(火) 23:55:15.96ID:UPBQPhwq
VSがあっても何も書けない。
2019/04/23(火) 23:55:30.60ID:ZkNEZW45
c++みたいに型情報ありがデフォルトの言語でハンガリアンとか二重メンテもいいとこだわ。
2019/04/24(水) 01:00:02.97ID:pnt3hUol
前方宣言したクラスをTにしたスマポメンバでコンパイル通るときと通らないときがあって調べてたら
デストラクタがインライン(暗黙)だと駄目だとわかった
しかもこの問題が起こるのはunique_ptrのときだけでshared_ptrはデストラクタの定義に関係なく通る
わけわからんぞ
教科書に書いておいてくれ

class ClassB;
class ClassA{
public:
ClassA();
private:
std::unique_ptr<ClassB> u; // NG
std::shared_ptr<ClassB> s; // OK
}

---

class ClassB;
class ClassA{
public:
ClassA();
~ClassA(); ←これでunique_ptrもOK
private:
std::unique_ptr<ClassB> u; // OK
std::shared_ptr<ClassB> s; // OK
}
2019/04/24(水) 07:38:59.52ID:IdP8M60W
>>388
unique_ptr<T>のデストラクタはインスタンス化するときにTが完全型であることを要求する(デストラクタで直接Tのデストラクタを呼ぶ)
unique_ptrを内包するクラスのデストラクタが暗黙だとクラス内でコンパイラによって実装されるけど、その場でunique_ptrのデストラクタを要求する
しかし、その翻訳単位内でTの定義が無ければコンパイルエラーとなる

unique_ptr<T>を内包するクラスのデストラクタがとりあえず宣言だけでもあると
実際の定義がある場所で同様の事が起こるので、その場所でTの定義が見つかればいい
その場合に定義を書かないと、コンパイラさんが適切な翻訳単位内に定義をおいてくれるみたい

shared_ptrは動的削除子のおかげでデストラクタが呼ばれるところで適切にデリータを定義し、デストラクタを呼ぶようになっているのでこの様な問題は起こらない
shared_ptr<T>のデストラクタ内ではTのデストラクタを直接呼び出すようなコードが無い
2019/04/24(水) 18:54:26.06ID:pnt3hUol
>>389
解説ありがとう
2019/04/26(金) 01:05:34.79ID:UW94aXeh
うーんC++プライマー8500円かぁ。本家のプログラミング言語C++第4版はもっとするし
情報量からすると安いが本一冊にポンと出すにはお高い……日本語である程度網羅的な本となるとこの2冊くらいよね
2019/04/26(金) 19:40:01.51ID:aJMYFNVy
set<double> って int のときと同様にちゃんとソートされるんですか?
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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