C++相談室 part126 [無断転載禁止]©5ch.io
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2016/08/13(土) 11:24:45.65ID:NPYsKJkE!extend:on:vvvvv:1000:512
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレに
お願いします。
前スレ
C++相談室 part125
http://echo.2ch.net/test/read.cgi/tech/1463761261/
このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.99【環境依存OK】
http://echo.2ch.net/test/read.cgi/tech/1469177649/
■長いソースを貼るときはここへ。■
http://codepad.org/
http://ideone.com/
[C++ FAQ]
https://isocpp.org/wiki/faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
0652デフォルトの名無しさん
2016/09/09(金) 16:15:29.42ID:iGJJBn3T0653デフォルトの名無しさん
2016/09/09(金) 18:00:44.85ID:6P7ccOtXそんなのあったっけ?
0654デフォルトの名無しさん
2016/09/09(金) 18:52:54.42ID:Sz+zzzeN参照
0655デフォルトの名無しさん
2016/09/09(金) 19:28:06.08ID:xbXKfh8v頭の悪さに恐れ入る
0656デフォルトの名無しさん
2016/09/09(金) 19:54:51.32ID:2SLUNITP目の悪さに恐れ入る
0657デフォルトの名無しさん
2016/09/09(金) 20:18:37.35ID:Sz+zzzeNビルトイン型って知らないけど Fundamental Types のことを言ってる?
0658デフォルトの名無しさん
2016/09/09(金) 20:24:24.90ID:G0RBn0paoeratorsが必ずついてくるな
そりゃ悪かった
class宣言せずに使える型、そう言いたかっただけだ
0659デフォルトの名無しさん
2016/09/09(金) 21:49:08.07ID:Hwi6cA5k0660デフォルトの名無しさん
2016/09/10(土) 13:58:51.44ID:qsgFq9Gu0661デフォルトの名無しさん
2016/09/10(土) 14:05:38.05ID:fEVz11VcプログラムAに対してjavascriptで使用する関数を指定してってのをやりたいけどできるのかな
プログラムAはただjavascriptを指定するだけと結果出力
javascriptはどの関数をどんな引数で実行するかを指定する
スクリプトってのをよく理解してないからアドバイスほしい
0662デフォルトの名無しさん
2016/09/10(土) 14:15:01.34ID:TwDosbdAソイツはバカ
0663デフォルトの名無しさん
2016/09/10(土) 14:26:38.33ID:pUoIS14dfstreamをstringに依存させないために
C++98ではopenの引数がconst char*だが
C++11ではstringを渡せるようになったので
fs.open((string(
0664デフォルトの名無しさん
2016/09/10(土) 14:27:46.41ID:pUoIS14dfs.open( string("filename") + ".ext , ios_base::in)で
済むようになり結構便利だね
stdの作者じゃない一般ユーザな俺らにとって、
std同士での相互依存は別に構わんのに無駄に不便だったのがC++98
独善的な「正しさ」を誰も喜ばない例だと思うぜ
0665デフォルトの名無しさん
2016/09/10(土) 14:28:54.01ID:pUoIS14d0666デフォルトの名無しさん
2016/09/10(土) 20:03:47.79ID:fxMjDbn40667デフォルトの名無しさん
2016/09/10(土) 20:40:19.15ID:LBKbagU5{
kOne = 1,
kTwo,
kN
}e;
const int n[kN]={0,100,200};
template <int N> class A
{
public:
int a[N];
};
int main()
{
A<n[kOne]> a;
return 0;
}
こんな感じのやりたんだけどnが非constだって怒られる
なにか代案ありません?
0668デフォルトの名無しさん
2016/09/10(土) 20:45:26.68ID:QhorBMPIconstexpr int n[kN]={0,100,200};
0669667
2016/09/10(土) 20:51:12.77ID:fvQgZoM40670デフォルトの名無しさん
2016/09/10(土) 20:57:30.16ID:QhorBMPItemplate<int N> struct constant { static const int value = N; };
template<int N> struct n;
template<> struct n<kOne> : constant<100> {};
template<> struct n<kTwo> : constant<200> {};
A<n<kOne>::value> a;
0672デフォルトの名無しさん
2016/09/10(土) 23:13:18.30ID:LzJTocysそれはその言葉の真意を理解すれば正しくもあり正しくもなし
0673デフォルトの名無しさん
2016/09/11(日) 00:28:13.04ID:bDOLl/8Eメンバ変数で持ってるものだったらconst char*で返せるけど
関数内でジェネレートした文字列だったらどうするんだ?
0674デフォルトの名無しさん
2016/09/11(日) 00:32:24.15ID:bDOLl/8E↑こんなインターフェースもあり得るけど
呼び出すときに一体バッファサイズをどのぐらい用意すれば良いんだ?
という問題が出る
関数内でmallocして返す方法もあるけど
呼び出しもとで開放しなきゃならないから嫌だ
std::string使いましょうよ
0675デフォルトの名無しさん
2016/09/11(日) 00:44:49.84ID:T7xxiiqM0676デフォルトの名無しさん
2016/09/11(日) 01:12:15.86ID:NvSd/4YA分からないくせに、ひたすらコピペを繰り返す
突っ込んだ話を始めると、チンプンカンプンで付いて来れなくなる
0677デフォルトの名無しさん
2016/09/11(日) 01:30:52.05ID:Y3qTK8mcせっせと返値を書き込んでるのでクラスを返値にしたところでcopyとか余計なことはしないな。
0678デフォルトの名無しさん
2016/09/11(日) 06:19:48.63ID:Cz5G8II80679デフォルトの名無しさん
2016/09/11(日) 08:52:00.54ID:uFO7Kr120680デフォルトの名無しさん
2016/09/11(日) 10:11:38.91ID:5FDuUIWg0681デフォルトの名無しさん
2016/09/11(日) 13:09:13.01ID:QVUfpLVGtemplate<typename T> void hoge(T val)
{
val.hage(0);
}
template<typename T> void hoge(T val)
{
val.husa(100);
}
0682デフォルトの名無しさん
2016/09/11(日) 13:55:18.24ID:KOEkGnWi0683デフォルトの名無しさん
2016/09/11(日) 14:53:31.90ID:h0ayt47Mどこかに書いてありますか?
0684デフォルトの名無しさん
2016/09/11(日) 15:31:44.83ID:9/O5tJ2a0685デフォルトの名無しさん
2016/09/11(日) 15:50:46.32ID:hGR6Mbrehttps://msdn.microsoft.com/ja-jp/library/7t5yh4fd.aspx
0686デフォルトの名無しさん
2016/09/11(日) 22:14:42.57ID:OIs9p1U8これはさ、max_bufferで指定した範囲で対応出来るようにするための引数だろ
呼び出す側でintの範囲なら自由に決められるに決まってるだろ
0687デフォルトの名無しさん
2016/09/11(日) 22:19:35.02ID:m0F7Ld2f0688デフォルトの名無しさん
2016/09/11(日) 22:20:45.93ID:OIs9p1U80689デフォルトの名無しさん
2016/09/11(日) 22:25:57.81ID:2EFm3ZKdchar b[128];
func(&b[16],128-16);
ってやって、特定の範囲で処理できるのも利点だろうといってるんだと。
あんまりやらないけど。
0690デフォルトの名無しさん
2016/09/11(日) 22:34:43.72ID:T7xxiiqM0691デフォルトの名無しさん
2016/09/11(日) 22:37:36.83ID:2EFm3ZKd0692デフォルトの名無しさん
2016/09/11(日) 22:38:54.98ID:m0F7Ld2f超能力者>>689のオツムが心配だ
0693デフォルトの名無しさん
2016/09/11(日) 22:40:38.21ID:2EFm3ZKd0694デフォルトの名無しさん
2016/09/11(日) 22:43:30.84ID:m0F7Ld2f>>689の解釈は
『max_bufferで指定した範囲』
『intの範囲なら自由に』
という表現と整合しない。
0695デフォルトの名無しさん
2016/09/11(日) 22:45:10.47ID:2EFm3ZKd0696デフォルトの名無しさん
2016/09/11(日) 22:46:59.51ID:m0F7Ld2f>>688は「intの最大」でなく「outputの最大」と言っているのだが
0697デフォルトの名無しさん
2016/09/11(日) 22:48:58.46ID:2EFm3ZKd俺が懇意すぎたかな・・・。Orz
0698デフォルトの名無しさん
2016/09/11(日) 22:51:16.46ID:m0F7Ld2f単に>>674を見て並んでいた単語に連想した自分の知識を反射的に書き込んだだけ
0699デフォルトの名無しさん
2016/09/11(日) 22:54:31.75ID:2EFm3ZKd俺はC++ではstd::まで書くStl派なので、このところ生配列は使ったことがない。
というか、オーバーフロー怖くて使いたくない。
0700デフォルトの名無しさん
2016/09/11(日) 23:01:21.72ID:67F7MmNhインターフェースにstlのコンテナとかを露出したらコンパイラ依存になっちゃうじゃん
てか高速に処理したくてスタックに配列を積みたいときとかどうするわけ?
0701デフォルトの名無しさん
2016/09/11(日) 23:04:52.03ID:2EFm3ZKdまぁ、しばらく黙るわ。
0702デフォルトの名無しさん
2016/09/11(日) 23:09:47.79ID:OIs9p1U8void func( char *output, int max_buffer )
のようにchar *outputを渡すような時は、
バッファオーバーフローを防ぐために一緒にサイズも渡すってのが、
C言語での使い方では常識化してるって事だ。
0703デフォルトの名無しさん
2016/09/11(日) 23:12:11.14ID:m0F7Ld2fそんなことはみんな知ってるから
0704デフォルトの名無しさん
2016/09/11(日) 23:14:19.23ID:OIs9p1U80705デフォルトの名無しさん
2016/09/11(日) 23:17:06.20ID:67F7MmNhアルゴリズムとかはそのまま使えるけどコンテナは普通生配列か必要に応じて自前の使うだろ?
0706デフォルトの名無しさん
2016/09/11(日) 23:19:39.01ID:2EFm3ZKd最近ではリングバッファほしい位で満足してるよ。
STLコンテナで解けないなら、アルゴリズムが悪い事が多い。
0707デフォルトの名無しさん
2016/09/11(日) 23:20:05.58ID:m0F7Ld2f>674の懸念は別に変じゃないぞ
変なのは>>674を理解できなかったお前だ
0708デフォルトの名無しさん
2016/09/11(日) 23:20:10.89ID:T7xxiiqM規格準拠度が低いクソみたいなコンパイラを使わない
0709デフォルトの名無しさん
2016/09/11(日) 23:22:00.72ID:m0F7Ld2f>>700も関係無いことを言いだして
0710デフォルトの名無しさん
2016/09/11(日) 23:22:32.77ID:m0F7Ld2f正 700と
0711デフォルトの名無しさん
2016/09/11(日) 23:23:32.91ID:OIs9p1U8いやいや、おかしいよ。
void func( char *output, int max_buffer )
を使うのにバッファを意識しないプログラムとかありえないだろ
バッファがどのくらいか分からんのに
void func( char *output, int max_buffer )
とか間違ってるだろ。
これCの使い方だぞ
0712デフォルトの名無しさん
2016/09/11(日) 23:28:22.83ID:T7xxiiqM競プロなんていうマイナー分野の話なんかしてないし
実行時間のほとんどはアルゴリズム依存なんだから1%未満のオーバーヘッドが影響するわけが無い
固定長配列はarrayを使うべきだし、動的にサイズを変えないといけない場合vectorでまとめて確保して普通のnewした配列として使えばいい
他人の競プロのコード見たら使いまくってるしな
0713デフォルトの名無しさん
2016/09/11(日) 23:39:10.29ID:m0F7Ld2fよくわかった
>>674の『バッファサイズをどのぐらい用意すれば良いんだ?という問題が出る』
を単語レベルに近い連想で文を捉えるから珍妙な解釈になる
レスを100回読み直せ
0714デフォルトの名無しさん
2016/09/11(日) 23:46:15.15ID:M5lO5IQCこのスレで一番出来ない子が何をいっちょまえにレスしてんだか…。
なぁーにが「競プロ解いてるだけ」だよド素人が。
0715デフォルトの名無しさん
2016/09/11(日) 23:48:48.59ID:OIs9p1U8だからよ、
>バッファサイズをどのぐらい用意すれば良いんだ?という問題が出る
って言うような疑問がおかしいんであって、
void func( char *output, int max_buffer)
はサイズを指定して使うもんだ。それ以外にあるかよ。
パターンもパターンやんけ。
バッファサイズがわからん状態で、、
void func( char *output, int max_buffer)ってのはあり得ないんだよ
0716デフォルトの名無しさん
2016/09/11(日) 23:49:06.36ID:2EFm3ZKdはっはー。おだいじんさまぁ〜。
0717デフォルトの名無しさん
2016/09/11(日) 23:54:09.86ID:IuKZJB78別の関数で必要なサイズを返すのか?
変更が別スレッドだったら、さらにロック、アンロックの関数がそれぞれ必要になるな。
0718デフォルトの名無しさん
2016/09/12(月) 00:00:05.72ID:JmiC7f4kその関数voidだから失敗したかどうかわからんから、バッファ入力サイズを推定できない。
ドキュメント読め。
0719デフォルトの名無しさん
2016/09/12(月) 00:03:56.69ID:JmiC7f4k0720デフォルトの名無しさん
2016/09/12(月) 00:04:01.94ID:GwVwE6OLvoid func( char *output, int max_buffer)
ってのは
char *output に結果を返すんだよ。
そんなのもわからんのか。
max_bufferはオーバーフローを防ぐための物だ。
何を言ってんだ一体
0721デフォルトの名無しさん
2016/09/12(月) 00:04:29.54ID:hz43BbCS初心者なのかレガシープログラマなのか
0722デフォルトの名無しさん
2016/09/12(月) 00:04:37.05ID:Tu0jZEI4その部分の日本語の理解が間違っているとわざわざ教えてやっているのに
他にどういう理解があり得るのかも考えずゴミレスを繰り返すとは
アスペなだけでなくて荒らしのつもりなのか?
0723デフォルトの名無しさん
2016/09/12(月) 00:05:58.76ID:JmiC7f4kそんなちゃんぽん仕様にしなくても戻り値一個設定すれば済む話じゃないか。
汚いと思う。
0724デフォルトの名無しさん
2016/09/12(月) 00:07:03.07ID:GwVwE6OL基本中の基本だろ。
0725デフォルトの名無しさん
2016/09/12(月) 00:08:06.86ID:JmiC7f4kまぁいいや。
黙るって言ったから黙る。
0726デフォルトの名無しさん
2016/09/12(月) 00:08:07.10ID:WISOHly2>>720
そんなちゃんぽん仕様にしなくても戻り値一個設定すれば済む話じゃないか。
汚いと思う。
0727デフォルトの名無しさん
2016/09/12(月) 00:09:36.24ID:Tu0jZEI4Visual C++の_s関数の配列オーバーロードはそんな仕様だった気もするが
0728デフォルトの名無しさん
2016/09/12(月) 00:09:38.22ID:WIrRwO5Ghttps://msdn.microsoft.com/ja-jp/library/cc429127.aspx
バッファサイズを指定できても、結果を正しく格納するのに必要なバッファサイズはわからない
ってことはあるんだよ。
0729デフォルトの名無しさん
2016/09/12(月) 00:11:17.09ID:GwVwE6OLこれはさ、max_buffer以内で絶対に納めるって前提があるんだよ。
その為のmax_bufferだぞ。
max_bufferの指定が間違ったらエラーなんだよ。
他にどういう使い方あるんだよ
0730デフォルトの名無しさん
2016/09/12(月) 00:11:25.69ID:XcxNhSoLマクロでパスの最大規定されてる
0731デフォルトの名無しさん
2016/09/12(月) 00:13:42.09ID:GwVwE6OLchar *outputのサイズがmax_buffeなんだよ
char *outputがオーバーフローしないように、max_bufferを上限に処理をして、
char *outputで返せばオーバーフローしないって仕組みなんだよ。
0732デフォルトの名無しさん
2016/09/12(月) 00:14:04.49ID:Tu0jZEI4これはホンモノだ
0733デフォルトの名無しさん
2016/09/12(月) 00:18:26.76ID:GwVwE6OL何ひとつ自分で説明してないだろ。
0734デフォルトの名無しさん
2016/09/12(月) 00:21:57.49ID:U6Ajls88老害プログラマによくいる切り捨てられても気にしない、切り捨てによって発生したバグが確認されて初めてバッファーサイズをプログラム内の定数値で変更する人なんでしょ。
C++使ってるなら正しく処理する為には多大な面倒が発生する手法なんて使うなって事なんだけど老害にはそれが理解出来ないらしい。
0735デフォルトの名無しさん
2016/09/12(月) 00:22:27.92ID:/3fOrQXc逆にmax_bufferが効果を発揮する状況というのは
結果を正しく格納するのに必要なバッファサイズがmax_bufferを越える時だ
従って>>731の最初の行は間違っている
0736デフォルトの名無しさん
2016/09/12(月) 00:23:39.94ID:XcxNhSoL728の例だと別の場所で最大値は決まってる
でもバッファサイズ3とか小さすぎると欲しい情報は帰ってこない
当然オーバーフローはしないけど
0737デフォルトの名無しさん
2016/09/12(月) 00:27:04.07ID:feiUf+9BCやってる人はコップでプールの水をすくうとき
コップがバッファだ
コップの大きさで回数を重ねてすくう
コップを最大まで大きくしなきゃいけないとか
必要なコップサイズは、などとは考えない
それがバッファ
0738デフォルトの名無しさん
2016/09/12(月) 00:28:34.40ID:Tu0jZEI4文脈を理解できない低能は去れ
>>733
健常者なら『レスを100回読み直せ』で理解できると思ったので敢えて説明しなかった失礼
では説明してやろう
<呼び出し側>
vector<char> result(★);
func ( &result[0], result.size() );
>>674はこの★をどう決定するかが
呼び出し側コードを書く者の負担になると言っている
0739デフォルトの名無しさん
2016/09/12(月) 00:28:41.75ID:GwVwE6OLvoid func( char *output, int max_buffer)
を使おうとすれば、Cのバッファを意識する使い方以外に無いだろ。
それをストリングクラスの代わりに
void func( char *output, int max_buffer) を使う手ももあるが、
バッファのサイズをどうするかが問題、とか言ってるから、
そういう使い方はしないし間違ってるって言ってんだろがよ
0740デフォルトの名無しさん
2016/09/12(月) 00:30:38.58ID:GwVwE6OLこれはよ、char *outputのサイズを意識しない限り、動かせないプログラムだよ
このサイズが分からない時に、
void func( char *output, int max_buffer) を使うってのは無いんだよ
それをあるって言うから、無いって言ってんだよ 👀
Rock54: Caution(BBR-MD5:0be15ced7fbdb9fdb4d0ce1929c1b82f)
0741デフォルトの名無しさん
2016/09/12(月) 00:35:45.75ID:XBLhc0H+一旦これだけは言っておくが
おまいの言っていることは正常でしかもごくあたりまえのこと
おそらくその点を繰り返す必要はもうないし
そのことはみんな分かってる
読み込む前にサイズ分からないものがあるよね?
そのときは固定サイズじゃ読み込めないよね、
的なことをおまいの相手は繰り返し言ってるんじゃないか?
配列に対するベクタの利点みたいな部分を言いたがってる気がする
0742デフォルトの名無しさん
2016/09/12(月) 00:40:53.14ID:XcxNhSoLその関数だけじゃ必要なサイズがわからんというお話
パスが欲しいのにバッファ小さすぎてドライブレターだけ返ってきても意味無いわけで
0743デフォルトの名無しさん
2016/09/12(月) 00:43:58.37ID:GwVwE6OLを使う前にはサイズを把握してないと駄目ってだけだよ。
それが把握できんのにこういうCライクな使い方は間違ってるって俺は言ってるだけだよ
0744デフォルトの名無しさん
2016/09/12(月) 00:47:09.50ID:hz43BbCS0745デフォルトの名無しさん
2016/09/12(月) 00:47:23.61ID:U6Ajls88格納サイズを把握してたらmax_bufferなんて要らなくね?
0746デフォルトの名無しさん
2016/09/12(月) 00:51:26.47ID:GwVwE6OLいやオーバーフロー対策の最大値だから
引数で明示的にサイズを渡しましょうって取り決めだ
0747デフォルトの名無しさん
2016/09/12(月) 01:02:10.22ID:Tu0jZEI4>>674とほぼ同じに思えてならない
0748デフォルトの名無しさん
2016/09/12(月) 01:10:30.26ID:hz43BbCS0749デフォルトの名無しさん
2016/09/12(月) 01:13:36.21ID:WIrRwO5G>728 で挙げた MSDN のページにそんな規定は見当たらないんだけど、どこ見て言ってるの?
MAX_PATH の類のことを言ってるなら、よくある勘違いだろうと思うんだ。
https://www.google.com/search?q=GetModuleFileName+MAX_PATH
http://d.hatena.ne.jp/satosystems/20100807/1281152224
0750デフォルトの名無しさん
2016/09/12(月) 06:52:52.36ID:y21Asc3iサイズ取得せずにリトライするのもダメ臭が
0751デフォルトの名無しさん
2016/09/12(月) 08:08:53.69ID:46mLPt5D調べる機能が規格に無いstd::mbstowcsはクソ
■ このスレッドは過去ログ倉庫に格納されています