C++相談室 part137

レス数が900を超えています。1000を超えると表示できなくなるよ。
2018/07/14(土) 17:53:02.14ID:FOAGvAbs
次スレを立てる時は本文の1行目に以下を追加して下さい。
!extend:on:vvvvv:1000:512

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

前スレ
C++相談室 part135
https://mevius.5ch.net/test/read.cgi/tech/1522495206/

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

■長いソースを貼るときはここへ。■
 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
2018/08/17(金) 22:11:59.07ID:6wrElEJt
>>847
構造体やクラスだと
ポインタや参照がデフォなんだよ

とりあえずポインタ、参照で渡す事を考える
これでは困る時にはじめて他の方法を考える

わざわざ無駄に重くしなくて良い
コードサイズも実行時間も使用メモリも増える
悪いことしかない
2018/08/17(金) 22:28:22.24ID:p6eculQx
>>838
世の中の殆どは再発明の繰り返しではないか
そこから新しいものが生まれる
>>840
機械学習、音声言語処理に興味ある
生成や知識獲得とかも
2018/08/17(金) 22:33:47.04ID:rVfGTX61
とりあえず車輪からだな

あっそれロン。大車輪で役満です
2018/08/17(金) 23:28:39.10ID:2sBNjScG
ユーザーの実行コストを考えたらC++しかありえない
2018/08/17(金) 23:29:57.49ID:L+nRWRoK
>>852
Rustを知りませんか?
2018/08/17(金) 23:48:03.15ID:3Fyou0AL
>>848
間違って通常のポインタを引数に指定されないよう、共有ポインタの参照を引数にすることはあり得るでしょ。
2018/08/17(金) 23:49:26.53ID:2sBNjScG
RustはいつになったらC++を殺すんだ?
2018/08/18(土) 02:00:38.26ID:/pVEXQTC
https://github.com/rust-lang/rust/issues
エラーが4000件だから、しばらく無理。
2018/08/18(土) 10:32:16.38ID:zXZq/jKJ
Visual Studioのデバッグ実行ってクラッシュとかしてもコードのどこでクラッシュしたかを示してくれるのですごく便利なんですが、
ただでさえ重めだった実行が、2015から拍車がかかり、かなり使いにくくなってしまいました。
どうもvector等のSTLの範囲チェック等が重たいとのことで、たしかにSTLの使用割合が多いアプリほど重たい傾向にあります。
たしかに範囲チェックはありがたいのですが、多少デバッグ能力を妥協して動作を軽くできないでしょうか?

理想はデバッグ機能をカスタム実装してリリースモードで動作でしょうけど、
予想できないクラッシュ等に対応するのが難しいと思います。

ご助言、よろしくお願いします。
2018/08/18(土) 12:38:36.62ID:C9f4IyR8
>>857
IDEに頼るな
vimを使え
2018/08/18(土) 12:58:55.58ID:qRHlEVCy
理想は平均的な性能のPCを買うことかな
2018/08/18(土) 13:48:15.95ID:9bYd+OzJ
>>857
https://msdn.microsoft.com/ja-jp/library/hh697468.aspx
2018/08/18(土) 15:07:37.45ID:T6klohyz
質問ですが
class Foo {
public:
  int a[100];
  Foo();
};
というクラスにおいて、構築時にメンバa[]をゼロ初期化する簡単な書き方はありませんか

ちなみに
Foo::Foo() : a({ }) { }
とやったらエラーになりますた、
2018/08/18(土) 15:27:11.61ID:/pVEXQTC
https://ideone.com/BuNLLF
こう?
2018/08/18(土) 16:07:29.18ID:cIuR0GWn
普通に書いたらええがな。

Foo::Foo(){
for(int i=0; i<100; i++){
a[i] = 0;
}
}
2018/08/18(土) 16:21:12.10ID:T6klohyz
レスdクス、

>>862
申し遅れましたがやpっぱC++11では_ですかそうですか…
2018/08/18(土) 16:59:01.67ID:/pVEXQTC
初期化法自体はC言語からある方法だけど。
構文はC++だけどね。
2018/08/18(土) 17:03:27.71ID:/pVEXQTC
あー、そうなのね。あれって環境依存だったのか。ゴメン。

https://wandbox.org/permlink/ASJ3oCbkha0Ren8B
2018/08/18(土) 17:32:50.09ID:dGIgNVTb
>>859
平均的じゃ足りんだろ
VMwareとか使いまくるには
RAMとHDDがたんまりないと心許ない
2018/08/18(土) 17:34:51.43ID:WtnFgJ11
Foo::Foo() : a{ } { }
でええやん
2018/08/18(土) 17:36:04.82ID:dGIgNVTb
>>861
Foo::Foo() : a{ } { }
2018/08/18(土) 17:36:29.52ID:/pVEXQTC
>>868
そんなことできたのかぁー。うぼぁー。
2018/08/18(土) 17:36:36.32ID:dGIgNVTb
あ、被った
すまんこ
2018/08/18(土) 17:36:58.77ID:ONgNSdiS
今時はSSDだろ。SSDにデータ移行しなよ。VS2017が数秒で起動するぜ。
2018/08/18(土) 18:54:50.29ID:dGIgNVTb
うんC:はSSD一択だね
できればSLCのやつ
2018/08/18(土) 19:32:14.99ID:/9y7PjMS
>>872
何もかもがめんどくさっくて、C ドライブになんでもたんまりと仕込むのが好きなんですが、
1TB くらいある SSD ってお高いんでしょう?
2018/08/18(土) 19:49:21.94ID:Q0JvwYe1
最近は途中にマウント出来るのよ
2018/08/18(土) 19:55:17.69ID:gititOy1
>>874
例えば、だが
Crucial SSD 1000GB MX500 内蔵2.5インチ 7mm ¥23,738
2018/08/18(土) 21:21:58.94ID:F905Yoig
理由はわかるが柔軟性が欲しい

class A{
};
class B: public A{
};
temaplate<typename T>
void test(T a, T b){
}

A a;
B b;

test(a, b);//Error.型が一致しない。
test<A>(a, b);//ok.明治すればok
2018/08/18(土) 21:38:06.56ID:hlXM+cNJ
型を分けて、共通型を使えば?
2018/08/18(土) 23:59:13.75ID:3zCcdQf6
>>874
きみなら一時間とは言わないが、一日でそのくらい稼ぎ出すんやろ?
2018/08/19(日) 00:05:39.35ID:RqnFNWUi
>>878
こうすればokというのはわかるけども面倒
template<typename LT, typename RT>
void test(LT const& a, RT const& b){

}
881857
垢版 |
2018/08/19(日) 01:30:39.96ID:KCtnHGyc
>>860
ありがとうございます!
これでやってみます!

>>858
vim、興味深いですが、慣れるまで時間がかかりそうですね^^;
882デフォルトの名無しさん
垢版 |
2018/08/19(日) 09:02:49.22ID:qd68oMAq
じゃあメモ帳で。
2018/08/19(日) 09:12:46.20ID:qaYG8ur7
notepad++かサクラエディタ

ttps://forest.watch.impress.co.jp/library/software/notepadplusp/
ttps://sakura-editor.github.io/download.html
2018/08/19(日) 09:25:18.62ID:wM6XArJ0
vim は、

迷ったら、Esc を押して、コマンド入力モードにする。
そこで、a を押せば、append 文字入力モードになる

:q! 保存せずに終了
:wq 保存して終了
2018/08/19(日) 09:26:24.72ID:xXXJlhyc
今は spacemacs 以外あり得ないよ

欠点が厳密にゼロ個な完全なチョイス
2018/08/19(日) 09:40:59.64ID:0vPM1br5
最近はVSCodeが使い物になってきたぞ
CMakeとの連携も賢い
補完がまだ遅いが
887857
垢版 |
2018/08/19(日) 10:56:19.69ID:KCtnHGyc
自分はサクラエディタを10年以上愛用しています。
VisualStudioはコンパイラ兼デバッガとして利用してます。
2018/08/19(日) 14:03:03.06ID:5+hPFDRj
俺の main.cpp が 9万5千行 を超えた
ファイルサイズにして2.37MBある
クラス内でなら前方参照が可能なC++の盲点をついて
適当な struct でプログラム全体を丸ごと囲って
前方参照しまくり & ヘッダに全部書くスタイルで
一つのファイルに全部押し込めた
C++サイコー
2018/08/19(日) 14:03:58.10ID:5+hPFDRj
ちなみにコンパイルが遅くなるのと
コード補完が重くて使い物にならなくなるので
素人にはお勧めしない
2018/08/19(日) 14:13:18.08ID:MSEMVqOe
キモイコードだなぁ。メンテナーが泣くぞ。
2018/08/19(日) 14:20:44.33ID:5+hPFDRj
大丈夫
サンデープログラマーで俺一人だけしか書かないから
ソースコードも公開してないしな
2018/08/19(日) 14:22:38.72ID:RqnFNWUi
なんのプログラムを書いたらそうなるんだ・・・
2018/08/19(日) 14:58:05.30ID:0c0A7VGq
>>888
キモすぎやろ…

>>891
見してくれ
2018/08/19(日) 15:04:46.82ID:5+hPFDRj
こういうのは怖いもの見たさみたいなのもあると思うし
これだけでコンパイルして動くものでもないので一応ソースコード
あまりにもアレで、そっ閉じだろうけど
http://www.geocities.jp/notenop/tomato_player/main.cpp

コンパイル済みのソフトは
http://www.geocities.jp/notenop/tomato_player/index.html
からダウンロードできる

非同期処理に俺が思いついた横断的でトリッキーなアイデア
https://qiita.com/notenopg/items/40571e69986a58b888a0
↑が使われている
安全にキャンセル出来なきゃ await の意味ないでしょ!ってなもんで
でもなかなか理解されないんだよなぁ、すごいアイデアだと思うんだが

それからツリービューのアイテムのピン止めのアイデアは
お気に入りやタブの代わりになって画期的だと思うんだが
何故マイクロソフトがエクスプローラに実装しないのか謎
特許関係かね
あとはフォルダ階層をそのまま扱える木構造なプレイリストとか

そんなことやってたら9万行超えました
ちなみにUIはDirectXでちまちまフルスクラッチで手書き
その代わりその辺のソフトに負けない速度で、4K対応
2018/08/19(日) 15:07:41.51ID:5+hPFDRj
庶民には理解できなくても
プログラマであるあなたたちなら
ピン止めできるツリービューが如何に画期的か理解できると思うんだよね
タスクバーでも何でもピン止めの時代なのに
ツリービューもピン止めできて良いと思うのよね
2018/08/19(日) 15:09:21.21ID:5+hPFDRj
ああ、ツールバーとかスクロールバーとかのレベルで
全部フルスクラッチでDirectXで手書きだから
2018/08/19(日) 16:00:06.94ID:RqnFNWUi
庶民なる俺様にはピン留出来ることの利点がわからん
2018/08/19(日) 20:23:08.28ID:qaYG8ur7
サクラエディタが優秀だということは分かった
2018/08/19(日) 21:38:13.69ID:Vpx5N+CG
見て欲しくて我慢できなかったんだな
2018/08/19(日) 22:28:08.34ID:bW/fB7v7
>>711
https://www.amazon.co.jp/dp/4871481689/
2018/08/20(月) 08:03:46.47ID:4c85aa3D
>>900
Makeって何?
2018/08/20(月) 14:14:50.32ID:PcIDGZDw
>>901
来年にはSunOSにも移植される予定の超最新自動ビルドツールの紹介だよ!
2018/08/20(月) 15:49:07.20ID:YVC1gYT/
>>901
オライリーがおかしな実験をする本だよ
2018/08/20(月) 18:47:45.43ID:VU5jvdn2
>>901
昔から使われている原始的といってよいビルドツールです
makefile に依存関係を書いておいて、コマンドラインで「 make -j」と起動すると、記述した依存関係にしたがってコンパイル・リンクが行われます
2018/08/20(月) 18:59:55.06ID:ftO9aq8g
Linuxなんかで配布されたソースから実行ファイルを作成したいって時にお世話になります
2018/08/20(月) 20:29:15.33ID:MlhHAxXO
>>904
この本を読めばコンパイルについても分かるの?
2018/08/20(月) 20:46:46.88ID:VU5jvdn2
>>906
>>900 は make を C で記述するものであり、コンパイル自体について記述するものではありません
2018/08/20(月) 23:46:22.40ID:qkN29+U3
クラス生成に挫折したのかな?w
2018/08/21(火) 00:03:12.90ID:Y1eCmHG/
C++自体の本はたくさんあるのにビルドやプロジェクト構成について解説した本って全くないよな
コピペで受け継いできた秘伝のMakefileやconfigureが蔓延してるのなんとかしてくれ
売れないだろうがCMakeの解説本が一冊欲しい
2018/08/21(火) 00:06:59.04ID:FygfW+En
cmake はつい最近のVisual Studio 2017アップデートで標準インストールされるようになったから潜在需要あるかもね…。
2018/08/21(火) 00:51:54.00ID:zakr4cIe
なんでビルドツールっていつも怪物化しちゃうんだろうな
makeがもう誰も手に負えない怪獣のくせにずっと定番に居座ってて、「Makefileを作るツール」が乱立してそれぞれ怪物化してるの勘弁してほしい
2018/08/21(火) 01:03:38.38ID:Wpz7rvAB
>>911
>makeがもう誰も手に負えない怪獣

make ですら怪獣になるのだったら、他の高機能ビルドツールはとっくに破綻している現状だったのか!と、ふと
2018/08/21(火) 01:35:58.44ID:mIqstMqN
makefileなんて複雑な事求めないなら手でかけるレベルだよ
これが複雑で手に負えないとなると、プログラミングも怪しくなる
2018/08/21(火) 01:36:31.95ID:Y1eCmHG/
ビルドについての教育がないがしろにされてるのが全ての元凶
ある程度以上の規模のプロジェクトを構成するベストプラクティスが示されているところを見たことがない
適当に好きなところから取ってきて動けばいいやくらいに改変して使ってるのが現状
2018/08/21(火) 07:06:57.27ID:agJOmNk0
丁寧に書いてるのはこれくらい。

ttp://aegis.sourceforge.net/auug97.pdf
2018/08/21(火) 11:19:53.91ID:zakr4cIe
複雑なことをしたいからビルドツールを使うわけでしてねぇ・・・
2018/08/21(火) 11:24:41.92ID:mIqstMqN
したいという意思があるなら、がんばって理解も出来るだろう
そこまでしなくても、最低限のルール覚えれば使える
2018/08/21(火) 11:53:12.22ID:gERn4ySS
>>915
goto有害説をもじってるんだなw

Makefileを書いていていつも思うのは
ソースファイルの依存関係はソースファイルの中に書いてあるのに
それをまた二度手間で書かねばならないのがイヤ
面倒くさいのはともかく間違えやすいから
2018/08/21(火) 12:20:54.13ID:JvEAafEP
>>918
automake とか gcc -MM とかの話?
2018/08/21(火) 12:38:18.13ID:Dn6CvPAP
rustとc++どっちも使ってる人いる?
2018/08/21(火) 12:59:21.72ID:gERn4ySS
>>919
gcc -MMか、いいこと聞いた
ありがとう
2018/08/21(火) 13:56:49.24ID:Y1HyydAv
>>919
詳しい解説サンクス
こんなのがあったのか
2018/08/21(火) 16:55:02.40ID:59eaeAGG
>>917
ここで根性論とはセンスあるわ
もちろんエンジニアでなく笑いの
2018/08/21(火) 17:26:56.17ID:/1sxYxCd
エンジニアでなく園児にゃ
2018/08/21(火) 19:40:42.98ID:Y1eCmHG/
WindowsでCMakeはfind_packageでだいたい詰む
vcpkgで対応できなければ結局自分で書くはめになり、面倒くさくなってmingw使うかVSのプロジェクトと同居することになる
2018/08/22(水) 16:26:31.16ID:BT6ndhEb
C++ とは直接関係ないけど make/Makefile は擬似ターゲットを使って
バッチ的な定型処理を1個のファイルでまとめて管理できるのが便利でね。

make find WORD=...
全ソースから WORD= で指定した単語を含む行を検索、みたいな。

自分で作った便利ターゲットの使い方を usage: に書いとくのを忘れるけど。
2018/08/22(水) 17:38:28.37ID:ua+EoSC8
>>926
perlでok
2018/08/22(水) 19:10:59.67ID:lMaJ9TV4
C言語のビルドシステムならC言語で書けるようにするべきだと思うのだがよく分からない専用の言語を使わされるのは何故
この手のスクリプト言語は可読性がデバッガもないから中身を探るのが難しすぎる
2018/08/22(水) 19:27:23.21ID:J6lVaoNe
君がそれを作って公開してみれば良いと思うんだが
2018/08/22(水) 20:50:10.20ID:4/HlUcDP
C++のビルドツールといえばboostでお馴染みのbjam
実質boost専用に作ってるだけなのにあんな聳え立つ糞の山になっちゃうんだからビルドツールって怖いね
2018/08/22(水) 22:31:38.77ID:G7PvCZFg
ソフト名がまだ決まっていないけどプログラム開発がスタートするって一般的だと思うんですが、
こういうときってコードネームを付けますよね?
このとき、VisualStudioのプロジェクト名もコードネームにしますよね?

アプリのウィンドウキャプションとかはアプリ名が決まり次第反映させられますけど、
プロジェクト名は途中で変えられないので、そのままになってしまいますが、しょうがないですよね?

要は社内の開発で問題なければOKで、
リリースしたときにコードネームがどこかに混じってしまわないように気を付ければいいだけですよね?

みなさんがどうされてるのか気になったのでお聞きしました。
2018/08/22(水) 23:03:51.57ID:4/HlUcDP
必要なら変えるよ
slnやvcxprojはただのxmlだから名前変えるだけならそんなに難しくない
2018/08/23(木) 00:06:20.88ID:0/a4zf/K
英国ポエムシリーズでしょう
bjam=ブージャムは言うまでも無く、パンジャンドラムすらも無論英国のポエムから採られた
他にも兵器界隈ではスナークとかが存在するのは周知の通り

日本だと仏教用語から採ればいいんじゃあないですかね
934931
垢版 |
2018/08/23(木) 00:10:54.70ID:U43QDDsh
>>932
なるほど〜、プロジェクト関連ファイルを編集することで名前を変えることはできるんですね。
なら気兼ねなく最初はコードネームにしときます。
ありがとうございました^^
2018/08/23(木) 22:00:21.31ID:NMfUyUL+
std::ref() について教えてください

void f(:ostringstream &os) { ... }
int main() {
ostringstream s;
std::thread(f, std::ref(s));
...

とありましたが、なぜ呼び出し側で「おまじない」のstd::ref() が必要なのか理解できません
どんなときに呼び出し側で std::ref() が必要なのでしょうか?

テンプレート関係かと思いましたが
https://ideone.com/7fF53F
は問題なく、std::ref() が必要となるプログラム例を思いつくことができません

よろしくお願いいたします
2018/08/23(木) 22:17:07.10ID:Z2Fii0dD
std::refの規格表とソースを見たか?
余計なコピーを抑制してるんだ。
2018/08/23(木) 22:18:22.48ID:Z2Fii0dD
s/表/票/
2018/08/23(木) 22:33:14.61ID:/6RK1Hlx
非参照なテンプレートな引数に一時変数を作らずに参照を渡せる
2018/08/23(木) 22:52:37.79ID:NMfUyUL+
>>938
コメントありがとうございます
コピーコンストラクタが禁止されている std::cout をテンプレート引数にわたす場合で理解できました(かもしれません)
https://ideone.com/3eqEJY

一つ質問ですが、私なら、このプログラム例の y()
template<class T> void y((*f)(), T &os) { ... }
のように、テンプレートを書く時点で参照に書いてしまうのですが、
あえて非参照なテンプレート引数を書く「便利さ」みたいなものはありますでしょうか?
940デフォルトの名無しさん
垢版 |
2018/08/24(金) 02:37:15.13ID:kcQyW4E+
大阪はいたって平和
しょぼいにもホドがある
2018/08/24(金) 03:55:21.10ID:A5L5xSI8
>>939
>あえて非参照なテンプレート引数を書く「便利さ」みたいなもの
std::thread のコンストラクタを眺めていて気が付いたこと…これ、可変長テンプレートですね
2018/08/24(金) 04:17:14.78ID:A5L5xSI8
x86 の cmpxchg を使いたくて、gcc 拡張の __sync_val_compare_and_swap() を試していました
http://shinh.hatenablog.com/entry/20060817/1155781747
https://ideone.com/tpefmL

c++11 に std::atomic::compare_exchange_weak() を見つけましたが、これは適当に(任意に) new で確保したヒープにも適用できるものでしょうか?
2018/08/24(金) 07:59:06.64ID:ZkSPfVdV
何で出来ないと思うの?
2018/08/25(土) 08:53:09.59ID:/11s7nnG
template <typename T, typename... ARGS>
class nested_error : public std::nested_exception, public ARGS...
{
public:
nested_error(T const& t, ARGS const&... args) : T(t), nested_error(args...) //C3511
{
}
nested_error(T const& t) : T(t)
{
}
};
何かうまい手ない?
2018/08/25(土) 13:51:57.64ID:rL3qzGy6
そりゃまー、実体化した内部ではTは決定済みだろうから無理だろう。
Anyつかうとか・・・。
2018/08/25(土) 14:24:43.54ID:rL3qzGy6
あ、すまん。おかしなこと言った。
えーっと、変数が一個じゃ足りないな。
イニシャライザーリスト使うか、下位関数にキックするか。
2018/08/25(土) 15:05:48.05ID:XmdDRLnv
そもそもコンストラクタの委譲は再帰禁止だったと思うが
別のクラステンプレートのメンバ関数とか関数テンプレートで再帰するしかないと思う
2018/08/25(土) 15:57:42.66ID:rL3qzGy6
https://wandbox.org/permlink/KrUV4MTPdV0l4OoO
興味があったのでそれっぽいコード書いてみた。
これキャッチするの無理だろ。
レス数が900を超えています。1000を超えると表示できなくなるよ。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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