5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

C++相談室 part99

1 :デフォルトの名無しさん:2013/02/21(木) 17:37:08.31
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレに
お願いします。

前スレ
C++相談室 part98
http://toro.2ch.net/test/read.cgi/tech/1347964922/

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

■長いソースを貼るときはここへ。■
 http://codepad.org/
 http://ideone.com/

146 :デフォルトの名無しさん:2013/02/27(水) 21:19:34.94
構造上特定のクラスに本質的に依存するクラスはそれを参照メンバとして取る事がある。
例で言うとboost::lock_guardとか。

147 :デフォルトの名無しさん:2013/02/27(水) 21:44:04.27
RAII 的なロック区間管理オブジェクトは、どちらかと言えばイディオムだけどな

148 :デフォルトの名無しさん:2013/02/27(水) 21:54:09.45
const_castでconstを外せるようにするのに参照にしないといけなかった

149 :デフォルトの名無しさん:2013/02/27(水) 22:12:05.10
>>148
なんだそりゃ?

150 :デフォルトの名無しさん:2013/02/27(水) 22:15:18.06
const intのメンバ変数をconst_castで書き換えようとしたら
const int&のメンバ変数じゃないと書き換えられなかった

151 :デフォルトの名無しさん:2013/02/27(水) 22:23:41.02
ttp://codepad.org/rYoD1PXJ
普通に書き換えられるけど…

152 :デフォルトの名無しさん:2013/02/27(水) 22:27:20.04
static const intだったわ
↑が書き換えられなくて、static const int&にした

153 :デフォルトの名無しさん:2013/02/28(木) 06:28:12.41
>>125
constの参照をメンバに持つこと自体がバカなんじゃないの

154 :デフォルトの名無しさん:2013/02/28(木) 06:40:45.67
153の続き:
const参照じゃなくても生ポインタでも同じ事だよね
呼ばれた側で参照/生ポインタを保持するようなアホなことはそもそも俺はしないなあ

>>131
最近忙しすぎて2ch除くヒマもないだけで遁走したわけじゃないよ
お前と一緒にするなよカス

155 :デフォルトの名無しさん:2013/02/28(木) 06:47:19.29
つまり>>125みたいなコードを書く奴は死んだ方がいいということ
「注意が必要」以前の問題

156 :デフォルトの名無しさん:2013/02/28(木) 08:39:17.67
>>150
コンパイル時定数をconst_castすんなよ

157 :デフォルトの名無しさん:2013/02/28(木) 09:00:24.10
>>150-152 それ未定義動作。

158 :デフォルトの名無しさん:2013/02/28(木) 09:54:31.29
>>153
constの参照を今知ったのがバレバレ
constの参照はコンストラクタで初期化しないとコンパイルエラーになる

>>154
お前Qだろ
無知なのがバレて逆切れすんなよ

>>155
連投か
よほど悔しそうだな
俺は「例え」のために書いただけで、パッと見てすぐにおかしいと分からない
時点でお前も同じ

159 :デフォルトの名無しさん:2013/02/28(木) 09:56:46.26
本来はconstの参照などメンバに持たず、単に参照をメンバに持つ
こうすればコピーしか初期化出来なくなるので正常動作するわけだ

160 :デフォルトの名無しさん:2013/02/28(木) 10:26:03.94
そんなバッドノウハウは忘れていいよ

161 :デフォルトの名無しさん:2013/02/28(木) 10:29:53.35
C++FAQに書いてあるんだが・・・

162 :デフォルトの名無しさん:2013/02/28(木) 10:53:28.22
VCとかじゃ通用しないテクニックだし
右辺値禁止したければオーバーロードをdeleteするのが正道なんだよなあ

163 :デフォルトの名無しさん:2013/02/28(木) 10:56:00.16
C++使いって基本アホだよな

164 :デフォルトの名無しさん:2013/02/28(木) 10:58:09.34
そうだよアホだよ

165 :デフォルトの名無しさん:2013/02/28(木) 11:02:29.68
なんだ、俺は例外中の例外の異端児だったのか

166 :デフォルトの名無しさん:2013/02/28(木) 11:11:19.32
ハンドルされていない例外が発生しました
人事部にお問い合わせください

167 :126:2013/02/28(木) 12:34:17.03
>>127
なるほど、
>C c(*s);
で生成されたオブジェクト '*s' は一時オブジェクト、コンストラクタのコールが終わると消えてC::printf() までは生きていないと。
http://toro.2ch.net/test/read.cgi/tech/1359924126/294 ではよくある返り値の一時オブジェクトが話題でしたが、今度は引数の一時オブジェクト例とは、感謝。

>なんだQか
どうしてそう思ったの?

168 :デフォルトの名無しさん:2013/02/28(木) 12:57:18.10
戻りの束縛は有用だけど、引数の束縛は何のメリットもないぞ。

169 :デフォルトの名無しさん:2013/02/28(木) 14:06:33.92
>>168
いいんだって
それより文法を正しく理解しているかどうかだ

170 :デフォルトの名無しさん:2013/02/28(木) 14:13:56.71
C++0xで追加されたrandomを使おうと思うのですが、
std::mt19937 myrand();
の()内に乱数の種を入れることはわかったのですが、
ここではsrand()のように、種を入れる初期化用関数は存在しないのでしょうか?
初期化用の処理にsrand()を入れていたので、どうしていいのか戸惑っています

171 :デフォルトの名無しさん:2013/02/28(木) 14:18:29.06
インスタンスごとに独立してない種なんか本当に欲しいか?

172 :デフォルトの名無しさん:2013/02/28(木) 14:21:31.69
myrand(初期化用の数値)

173 :デフォルトの名無しさん:2013/02/28(木) 14:53:54.98
>>158
なに言ってるんだ?
>constの参照はコンストラクタで初期化しないとコンパイルエラーになる
当たり前だカス。ドヤ顔でいうことじゃないだろ。
お前がド素人丸出しなんだよ。
それに何よQって?知らんよそんなもん

174 :デフォルトの名無しさん:2013/02/28(木) 15:43:53.57
◆QZaw55cn4c

175 :デフォルトの名無しさん:2013/02/28(木) 15:57:39.44
ようQ
顔真っ赤にしてファビョらなくてもいいぞ老害

176 :片山博文MZパンク ◆0lBZNi.Q7evd :2013/02/28(木) 20:19:56.19
class MyRand {
static unsigned m_seed;
std::mt19937 m_rand;
public:
MyRand() : m_rand(m_seed) {
}
...
};

unsigned MyRand::m_seed;

void MySRand(unsigned seed) {
MyRand::m_seed = seed;
}

177 :デフォルトの名無しさん:2013/02/28(木) 20:20:16.83
ム板もそうだが、マには精神壊れている奴が多いよな
そんな奴が就くからドカタ職業になるんだろうなと思う
いや、ドカタ職業だから精神壊れている奴ぐらいしか就かないのかも

178 :デフォルトの名無しさん:2013/02/28(木) 21:02:19.68
>>176
friend か public が必要だけどね。

179 :デフォルトの名無しさん:2013/02/28(木) 21:26:56.69
>>177
精神の壊れ方にもいろいろ種類があるけど、他人に迷惑を掛けない壊れ方(自己破壊的)と、
他人に迷惑を掛けまくり(他罰的)な壊れ方の二種類に大別出来る。

前者は統失・双極性障害・うつ病、後者は人格障害がほとんど。後者はアスペではないかと
思う人もいるかもしれないが、それは単にアスペが人格障害を伴っている場合が多いから。

180 :デフォルトの名無しさん:2013/02/28(木) 22:20:16.61
無駄な分類をするのも習い性だな

181 :170:2013/02/28(木) 23:19:28.02
>>171
いえそういうことではなく、乱数クラス内に種を渡す用のメンバ関数がないのかなと思ったのです

>>176>>178
ありがとうございます。しかしかえって使いにくくなっているような気がしますが…

皆さまありがとうございました、自己解決しました。
ttp://ideone.com/6QYWl1
例えばあるクラスで使う場合、コンストラクタで初期化をするのはどうすればいいのかと思っていたのですが、
このようにすればいいのですね。

182 :デフォルトの名無しさん:2013/02/28(木) 23:19:46.26
無駄な分類(クス

分類せずに人を見る事が可能だと思ってるのか?

プログラムで言えばソートアルゴリズムにいろいろあるようなもんだ

183 :デフォルトの名無しさん:2013/02/28(木) 23:24:56.87
>>181
解決したようだけど一応、種の再初期化をしたいってことならseedメンバ関数がある。

184 :デフォルトの名無しさん:2013/02/28(木) 23:35:49.16
なんだ、またいつもの粘着君かよ

185 :デフォルトの名無しさん:2013/02/28(木) 23:56:09.93
(クス

これは流行る

186 :170:2013/03/01(金) 01:29:46.12
>>183
あ、あるにはあるのですね。ありがとうございます。

187 :126:2013/03/01(金) 02:42:21.24
const 修飾子の有無によって、メモリイメージが変わるものなの?

188 :デフォルトの名無しさん:2013/03/01(金) 02:46:46.78
メモリイメージって何のこと言ってるのかな?

189 :126:2013/03/01(金) 03:16:18.13
>>188

>>127を例にとると
C::C(const std::string& s) : cs(s) {}
に対して C c(*s); としたときにスタック上に展開される *s の内容と
C::C(std::string& s) : cs(s) {}
に対してのそれとが異なるかどうか?

あるいは一般的に const をつけるかつけないかで、スタック上に展開される内容が異なるかどうか、気になるのです。

190 :デフォルトの名無しさん:2013/03/01(金) 04:15:14.40
変わらないよ
その場合constは魔法でも何でもない
ただ書き換えのエラーチェックがコンパイル時に為されるだけ

191 :デフォルトの名無しさん:2013/03/01(金) 04:16:09.94
実体は単なるポインターでしかないんだから

192 :デフォルトの名無しさん:2013/03/01(金) 08:01:03.66
>>189
気になるなら自分でアセンブリ吐かせて見ろよ。

193 :デフォルトの名無しさん:2013/03/01(金) 10:19:49.22
>>189
強いて言えばリファレンスをメンバに持たせるとそのメンバはコンストラクタで必ず初期化しないと
コンパイルが通らない位の違い

194 :デフォルトの名無しさん:2013/03/01(金) 20:25:00.31
レファレンスってポンタ渡ししてデリファレンスを自動でやるぽ機能だろ
ho(T&& ge)の場合、引数にはポンタ以外何か渡しているのか

195 :126:2013/03/01(金) 21:49:39.03
>>191
http://toro.2ch.net/test/read.cgi/tech/1354116880/806 でそう書いたらぼろくそだった‥‥

196 :デフォルトの名無しさん:2013/03/01(金) 23:32:58.04
>>195
そこであなたが言ってることはほとんど正しいと思うけどね
ボロクソ言ってる奴は何も考えていないシッタカ素人としか思えない
参照がポインタconstの糖衣構文とは言い切れないのって
const参照による一時オブジェクト束縛くらいじゃないの?

そうじゃないって言うなら、そうじゃない例を挙げて欲しいものだよ

197 :デフォルトの名無しさん:2013/03/01(金) 23:46:01.85
配列の扱いがまず違う。

198 :デフォルトの名無しさん:2013/03/02(土) 00:30:45.10
ポインタと参照は概念が違うのに、実装が同じという理由だけで故意か低脳なのか
混同している輩には呆れる

199 :デフォルトの名無しさん:2013/03/02(土) 00:48:26.96
また社会的に弱いのがわいてきたな

200 :デフォルトの名無しさん:2013/03/02(土) 01:00:10.53
概念ガー

201 :デフォルトの名無しさん:2013/03/02(土) 01:32:42.82
無能な味方とか蛇足でスレが縞模様になるのは避け様の無い現実。

202 :デフォルトの名無しさん:2013/03/02(土) 02:50:34.74
>>198
混同している、とはどういう意味?今現在混同している事例が進行中なの?

203 :デフォルトの名無しさん:2013/03/02(土) 03:00:58.98
>>202
その前にお前は敵なのか味方なのかそれをはっきりさせろ

204 :デフォルトの名無しさん:2013/03/02(土) 03:02:24.29
敵(笑)味方(笑)
無能の言うことはいつもこれ

205 :デフォルトの名無しさん:2013/03/02(土) 09:35:00.44
自己顕示が目的だからな

206 :デフォルトの名無しさん:2013/03/02(土) 10:10:30.20
このスレで餌付けに成功しただけ

207 :デフォルトの名無しさん:2013/03/02(土) 11:45:49.73
今日もQzは炎上学習法の実践中

208 :デフォルトの名無しさん:2013/03/02(土) 12:26:11.80
餌付けされたのは金魚の糞のほうであって金魚は昔からいたというか人気に嫉妬

209 :デフォルトの名無しさん:2013/03/02(土) 13:22:24.76
低能ってホント女の腐ったような発想しかしないんだな

210 :デフォルトの名無しさん:2013/03/02(土) 13:58:05.02
c系スレは雑談、罵倒がたくさんないとつまらんよな
APIスレみたいになると楽しいよな

211 :デフォルトの名無しさん:2013/03/02(土) 16:14:45.45
wcsncpy_sについて教えてください。
今、次のようなコードがあるとします。

wchar_t * src = L"aabbcc";
wchar_t dest[3];
size_t lenToCpy = 2;
wcsncpy_s(dest, 3 * sizeof(wchar_t), src, lenToCpy);
dest[6] = L'\0';

"aa"だけコピーしたいんですけど。
使い方はこれであってますか?

なんか、wcsncpy_sでsrcの長さ(この場合6文字xsizeof(wchar_t) = 12バイト)だけdestが0xfeで埋められてから
len文字分だけコピーされているように見えます。@VS2008

なのでdestでヒープが壊れるってデバッグ終了時に言われるんですが。。
(この例ではdestはローカルだけど、実際にやってるコードだとヒープです。)

212 :デフォルトの名無しさん:2013/03/02(土) 16:19:47.41
>>211
>dest[6] = L'\0';
ダメ

213 :デフォルトの名無しさん:2013/03/02(土) 16:21:10.46
>>212
あ、すみません。。
そこは2chに書くときに治し忘れてました。。dest[2]=L'\0'って読み替えてください。。
本当に申し訳ない。

214 :デフォルトの名無しさん:2013/03/02(土) 16:24:00.68
>これらの関数のデバッグ バージョンは、最初に 0xFE のバッファーに格納します。
>この動作を無効にするには、_CrtSetDebugFillThreshold を使用します。

正常動作ですが何か

215 :デフォルトの名無しさん:2013/03/02(土) 16:45:35.26
>>214
え?
FEで埋めるのはいいんですが、与えられたバッファサイズを超えて埋めるのってどうなんですか?

なんか追っかけていくと最後に_FILL_STRING(_DEST, _SIZE, _SIZE - available + 1);
って処理があって、これがバッファをバーンと壊してますね。
その直前まではいい感じなのに。

216 :デフォルトの名無しさん:2013/03/02(土) 16:45:35.54
第2引数はバイト数じゃなくて文字数だろ。
マニュアルちゃんと読めよ

217 :デフォルトの名無しさん:2013/03/02(土) 16:46:40.72
wcsncpy_s の第二、第四引数はバイト数じゃなくて要素数
3 * sizeof(wchar_t) の * sizeof(wchar_t) が要らない

218 :デフォルトの名無しさん:2013/03/02(土) 16:46:55.73
そもそも”3 * sizeof(wchar_t)”これ要らん
配列ならテンプレートが勝手に要素数埋めてくれる

219 :デフォルトの名無しさん:2013/03/02(土) 16:47:48.62
>>216
ありがとうございます!
やっぱり使い方が間違っていたんですね。
スレ汚しすみませんでした

220 :デフォルトの名無しさん:2013/03/02(土) 16:58:21.75
何気に0xFDで埋めると書いてあるままになってるマニュアルが(2005までは0xFD、2008からは0xFE)

221 :デフォルトの名無しさん:2013/03/03(日) 09:07:14.32
ヘッダファイルでincludeしたくないヘッダがあるんだけど、
template使ったらヘッダでincludeしなきゃならなくなる。
template使わない方がいいのかな?

222 :デフォルトの名無しさん:2013/03/03(日) 09:10:02.15
>>221
それもテンプレートにすりゃいいじゃん

223 :デフォルトの名無しさん:2013/03/03(日) 09:20:01.48
どういうこと?

例を出すと、Windows.hをヘッダでインクルードしないぞと決めていて、
template使ってしまうと、実装部分にSleep関数あるから困るみたいな感じ。

224 :デフォルトの名無しさん:2013/03/03(日) 09:23:12.51
template<class F>
void func(int a, F f) { f(a); }
で使う側で func(10, Sleep); としてやればいい

225 :デフォルトの名無しさん:2013/03/03(日) 09:46:52.12
なるほど
関数渡してやればいいわけですか
ありがとうございました
あとは自分の中で保守性とか考えてどうするか決めたいと思います

226 :デフォルトの名無しさん:2013/03/03(日) 13:18:41.66
薄いテンプレートを挟むのも良い

227 :デフォルトの名無しさん:2013/03/03(日) 23:29:17.69
>>222, >>226
俺質問者じゃないけど、興味あるから具体的にどうするか教えて

228 :デフォルトの名無しさん:2013/03/03(日) 23:48:08.45
template<void(&F)(DWORD)>void func(DOWRD a,F f=Sleep){f(a);}

229 :デフォルトの名無しさん:2013/03/03(日) 23:49:28.26
template<void(&F)(DOWRD)=Sleep>void func(DOWRD a){F(a);}

230 :デフォルトの名無しさん:2013/03/04(月) 00:11:32.68
>>229
それじゃ汎用性なさ杉
Sleepが一つならともかく、引数型・数や返値が違うapiを使うたびに書くようじゃ
おいおいじゃないか

231 :デフォルトの名無しさん:2013/03/04(月) 00:16:13.93
非テンプレートの基底クラスで実装して
それを継承するのが定石じゃね?

232 :デフォルトの名無しさん:2013/03/04(月) 02:23:19.72
template<class F, class... Args>
auto func(F f, Args... args) -> decltype(f(args...))
{ return f(args...); }

233 :デフォルトの名無しさん:2013/03/04(月) 03:17:04.21
>>211
String.copyValueOf(char[] data)使いなよ

234 :デフォルトの名無しさん:2013/03/04(月) 03:22:25.60
>>233
スレタイ見ろよ

235 :デフォルトの名無しさん:2013/03/04(月) 03:25:27.52
どの??

236 :デフォルトの名無しさん:2013/03/04(月) 03:27:25.04
C++って書いてるのが見えないのか

237 :デフォルトの名無しさん:2013/03/04(月) 03:33:28.25
??

238 :デフォルトの名無しさん:2013/03/04(月) 03:36:24.64
今気づいた。。。

    ∧_∧
     ( ・ω・ )   何も思い残すことはない
     (====)    ボコボコにされてやんよ
  ______( ⌒) )
/\   ̄`J ̄ ̄ ̄\
 ̄ ̄ ̄ ̄| | ̄ ̄ ̄ ̄
        | |
      / \

239 :デフォルトの名無しさん:2013/03/04(月) 03:37:47.11
>>233
Javaのメソッド紹介してどうする?

240 :デフォルトの名無しさん:2013/03/04(月) 03:44:51.16
どういう勘違いだw

241 :デフォルトの名無しさん:2013/03/04(月) 20:57:34.98
>>227
亀ですまんな
薄いテンプレートは型を動的に判定する処理を書いて、テンプレートでラップする事によって型安全性を確保するもの
ttp://ideone.com/l2aW9M
他にも、特定のコンセプトを満たす型を消去したい場合はBoost.TypeErasureが使える
Boost使ってないけどおおよそ以下の感じになる
ttp://ideone.com/l2aW9M
他にもBoost.Variant(Any)など何らかの方法で型を消去してやれば処理の隠蔽が実現できる

242 :デフォルトの名無しさん:2013/03/04(月) 23:07:21.04
すんません、VC++使わないでDXライブラリ使う方法教えてくださいな
winでcygwin使ってます

243 :デフォルトの名無しさん:2013/03/04(月) 23:09:12.31
http://homepage2.nifty.com/natupaji/DxLib/dxuse.html

244 :デフォルトの名無しさん:2013/03/04(月) 23:09:59.23
dllのがあるから探せば?

245 :デフォルトの名無しさん:2013/03/04(月) 23:44:22.91
訂正
総合開発環境使わないでDXライブラリ使う方法を教えてください

246 :デフォルトの名無しさん:2013/03/04(月) 23:50:07.99
適切なディレクトリに置く
コード書く
コンパイルする
リンクする

192 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.02 2018/11/22 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)