C++相談室 part135

■ このスレッドは過去ログ倉庫に格納されています
2018/03/31(土) 20:20:06.25ID:o3PNwIlC0
次スレを立てる時は本文の1行目に以下を追加して下さい。
!extend:on:vvvvv:1000:512

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

前スレ
C++相談室 part134
http://mevius.5ch.net/test/read.cgi/tech/1516406742/

このスレもよろしくね。
【初心者歓迎】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/05/13(日) 22:14:29.75ID:VV8A9gRv0
キチガイにさわるな
2018/05/13(日) 22:15:45.94ID:AL0mRZz+0
密度が低い
783デフォルトの名無しさん
垢版 |
2018/05/13(日) 22:19:54.88
>>772
>俺は去るよ。
>俺は去るよ。
>俺は去るよ。
>俺は去るよ。
>俺は去るよ。
>俺は去るよ。
>俺は去るよ。
>俺は去るよ。
>俺は去るよ。
>俺は去るよ。
>俺は去るよ。
2018/05/13(日) 22:28:00.02ID:AL0mRZz+0
吐いた唾は呑ませんぞ
2018/05/13(日) 23:48:52.64ID:d5CbxlL9M
>>780
> ならコンパイラ出力コードが手書きアセンブラと比べてどれだけ糞かも知ってるはずだ。
爺いは早めに滅びればいいのに
2018/05/14(月) 00:21:52.22ID:BWBgd2BN0
constexpr+UCS=ニューパラダイムのはずだったんだがなぁ。
コンパイルタイムは夢がある。
2018/05/14(月) 02:44:09.99ID:xNObD1oN0
昔はライブラリもそんなに充実してなかったしアルゴリズム事典とか読み漁りながら色々自作してやってたけどね
しかしまぁ便利な時代になったもんだ
C言語だと型が変わるだけで使い物にならなくなっていたものが大半だったけど
型に囚われないSTLライブラリは本当に有能だよ
型に囚われない部分は全部インラインになっちゃうけどね
788デフォルトの名無しさん (ワッチョイ 55b3-A5aB)
垢版 |
2018/05/14(月) 13:39:06.22ID:0aBfdvZZ0
オンラインになるんか!
789デフォルトの名無しさん (ワッチョイ 55b3-A5aB)
垢版 |
2018/05/14(月) 13:40:44.68ID:0aBfdvZZ0
実行可能形式はC++、スクリプトはPython。
これができる大人の選択。
2018/05/14(月) 13:48:17.86ID:mA8jyKTp0
バッチは?
791デフォルトの名無しさん (ワッチョイ 55b3-A5aB)
垢版 |
2018/05/14(月) 13:56:29.91ID:0aBfdvZZ0
バッチは他人からパクるので贅沢は言いませぬ。
2018/05/15(火) 20:21:01.90ID:L6tD5feN0
スタイルについての質問なんですけど、Cの文法で書けるならできるだけCで書いたほうがいいのでしょうか
上司のC++のコードがもうほんとゴリゴリのCって感じで、C++でcharの配列も無かろうよと思ったりするんですよ
確かにその方が分かる人は多くなるかもしれないですけど
2018/05/15(火) 20:32:27.71ID:tHLzTn7F0
>>792
C++ はひどい言語だ。これは、多くの平均以下のプログラマーが使ってるために
さらに輪をかけてゲロゲロになっていて、どうしようもないゴミが
簡単に生産されるようになってる。正直いって、C を選ぶ理由が C++ プログラマーを
追っぱらうため *だけ* だったとしても、それ自体、C を使う強力な理由になりうる。

C++ はトンでもなく悪い設計の元になりうる。どうせこの言語ではいつも STL やら
Boost やら、その他ゲロゲロベロベロの「素敵な」ライブラリの機能を使って、
それがあんたのプログラムに「役立つ」んだろうが、以下のことが起きる:

- うまく動かないときにもたらされる際限のない苦痛 (あと STL とか、特に Boost が
安定してるとか移植性があるとかいう奴は、どいつもこいつも大ウソつきで、
もはや笑えるレベルを超えている)

- 非効率な抽象プログラミングモデルで、2年たった後にこれらが実はそんなに
効率的じゃなかったことに気づくケース。でもそのときにはすでに全部の
コードがその素晴らしいオブジェクトモデルに依存していて、直すためには
アプリ全体を書き直さなきゃなんない。

言いかえれば、唯一まともで、効率がよくて、システムレベルで使えて、移植性がある
C++ ってのは、基本的に C で使える機能だけに限ったときなんだ。そして C だけに
限定するってことは、他の人がそれをめちゃくちゃにしないってことで、
ついでに沢山のプログラマが実際に低水準の問題を理解することができて、アホらしい
「オブジェクト・モデル」のたわごとを持ちこまないってことだ。
2018/05/15(火) 20:34:21.22ID:joZeDATc0
いや別に
C++で問題ない

上司の意図は知らんが
パフォーマンスを考えたコードとか
互換性を考えたコードとか
そういう可能性も
5chの一般的な価値観とは違って
C++っぽいのが良いコードって訳じゃない
2018/05/15(火) 20:36:35.58ID:joZeDATc0
逆に若者はコストも考えずに安易に汎用コンテナを使ったりと思うことがある
2018/05/15(火) 21:03:22.33ID:5psId9wb0
ものによるのじゃん?
メモリイメージを意識するならCスタイルの方がきれいにおさまる。
797デフォルトの名無しさん
垢版 |
2018/05/15(火) 21:09:12.04
バグを生む可能性が一切ないならCスタイルのほうがいいに決まってる
2018/05/15(火) 21:41:08.24ID:h7VmA7z3a
c言語って移植性あるの?まともなの?
2018/05/15(火) 21:41:08.58ID:NlOsi0K3d
最近のC++は、std::vectorが配列に最適化されるのか? 遅いだろ
2018/05/15(火) 22:23:39.58ID:NlOsi0K3d
C++11以降ならstd::array使うけど、覚えることがともかく多い
2018/05/15(火) 22:26:59.43ID:NlOsi0K3d
区間チェックしてくれる配列を簡単に指定できると嬉しいの†
2018/05/15(火) 22:31:58.98ID:NlOsi0K3d
例えば、[ ]を二重に書くと添字チェックしてくれるとか。どうかな。

int a[[10]];
2018/05/15(火) 22:42:37.30ID:PNM8l+laM
atじゃだめなんか?
2018/05/15(火) 22:43:36.39ID:sqV4cudU0
例外投げるインデクサと投げないインデクサ両方ありますから。
2018/05/15(火) 22:46:39.90ID:IhUmYIjB0
プロパティONにするとチェック有効で
2018/05/15(火) 22:46:50.65ID:IPNyvhtL0
>>802
オブジェトCを彷彿させるので嫌です
2018/05/16(水) 03:32:46.81ID:gRCAgj/W0
>>802
attributes構文と紛らわしい。
808デフォルトの名無しさん (ワッチョイ 057f-Je+M)
垢版 |
2018/05/16(水) 23:25:18.23ID:cmH84vOv0
arrayはなんで[]でチェックしてくれないの
2018/05/16(水) 23:28:49.70ID:axtQyUCZ0
ゼロコストの原則
810デフォルトの名無しさん (ワッチョイ 0db3-A9b3)
垢版 |
2018/05/17(木) 02:43:52.94ID:vEqyw0xg0
C++のコストの大部分は例外に起因するらしい。
Cでコンパイルできるコードであっても、C++としてコンパイルするとバイナリが肥大化する。
その原因は例外。
2018/05/17(木) 07:10:31.59ID:AhjFsLsi0
x86-64だとゼロコストだよ
2018/05/17(木) 08:34:28.77ID:FVFi5bM10
どこにコストが消えたんだろ
サボってるの?
2018/05/17(木) 09:12:53.49ID:UhXGat7x0
>>810 要出典。
2018/05/17(木) 14:51:21.43ID:T9EnGAyld
x86-32だと割り込み発生時に対応出来るように
関数コールの度にスタックに情報を埋め込む

x86-64はこれが不要
割り込み処理がなければコストはかからない
815デフォルトの名無しさん (ワッチョイ 0db3-A9b3)
垢版 |
2018/05/17(木) 18:56:39.80ID:vEqyw0xg0
>>813
組み込み開発の株式会社○○みたいなサイトで読んだんだけどな。
なかなかためになる内容だったしブックマークしとくんだった。
見つけたらリンクくれ。
816デフォルトの名無しさん (ワッチョイ 0db3-A9b3)
垢版 |
2018/05/17(木) 18:58:28.25ID:vEqyw0xg0
俺の見解では、例外にコストが割かれるなら、それは必要なコストだと思うんだよな。
2018/05/17(木) 19:43:22.14ID:WDNJ9RfY0
元記事消えてるっぽいからアーカイブだけど
http://bytepointer.com/resources/pietrek_amd_x64_primer.htm

Windowsの例外機構がx64ではスタックベースからテーブルベースの通過するだけならゼロコストなものに変わった
ただしバイナリサイズは増える
2018/05/17(木) 19:46:45.63ID:oI1zc+Au0
>>816
例外を使うならコストがかかるのは当然なんだが、
例外が通過しないかもしれないのにそこかしこで情報を積まないといけないのは良くないってことなんよ。
そんでまあ例外を投げたときだけにコストが生じる方式がいいよねっていう話。
2018/05/17(木) 20:29:27.85ID:AhjFsLsi0
例外が発生しない時のコストなんてゴミみたいなもんだけどな
2018/05/17(木) 20:30:03.35ID:AhjFsLsi0
イヤなら64bitで組みなさい
821デフォルトの名無しさん (ワッチョイ 0db3-A9b3)
垢版 |
2018/05/17(木) 20:38:19.60ID:vEqyw0xg0
64ビット化するとサイズが1.5倍になるらしいけどな。
2018/05/17(木) 20:40:58.24ID:AhjFsLsi0
今時コードのサイズなんて問題にならんだろ
その代わりに得るものは大きい
823デフォルトの名無しさん (ワッチョイ 0db3-A9b3)
垢版 |
2018/05/17(木) 21:11:41.72ID:vEqyw0xg0
1.5倍って40sの可愛い少女が60sのオバはんになるってことではないだろか。
さあどっちか選ぶんだ。
2018/05/17(木) 21:42:32.65ID:53fi3uKJ0
どうしても対応し続けないといけない32bitのレガシーデバイスがあるなら頑張って
そうじゃなけりゃもう32bitなんて捨てろ
2018/05/17(木) 21:43:14.24ID:egaCGTtIM
>>823
それ得るもの無さすぎないか?
826デフォルトの名無しさん (ワッチョイ 0db3-A9b3)
垢版 |
2018/05/17(木) 21:57:59.98ID:vEqyw0xg0
60kgのオッサンになるよりはいいだろ。
2018/05/17(木) 22:02:48.61ID:/ukQRMvg0
32bitがレガシーだあ?
どこで吹き込まれたか知らんが
騙されやすいやつだな
2018/05/17(木) 22:20:15.79ID:yYAGBjqQ0
クラスのconst配列メンバをコンストラクタで初期化するにはどうしたらいいでしょうか?

class A
{
 const double array[];

 void A( double &temp[] ) : array(temp)
 {
 }
};


これはコンパイルでエラーが出てダメでした
829デフォルトの名無しさん
垢版 |
2018/05/17(木) 22:32:37.31
>>828
できないからあきらメロン

素直にconst外してアクセサで制御するか、vector使うかしとけ

テンプレートとかを駆使して無理に実現しようと試みるのはいかにも頭が悪いし時間の無駄
2018/05/17(木) 22:33:23.35ID:MPVDtJCy0
constの問題というよりサイズが決まってないからダメなんじゃないの?
831デフォルトの名無しさん
垢版 |
2018/05/17(木) 22:34:24.00
ここ3年ほど32bitの組み込み機器に触ったことない
2018/05/17(木) 22:37:16.99ID:53fi3uKJ0
今はほとんど64bitの上で無理矢理32bit動かしてるんだよ
ネイティブ32bitCPUなんて化石
2018/05/17(木) 22:51:21.67ID:yYAGBjqQ0
>>829
了解です、constは諦めマスカット

>>830
どんなサイズの配列が来るかはコンストラクタが呼び出されるまでわからないんで
サイズは未定にしておきました
2018/05/18(金) 17:13:18.87ID:8ieomEvbM
vc++のマルチコアのオプティマイズなんて甘々だから余裕で
勝てるけどなぁ。
あんなのに負ける人もいるって、世の中広いなぁ(棒)
2018/05/18(金) 18:23:15.07ID:G5mHfuQa0
アホだろお前
2018/05/18(金) 18:33:25.05ID:pNV6CZfO0
そりゃあ頑張れば勝てるだろう
コーディングコストと可読性の犠牲に見合うほど速くなるかどうかは別問題だがね
2018/05/18(金) 18:57:13.66ID:jCVxhDbN0
VCもそうだけど大体のコンパイラは並列化や自動ベクタライズは強くないと思う
古くからある機能とそうでないものでは最適化に差が出るのは当然
だからこそSIMD使うときはみんなイントリンシック命令使ってるのであって
2018/05/18(金) 20:11:41.99ID:Xj+Uy2RAd
>>834て誰に対してのレス?
2018/05/18(金) 21:20:25.60ID:TsUe9Yho0
>>828

template<std::size_t N>
class A {
public:
const double array[N];

template<typename ...ARGS>
A( ARGS&&... args ): array{std::forward<ARGS>(args)...} {}
};

template<typename ...ARGS>
inline auto make_A( ARGS&&... args ) -> A<sizeof...(args)>
{
return A<sizeof...(args)>(std::forward<ARGS>(args)...);
}

auto a{ make_A( 1.0, 2.0 ) };

こんな感じだろうか。
要C++11以降。

>>どんなサイズの配列が来るかはコンストラクタが呼び出されるまでわからないんでサイズは未定にしておきました
要素数が決まってないとコンパイル時に困るので、テンプレートクラスにしちゃったけれど…
2018/05/18(金) 22:05:36.49ID:TsUe9Yho0
あーいや、 >>828 は配列を渡して初期化したいのか…
↑じゃだめだ

だいぶ別物になっちゃった。
ttps://wandbox.org/permlink/gUlWoKLb3QfigsQk
2018/05/18(金) 22:33:37.26ID:G5mHfuQa0
参考にしてみた
https://wandbox.org/permlink/3asRA3QSPQXmmn8l
C++17ならヘルパー不要にはなる・・・(コンストラクタに与えた引数から推定
けどどっちにしても配列数可変にはできない

ていうか配列の参照とか初めて使ったw
2018/05/19(土) 00:03:26.14ID:9PVep4LN0
>>828
C++14のinteger_sequence使ってみた

#include <iostream>
#include <utility>

template <size_t N>
class A
{
const double array[N];
public:
template <size_t... I>
A(const double (&temp)[N], std::index_sequence<I...>) : array{temp[I]...}
{
for (auto x : array) std::cout << x << std::endl;
}
A(const double (&temp)[N]) : A(temp, std::make_index_sequence<N>()){}
};

int main()
{
double t[] = {1.1, 2.2, 3.3};
A<sizeof(t)/sizeof(t[0])> a(t);
//A a(t); // C++17
}
2018/05/19(土) 00:10:45.61ID:WRHfxyyT0
糞面倒だな
2018/05/19(土) 00:15:37.45ID:VIvIbG0Fa
アンチパターンを生み出すための新機能が次々出てくるのがc++だ!
2018/05/19(土) 00:33:17.81ID:WRHfxyyT0
こういうのからiostreamみたいになってゆくんだろうな
2018/05/19(土) 03:41:10.01ID:BMt6S/TK0
つか引数にconst double(&temp)[]って何だと渡せるのこれ
()ないとエラー出るし
2018/05/19(土) 06:54:38.61ID:KlOWaW480
何も渡せないよ
配列数のない配列型はどんな文脈でも不完全型だからその型のオブジェクトは存在し得ない
2018/05/19(土) 07:39:54.12ID:03NPLOb40
>>842
VS2017 15.7.1のVCのReleaseモードだとtemplateの部分が赤の下波線になるな
Debugモードにするとなぜか消える
そしてReleaseモードはエラーが出ているのにコンパイルして実行可能
バグじゃね
2018/05/19(土) 12:37:22.83ID:WMhjioR90
>>847
仮引数として表れる場合はポインタに調整されるんじゃなかったっけ?
2018/05/19(土) 13:11:36.50ID:KlOWaW480
配列型はね
配列の参照型はされない
2018/05/21(月) 09:24:48.82ID:SHQ/MEmo0
引数で渡す場合は配列自体が参照型だもんな
2018/05/21(月) 21:45:00.90ID:SySmX4Pj0
配列への参照ってのはあるんだけどね
template <typename T, int N>
N size(T (&)[N]) { return N; }
2018/05/21(月) 21:45:22.62ID:SySmX4Pj0
あ、ミスった
わかる人笑ってw
2018/05/22(火) 10:34:44.57ID:QHYj3MXfM
>>848
> バグじゃね
未定義ならコンパイルできて実行できると言うのも規格に準拠してる正しい動作
2018/05/22(火) 17:07:12.03ID:CbgK21am0
>>854
見当違いのレスだな
DebugとReleaseでエディタの動作が首尾一貫してないって言ってるんだがな
15.7.2が来たから入れてみる
2018/05/22(火) 17:37:39.23ID:LzyusK+ZM
>>855
普通の知能を持ってたら
> コンパイルして実行可能
に突っ込まれてることぐらいわかるだろうに...
2018/05/23(水) 09:57:56.51ID:NT2O+rqe0
>>856
15.7.2にしたらReleaseでも赤い波線出なくなったぞ
エディタのバグが直ったようだ
2018/05/23(水) 10:14:09.85ID:2zsXYckB0
>>848の3行目は無かったことにすると
2018/05/23(水) 10:39:06.93ID:NT2O+rqe0
だから「エディタの」バグと書き忘れただけなのにお前らしつこいな
DebugモードでもReleaseモードでもコンパイルして実行できてたんだから
2018/05/23(水) 12:24:31.22ID:fJYH1ZEbM
書き忘れとか知らんがな w
そもそもエディタのバグと言うなら三行目は元々不要
余計なことを書いて突っ込まれるとか低能にありがちな行動ってだけ
2018/05/23(水) 12:33:07.54ID:8Hna4W5Ya
>>859
気にするな。俺には>>854の方がよほど的はずれなことを言ってると思うよ。
2018/05/23(水) 12:40:43.11ID:fJYH1ZEbM
>>861
>>856
同じようなレスを書いてループさせるのも低能にありがちな行動
2018/05/23(水) 13:02:27.39ID:nSCJSr52M
エラーの話なのになぜか未定義とか言い出す奴が
2018/05/23(水) 15:37:22.12ID:fJYH1ZEbM
未定義の意味を理解してないなら絡んでこない方がいいぞ
2018/05/23(水) 17:20:05.74ID:CpOh1zRO0
エラー
警告
未定義
不適格

混同するやつが後を絶たないな
866デフォルトの名無しさん (ワッチョイ 89fa-9WOx)
垢版 |
2018/05/23(水) 19:15:29.66ID:Au5e7VGg0
僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』

V9EWM
2018/05/23(水) 21:13:20.83ID:CpOh1zRO0
しょーもね
2018/05/23(水) 21:13:21.12ID:fJYH1ZEbM
この文脈でエラーとか警告とか言い出す時点でアホ丸出しなんだが...w
2018/05/23(水) 22:07:04.14ID:lbYCZF160
VisualStudioはインテリセンスとコンパイルに使うコンパイラが違う
ちょっと設定変えると、とてつもなくエラーが出るのにコンパイルは通るという事態は稀に良くある
2018/05/24(木) 12:25:45.78ID:hqF4m+XgM
>>838
>>771
2018/05/24(木) 23:58:30.63ID:XccjINB00
あるコンテナaとコンテナbを連結?するようなクラス(イテレータ)を作りたいんだが

イメージとしてはa.begin()からa.end()-1までいったら次はb.begin()になるようなやつを思い浮かべてるんだけど

どんな風につくればよいかアドバイスください
2018/05/25(金) 00:18:38.25ID:HgmGhgcw0
>>871
concat_iteratorでググるとそれっぽい実装がチラホラ
873デフォルトの名無しさん (バットンキン MM25-vADk)
垢版 |
2018/05/25(金) 10:18:09.43ID:SC+wi2VoM
C++で2Dのwindowsで動くゲーム作ろうと思っているのだけど、ライブラリって何使えばいいんだ?
2018/05/25(金) 10:18:58.21ID:AT66E0O7M
GDI
2018/05/25(金) 11:33:06.12ID:JXMMrzE70
direct2d
876デフォルトの名無しさん
垢版 |
2018/05/25(金) 12:11:02.95
Unity
2018/05/25(金) 12:19:23.12ID:lIIOH/4a0
Opengl
2018/05/25(金) 12:52:26.94ID:s00mTA6Oa
DirectX Tool Kit
2018/05/25(金) 14:11:55.60ID:7mkguDclM
cairo
880デフォルトの名無しさん (ワッチョイ 39a9-vADk)
垢版 |
2018/05/25(金) 18:33:18.15ID:vSqqKkie0
いっぱいあるなー、一通り試してみようかな
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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