トップページ⇒tech
1001コメント271KB

【初心者歓迎】C/C++室 Ver.91【環境依存OK】

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん2014/05/18(日) 15:33:57.11ID:IT3mOY35
エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。
※sage禁止です(と代々スレに書いてありますが自己判断で)。

◆ソースのインデントについて
半角空白やTABでのインデントはスレに貼ると無くなります。
そのため、アップローダーに上げるのも手ですが直接貼る場合は、
全角空白か に置換すると見栄えだけはよくなります。
【初心者歓迎】C/C++室 Ver.90【環境依存OK】
http://toro.2ch.net/test/read.cgi/tech/1395675954/

【アップローダー】(質問が長い時はココ使うと便利)
http://codepad.org/ (コンパイルもできるし出力結果も得られる[]privateをチェック)
http://ideone.com/ (時間帯によってはcodepadが重い事があるのでここも利用)

hogeは禁止します、使用しないでください。
万が一hogeが書き込まれても、スルーしてください。
相手にするとあなたも荒らしと同じ扱いになります。
なお、hogeはNGワードに追加しておくことが強く推奨されています。
0002デフォルトの名無しさん2014/05/18(日) 15:36:26.38ID:IT3mOY35
----テンプレここまで-----

↓いつものホゲボット出現に注意してね
0003デフォルトの名無しさん2014/05/19(月) 22:12:23.53ID:8TpwFkzG
>>1乙乙
0004デフォルトの名無しさん2014/05/21(水) 00:49:19.55ID:7hPk5/6F
>>1乙乙乙
0005デフォルトの名無しさん2014/05/21(水) 01:12:34.29ID:zsbHBSNK
毎回思うんだけど、hogeをNGワードに設定したら>>1も見えなくなるだろ?
どうしてもhoge禁止って書きたいなら>>2へ書けや!
0006デフォルトの名無しさん2014/05/21(水) 01:33:36.62ID:g8mAFBUR
>>5
俺もそれ思ったけど、そもそも>>1が荒らしなワケで追及は野暮かなと思ってる
0007デフォルトの名無しさん2014/05/21(水) 11:15:20.32ID:t9OqPpuo
>>1
チョーセン人のチョーセン脳のチョーセンルールをテンプレにいれてるお前はチョーセン人か?
死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。
0008デフォルトの名無しさん2014/05/21(水) 11:52:36.29ID:fwt+X/Hj
P p;
クラスPが定義されてます。
pのハッシュを計算するとき
int a=hash((int *)&p , p.p.size());
みたいなことはできますか?
0009デフォルトの名無しさん2014/05/21(水) 11:59:00.32ID:8iD7h9lx
できない
0010デフォルトの名無しさん2014/05/21(水) 12:01:37.73ID:fwt+X/Hj
なんで?
0011デフォルトの名無しさん2014/05/21(水) 12:06:32.55ID:8iD7h9lx
int*からどうやってp.pのインスタンスを触る気だ
0012デフォルトの名無しさん2014/05/21(水) 12:09:30.56ID:fwt+X/Hj
pをint配列にキャストしてハッシュを計算するだけなんですけど。
0013デフォルトの名無しさん2014/05/21(水) 12:14:51.01ID:nGNzK1pa
p.p.size() = sizeof(P) なのか
p のハッシュって 環境依存だろうけど vtable も込みでとっちゃうのか
わっかんね
0014デフォルトの名無しさん2014/05/21(水) 14:32:05.31ID:pXfK4nWY
パディングの問題もある
0015デフォルトの名無しさん2014/05/21(水) 15:32:27.38ID:nGNzK1pa
p.p.size() が身勝手な数字を返すとしても
常に p.p.size() <= sizeof(P) ならば、ハッシュ値を求めることは出来る
が、求まった値が役立つ数字になるかは、用途によるだろうな

# p.p.size() > sizeof(P) は p の器の大きさを突破するので論外
0016デフォルトの名無しさん2014/05/21(水) 17:06:30.68ID:mq1dIck6
クラスのオブジェクトのメモリにバイナリでアクセスして
マトモな結果が得られるという思想がクレイジー。
あと任意のバイナリデータをintとして解釈して妥当な値域に収まる保証が無いんじゃないの?
0017デフォルトの名無しさん2014/05/21(水) 20:19:35.24ID:AzCE/Sik
>>6
ほんとうの荒らしは>>1だからな。
0018デフォルトの名無しさん2014/05/21(水) 20:23:17.80ID:atu2MY7e
>>1は>>7の自演だろう
いつものキチガイQ
0019デフォルトの名無しさん2014/05/21(水) 21:11:17.23ID:Rtlj0b94
new で生成したものじゃないものを delete しようとすると
必ずエラーで落ちてくれる?
0020デフォルトの名無しさん2014/05/21(水) 21:16:22.33ID:39Oa8/rN
>>19
いいえ
アナタはC++に剥かないようなので
他の言語をオヌヌメします
0021デフォルトの名無しさん2014/05/21(水) 21:23:58.26ID:GgA/fGkQ
>>8
そのクラスにハッシュ出力関数くっつけちゃ駄目なの?
0022デフォルトの名無しさん2014/05/21(水) 21:29:06.74ID:x8uzOYYW
>>19
operater new と delete を宣言してその中でお好きなようにすれば?
0023デフォルトの名無しさん2014/05/21(水) 22:36:56.59ID:QrOytk9h
delete malloc(1);
0024片山博文MZ悪魔崇拝 ◆T6xkBnTXz7B0 2014/05/21(水) 23:51:35.25ID:Bu7MBEQj
x86-64で128ビット整数の割り算と余りを計算する方法を教えて下さい。
0025192014/05/22(木) 13:36:42.98ID:448z5NbE
そこで聞きたいんだが
new で生成したものじゃないものを delete した時
どのような動作をするの?
関係ないものを解放しているの?
0026デフォルトの名無しさん2014/05/22(木) 13:45:35.84ID:1pePKowy
> new で生成したものじゃないものを delete した時
> どのような動作をするの?
この時点でなにがしたいの?と言われるだけですが
0027デフォルトの名無しさん2014/05/22(木) 14:03:13.60ID:jxaWow30
知っても仕方が無い
公開・保障されていない範囲だから知らないうちにある日突然変わるかも知れない
どうしても知りたいならソースを追え
0028デフォルトの名無しさん2014/05/22(木) 14:07:23.35ID:BQfkUUHc
デストラクタ呼んでfreeしてます
0029デフォルトの名無しさん2014/05/22(木) 17:27:21.39ID:GrRXoNBX
C で クラスもどきの機構を真似ようとした

与えられるのはポインタだけで、
順次デストラクタを呼ぶ機構をどうやってやってるのか考えると禿げてくる
0030デフォルトの名無しさん2014/05/22(木) 19:01:15.75ID:jxaWow30
ハゲしくテクにかる!
0031デフォルトの名無しさん2014/05/22(木) 20:33:23.58ID:f9nw6pOH
>>29
そのへんはXawで鍛えられた
0032252014/05/22(木) 21:01:49.17ID:m4yPgbOU
new で生成したものじゃないものを delete した時
強制終了しないんだろ?
ならどういう現象がおこっているのか知らないとエラー潰せないじゃん
0033デフォルトの名無しさん2014/05/22(木) 21:23:50.27ID:FK/no5gc
そんなプログラムを組むことはありません
設計ミスです
0034デフォルトの名無しさん2014/05/22(木) 21:27:22.18ID:zYQWrZOj
そんなものは「設計ミス」とは言わない
0035デフォルトの名無しさん2014/05/22(木) 21:27:46.00ID:BQfkUUHc
ただのアホです
0036デフォルトの名無しさん2014/05/22(木) 21:37:10.09ID:WnJxxNfY
アホでも質問には答えてやれよ

>>19
・規格上の動作
 未定義。
 不正終了したり、何も起きなかったり、他の変数が書き換わったり、
 実行し続けた一ヶ月後に突然a=a+10の結果がa=a+20になったり
 画面に「おちんぽじゅぽじゅぽ」と表示されても文句は言えない

・実際に起こる可能性の高い動作
 不正終了
 アサートエラー表示が出る など
0037デフォルトの名無しさん2014/05/23(金) 19:17:48.25ID:iUaEOHFY
MFCでデータベースを扱うクラスを作ってスタティックライブラリにしたいのですが、
本番用とテスト用でデータベースが違う場合、どのようにしたら一番スマートだと思いますか?
接続するデータベースは決まっていて、プロジェクト側で接続文字列を指定しなくても良いように現在各サーバー毎に『Open本番用』と『Openテスト用』で2つメソッドを作って
切り替えるたびにソース内の呼び出しをいちいち置換しています。
それまではソース単位でプロジェクトごとにソースファイルとヘッダファイルをコピーしていたのですが、
面倒ですし、なにか変更があった場合統一して置きたいってのもありライブラリにしようと思いました。
皆さんの実装方法やいい方法があればご教授ください。
0038デフォルトの名無しさん2014/05/24(土) 15:34:47.97ID:HkjKqa9B
テンプレートクラスが型パラメータとして相互参照する場面に出くわして
以下のように書きたいのですが、当然コンパイルは通りません。
(クラス名などは例です)
http://ideone.com/k7bfmh

これを解決する方法はありますか?
0039デフォルトの名無しさん2014/05/24(土) 18:06:43.44ID:rvrMfwzJ
設計を見直す
0040デフォルトの名無しさん2014/05/24(土) 18:46:45.68ID:sAh2CAr9
普通に考えて循環参照になってコンパイル通らないと思うんだが
0041デフォルトの名無しさん2014/05/24(土) 19:15:38.52ID:HkjKqa9B
ありがとうございます、こういう構造は定義できないと理解しました
設計からやり直すことにします
0042デフォルトの名無しさん2014/05/24(土) 19:16:58.51ID:xralQL+2
struct Itemを外に出せば?
0043デフォルトの名無しさん2014/05/24(土) 19:38:13.28ID:HkjKqa9B
>>42
外に出しても結局テンプレート構造体になるので
問題が変化しませんでした

というか、これって要するに
 typedef SomeFunc<type_a> type_b;
 typedef SomeFunc<type_b> type_a;
をしようとしていることになるので
「あ、これ無理じゃね」って感覚が一気に強くなりました
どうもお騒がせしました
0044デフォルトの名無しさん2014/05/24(土) 19:42:46.21ID:7oIc/1MI
そこに気づくとは・・・
0045デフォルトの名無しさん2014/05/24(土) 20:03:50.62ID:xralQL+2
>>43
ん? 最初の2行言ってる意味がよくわからん

template<typename T>
struct Item {
int id;
T t;
};

typedef SomeFunc<Item<type_item> > type a;
typedef SomeWrapper<Item<type_item> > type b;

になるんじゃないかと思っただけなんだが

省略部分が関係してる?
0046デフォルトの名無しさん2014/05/24(土) 20:59:31.89ID:HkjKqa9B
>>45
ああ、なるほどItem<T>をSomeWrapperの型引数にするってことですか
確かにそれなら問題ないですね
何か勘違いしていました・・・

現状、実際のコードにおけるSomeWrapper::Itemにあたるクラスが
SomeWrapper内の非public要素にアクセスしまくっているため
安直に外に出すと言うことはできないのですが
(というかこの設計が一番問題な気がしてきた・・・)
教えていただいた方法を踏まえて落としどころを考えてみます
ありがとうございます
0047デフォルトの名無しさん2014/05/24(土) 21:00:27.08ID:trY52c2m
>>37
接続するデータベースの名前を環境変数で持つとか、プロジェクトの設定で持つとか、設定ファイルで持つとか、
なんとでもなりそうな気がするんだが。
0048デフォルトの名無しさん2014/05/24(土) 21:30:07.45ID:u0AnFpgF
>>47
知識不足で申し訳ありません。
プロジェクトの設定で持つっていうのは具体的にどうすればいいのでしょうか?
メソッドの引数をプロジェクトの設定で変えることが可能なのですか?
0049デフォルトの名無しさん2014/05/24(土) 22:12:01.24ID:trY52c2m
>>40
MFCを使っているということは、VisualStudioを使っているということだよな。
ファイル名で言うと、拡張子がvcprojというファイルがあるんだが、それがプロジェクトの設定だ。
それを使って、defineシンボルを定義できる。
0050デフォルトの名無しさん2014/05/25(日) 23:40:42.06ID:m1aGdXHS
>>37
>プロジェクト側で接続文字列を指定しなくても良いように

まずその腐った非常識な設計を見直す
0051デフォルトの名無しさん2014/05/25(日) 23:57:17.36ID:4PeYCUt9
まずその腐った設計をぶち殺す
0052デフォルトの名無しさん2014/05/26(月) 11:46:22.33ID:l0k3Jdk0
Visual Studioだと
WCHAR
wchar_t

UINT
uInt
u_int
UINT32
unsigned int
のように同じ型がたくさんありますが、どれを使うかは自分の好みですか?
いつも適当に使っているので、いろんなのが混じって混乱します。
上級者の人はどういうのを使うのでしょうか?
0053デフォルトの名無しさん2014/05/26(月) 11:54:42.55ID:fNjo4Ias
stdint.hにあるのを使う
0054デフォルトの名無しさん2014/05/26(月) 12:11:34.18ID:ptXAqcmg
stdint.h って VisualStudio に入ってたっけ?
0055デフォルトの名無しさん2014/05/26(月) 12:28:15.07ID:Dg6ioEfB
int
unsigned int
などどこにでもついてるやつでいいだろ。
0056デフォルトの名無しさん2014/05/26(月) 13:16:36.74ID:yHJImmyi
>>52
仕事なら現場のルールに従う
個人なら自分でルールを決めて使う

適当に混在させるのはよくないが
入門レベルならまずそれを超えてから
size_tとはなんぞや?などと考えればいい

Cプログラマーを目指すなら最低限、
それぞれの型定義がどこ由来なのかを把握するクセをつけるべき
C言語汎用 / C++ / WindowsAPI / MFCとかどこかのライブラリ などなど
0057デフォルトの名無しさん2014/05/26(月) 14:12:54.68ID:JWjgxHbr
>>52
使用するWinAPIに合わせる
0058デフォルトの名無しさん2014/05/26(月) 14:37:34.86ID:2JzRM12h
WCHAR ← Win32API 由来なので避ける
wchar_t ← ほぼ標準

UINT ← Win32API 由来なので避ける
uInt ← ほとんど見ないんだけど
u_int ← ほとんど見ないんだけど
UINT32 ← Win32API 由来なので避ける
unsigned int ← ほぼ標準
uint32_t ← これじゃない?
u_int32_t ← こっちだったっけ?
0059デフォルトの名無しさん2014/05/26(月) 14:54:04.78ID:OBwWisyn
int 少なくとも16bit幅でlongを超えない整数
int32_t 32bit幅の整数(C++11以降)。ただし実装しなくても良い

・_・)<規格票では以上でしたっけ?
0060デフォルトの名無しさん2014/05/26(月) 15:04:46.92ID:2JzRM12h
UINT のところが WORD になってるコードも良く見る
0061デフォルトの名無しさん2014/05/26(月) 15:25:08.06ID:Pt2kiZ/o
>>52
最低限、intとかdoubleとかのようにサイズが処理系依存で決まる型と
uint32_tとかのようにサイズが決まっている型の区別は付けといた方がいい
(同じことはunsignedとsignedにも言えるが)
APIとかでWCHARのような型があったりするのはそれ用のサイズであることを
仕様上指定する必要があるため(32bit幅あるべきなのに16bit幅しか無いんじゃ困る、みたいな)

だからこそchar型の符号にはよく悩まされるんだけどね……
std::stringの中身が「char」であって「unsigned char」じゃないから、
半角カナを突っ込んで比較とかするのが面倒で面倒で
0062デフォルトの名無しさん2014/05/26(月) 16:03:33.53ID:LnM16LwK
どうでもいいけど、intはsignedだけどcharはsignedかunsignedかは実装依存。
0063デフォルトの名無しさん2014/05/26(月) 16:13:04.61ID:Pt2kiZ/o
>>62
だから余計に面倒なのよ……
0064デフォルトの名無しさん2014/05/26(月) 16:15:48.54ID:fNjo4Ias
半角カナだと何が問題なんだ
0065デフォルトの名無しさん2014/05/26(月) 16:17:25.94ID:2JzRM12h
2バイト文字の半角カナもあったような
0066デフォルトの名無しさん2014/05/26(月) 16:25:17.66ID:4UfKpyVP
UTF16か
0067デフォルトの名無しさん2014/05/26(月) 16:25:50.01ID:Pt2kiZ/o
>>64
VC++2013で'。'としてuint32_t型に突っ込んだらどうも処理結果がおかしいから
調べたらどう考えても負数扱いしているとしか思えない……
ソース→http://codepad.org/X2RKMIT5
結果→http://i.imgur.com/zYRq8H0.png
0068デフォルトの名無しさん2014/05/26(月) 16:27:49.05ID:4UfKpyVP
UTF16でも世界中の文字の量考えると足りないから
UTF32にシフトチェンジするらしい・・・
0069デフォルトの名無しさん2014/05/26(月) 16:29:09.81ID:Pt2kiZ/o
ちなみに食わせたソースコードの文字コードはShiftJIS。
UTF-16にしても結果はShiftJISと同じ。
(EUCやUTF-8だと上3つがそれぞれ「36513」「8471969」に)
0070デフォルトの名無しさん2014/05/26(月) 17:10:49.29ID:g2+Lv9f2
>>68
UTF16だと日本語ですら固定長ではないようだな。
0071デフォルトの名無しさん2014/05/26(月) 17:16:23.67ID:8q0+XjUd
int xとuint yを与えるとx値を0〜yに丸め込み、はみ出る分はループする関数を、
条件分岐を使わずに作りたいですが、作り方がよくわかりません。

y = 3の場合
x値 出力
-4  2
-3  0
-2  1
-1  2
0   0
1   1
2   2
3   0
4   1
5   2
0072デフォルトの名無しさん2014/05/26(月) 17:40:43.69ID:LnM16LwK
>>71
xの値域が分かっていないと条件分岐なしは難しい。
仮に、x > -y * N なら、(x + y * N) % y でいい。
0073デフォルトの名無しさん2014/05/26(月) 17:46:01.50ID:8q0+XjUd
>>72
x = -2,147,483,648〜2,147,483,647
y = 0〜2,147,483,647
を想定しています。
基本的にyは固定値、xは可変値です。

少し語弊がありました。
x値を0〜yに丸め込み、はみ出る分はループした値を返す関数です。
0074デフォルトの名無しさん2014/05/26(月) 17:48:14.98ID:8q0+XjUd
>>73
あ、これだとy = 0の時におかしくなりますね。y = 1〜2,147,483,647です。
0075デフォルトの名無しさん2014/05/26(月) 17:56:31.29ID:8Gntpxgv
>71を見る限り

return x % y;

でいいんじゃねーの?
0076デフォルトの名無しさん2014/05/26(月) 18:00:44.78ID:NEODZvbE
>>74
y進数にするって事か
0077デフォルトの名無しさん2014/05/26(月) 18:01:47.44ID:8q0+XjUd
>>75
xが負数の時におかしくなってしまいます。
x = -1の場合、出力も-1になってしまいます。
x = -1の場合、出力は y - 1 (>>71 の場合、2)になってほしいのです。
0078デフォルトの名無しさん2014/05/26(月) 18:04:02.34ID:9FSRxe5k
%だけだとxが負の時に対応できない
0079デフォルトの名無しさん2014/05/26(月) 18:09:45.13ID:LnM16LwK
>>73
xが全域なら、条件分岐なしは難しい。
下手に小細工するより、条件分岐した方がいい。

>>75>>77
だから、>72なのよ。
0080デフォルトの名無しさん2014/05/26(月) 18:16:02.85ID:8Gntpxgv
まぁこれを見てくれ
ttp://codepad.org/0tgqjXFM
0081デフォルトの名無しさん2014/05/26(月) 18:16:10.04ID:OBwWisyn
いつも思うけどこの手の数値を扱う問題を軽くこなす人って尊敬する・_・
0082デフォルトの名無しさん2014/05/26(月) 18:23:40.04ID:DE2joRto
>>80
4以外は?

俺解(もっと簡単にできるかもしれん)
printf("%d, %d\n", x%y, (int)(((long long)x-INT_MIN+(-INT_MIN)%y) % y));
0083デフォルトの名無しさん2014/05/26(月) 18:24:11.39ID:8Gntpxgv
よく考えたら処理系依存だったわ
負の数含みで条件分岐なしってメンドクサイね
0084デフォルトの名無しさん2014/05/26(月) 18:34:36.35ID:4UfKpyVP
いや、単に (y+x%y)%y でいいと思うぞ
0085デフォルトの名無しさん2014/05/26(月) 18:52:31.12ID:DE2joRto
おお、これがファイナルアンサーだな
0086デフォルトの名無しさん2014/05/26(月) 18:55:35.81ID:8Gntpxgv
これでどうだ
http://codepad.org/mGaqnhWY
0087デフォルトの名無しさん2014/05/26(月) 19:06:11.70ID:4UfKpyVP
こんな感じか
http://codepad.org/JX8n5tWb
0088デフォルトの名無しさん2014/05/26(月) 19:10:11.67ID:8Gntpxgv
>>87
それxが負の時「x % (int)y」の部分が処理系依存だよ
codepadだと普通にループしてくれるみたいだから気がつかない
0089デフォルトの名無しさん2014/05/26(月) 19:18:02.64ID:4UfKpyVP
>>86 それ「(long long)x」の long long がない環境だと動かないじゃないのか?
0090デフォルトの名無しさん2014/05/27(火) 00:13:39.24ID:i4hxiTa4
>>88
>xが負の時「x % (int)y」の部分が処理系依存

処理系依存とは具体的に
どのような結果の違いが発生しうる?
0091デフォルトの名無しさん2014/05/27(火) 00:44:25.21ID:jH6wT1ov
>>71の望み通りに場合と負になる場合
0092デフォルトの名無しさん2014/05/27(火) 01:05:28.21ID:hIi+Wv6J
>>90
すまん、負数の剰余が処理系依存なのはC89までだったらしい

>>89
long longはC99で規格に入ってるから

>86を境界値で試したら…orz
ttp://codepad.org/LXv7f5EE
0093デフォルトの名無しさん2014/05/27(火) 04:25:39.53ID:gYlifBZG
良いところ取りだとこうなりますかね
つ http://codepad.org/2zaDCj6L
0094デフォルトの名無しさん2014/05/27(火) 06:45:03.12ID:zuChiLjA
>>92
つーか、C99以前は処理系依存だろ。
0095デフォルトの名無しさん2014/05/27(火) 06:50:13.55ID:zuChiLjA
条件分岐を避けるために、高コストなlong longの割り算か……
0096デフォルトの名無しさん2014/05/27(火) 06:58:43.49ID:CUHkYygv
パズルのお題なら別に構わないけど、実用としては見た瞬間に意図が伝わらない
コードは書くべきじゃない。
0097デフォルトの名無しさん2014/05/27(火) 08:02:25.09ID:IggqKLQQ
>>84じゃだめなの?

しかしこのc99の新規格(商を常に0方向に丸める)は俺は好かん。
整数論的には正数yでの剰余は常に0〜x-1とした方がはるかに使いやすい。
現状のCPUの仕様に合わせたんだろうけど、それ作った奴に説教してやりたい。
0098デフォルトの名無しさん2014/05/27(火) 08:39:38.04ID:zuChiLjA
だからそれはxの値域に制限があるんだってば。
0099デフォルトの名無しさん2014/05/27(火) 08:49:17.46ID:IggqKLQQ
ごめんまちがえた。y-1までの範囲のこと
0100デフォルトの名無しさん2014/05/27(火) 12:37:40.64ID:exNyWoak
2の補数は仮定していいだろ
((unsigned int)x - (unsigned int)INT_MIN - ((unsigned int)INT_MIN % y)) % y
0101デフォルトの名無しさん2014/05/27(火) 13:36:23.34ID:gYlifBZG
>>100
クロック数かなり食いそうな提案だな
0102デフォルトの名無しさん2014/05/27(火) 17:50:36.77ID:W5J/W8/q
dllを静的リンクってできるの?
0103デフォルトの名無しさん2014/05/27(火) 18:12:49.07ID:tpLo0YfL
そういうリンカーを作ればできる。
でも見たことは無い。
0104デフォルトの名無しさん2014/05/27(火) 18:16:26.13ID:Q08YOzUU
PEからOBJを取り出して再リンクかめんどくさそう
0105デフォルトの名無しさん2014/05/27(火) 18:26:28.83ID:2wmi7VyA
大リーグの打席に立ってホームランを打つのと比べれば
ほんのちょっと実現可能性が高いかな
0106デフォルトの名無しさん2014/05/27(火) 18:30:17.31ID:hUdGWYaj
原理としてはできるだろがやるのがほぼいない。
DLLをそのままつかえ。
0107デフォルトの名無しさん2014/05/27(火) 18:45:16.15ID:tpLo0YfL
そういうリンカーは手間かければ必ず作れる、大リーグの打席に立つ事とは比べることはできない。
0108デフォルトの名無しさん2014/05/27(火) 19:28:26.62ID:xPg1oxv6
typedefでポインタ型を定義した際のポインタ表記について教えて下さい。
以下のソースではint**型の変数と、int*をtypedefしたPINTのポインタ変数
を使用してるのですが、これらは同じ意味になっておりますでしょうか?

ttp://codepad.org/BXO76fMg

実行結果はエラーも無く同じ結果となっていますが、特に領域確保の
この部分、

*(n + i) = (int*)malloc(sizeof(int) * ncount);
*(pn + i) = (int*)malloc(sizeof(int) * ncount);

と各要素へアクセスするこの部分、

*(*(n + i) + j) = i * 10 + j;
*(*(pn + i) + j) = i * 100 + j;

について、int**とtypedefしたPINT*の表記が同じであることが非常に疑問で
ございます。
ちょっと頭が禿げそう、つかもう禿げてるんで是非ともよろしくお願いします。
0109デフォルトの名無しさん2014/05/27(火) 20:02:45.46ID:cal2qzHP
>>108
ゴミのようなソースを出すな
質問したい事項が明確になる最小限のコードを出せ
0110デフォルトの名無しさん2014/05/27(火) 20:27:09.10ID:gGML8YGy
>>108
なぜ同じだとおかしいと思うの?
nもpnもintへのポインタのポインタでしょ
0111デフォルトの名無しさん2014/05/27(火) 20:48:03.93ID:xPg1oxv6
>>110
はい、まったくその通りで何もおかしいところはありませんですた。
ありがとうございますた。
0112デフォルトの名無しさん2014/05/28(水) 07:11:01.56ID:BOTVCIcq
>>71
こんなのでよければ
ttp://codepad.org/wNN6We3f
0113デフォルトの名無しさん2014/06/04(水) 06:46:22.55ID:rksyc3N1
質問です。
int main() {
int ary[] = { 0,0,0 };
int *ary_p;
ary_p = ary;
int a = 10;

*ary_p = a;
ary_p++;
*ary_p = a;


printf("ary[0] = %d\n" , ary_p[0]);
printf("ary[1] = %d\n" , ary_p[1]);
printf("ary[2] = %d\n" , ary_p[2]);
return 0;
}
を実行した所
ary[0] = 10
ary[1] = 0
ary[2] = 10
と表示されました。
10,10,0と表示されないのは何故でしょうか?
0114デフォルトの名無しさん2014/06/04(水) 06:52:06.64ID:82OCHhy2
コンパイラが腐っている
0115デフォルトの名無しさん2014/06/04(水) 06:56:04.57ID:1DioknP3
>>114
アホか

>>113
ary_pは++した時点でポインタがaryとずれてるから
ary_p[2]が10なのは偶然
0116KUSO KOTE ◆unko./w.Osri 2014/06/04(水) 06:57:49.24ID:fbm8dwov
>>113
これ?

printf("ary[0] = %d\n" , ary_p[0]);
 ↓
printf("ary[0] = %d\n" , ary[0]);
0117デフォルトの名無しさん2014/06/04(水) 07:02:57.65ID:82OCHhy2
ブービートラップかよw
0118デフォルトの名無しさん2014/06/04(水) 09:05:20.65ID:QXXP3HR3
ダメだ、こいつらが何言ってんのか分からねぇ。
0119デフォルトの名無しさん2014/06/04(水) 10:29:05.25ID:A1bPGZBI
           ary_p = ary;
*ary_p = a;  → ary_p[0] = a; → ary[0] = a と等価
ary_p++;    → ary_p = ary + 1;
*ary_p = a;  → ary_p[0] = a; → ary[1] = a と等価

printf("ary[0] = %d\n" , ary_p[0]); → ary[1] を表示
printf("ary[1] = %d\n" , ary_p[1]); → ary[2] を表示
printf("ary[2] = %d\n" , ary_p[2]); → ary[3] (配列範囲外)を表示
0120デフォルトの名無しさん2014/06/04(水) 11:25:37.32ID:XUprANj4
ary_p++ した時点で一個ずれてるわけやね
0121デフォルトの名無しさん2014/06/04(水) 12:48:19.60ID:Ku3qa5kC
スタック上では
ary[0] = 10
ary[1] = 10
ary[2] = 0
a = 10
の順に並んでるんだろうな
0122デフォルトの名無しさん2014/06/04(水) 13:26:36.73ID:XUprANj4
期待は落とし穴
0123デフォルトの名無しさん2014/06/04(水) 19:18:27.10ID:ctaWLLIc
言われてみれば単純なことだがぱっと見ではなかなか気づかない
せめてary[2] =が10でなければ…
0124デフォルトの名無しさん2014/06/04(水) 20:39:11.21ID:3xpANYL+
人間はコンピューターじゃない
読んでわかる必用はない
デバッガーで追えばアホでもわかる
0125デフォルトの名無しさん2014/06/04(水) 21:01:21.04ID:XUprANj4
たしかにアホ
0126デフォルトの名無しさん2014/06/04(水) 21:10:48.61ID:EBZlr/6D
>>122
ああ、
「こうあって欲しい」
と思いつめると見えてくるってアレねw
STAP細胞みたいに
0127デフォルトの名無しさん2014/06/04(水) 21:47:35.58ID:aJQcKH5J
       _ _ _
     /  .|  |  .\
    /____|  |__ \
  /  ___  ___  \
  |  / (●)|_|(●) \  |
  |  |    .(__人__)   | |    スタアアアップ!!
  |  |     |::::::|    | |
  .\|     l;;;;;;l    | /
   /.     `ー´    \   
 /              ヽ
0128デフォルトの名無しさん2014/06/04(水) 22:51:18.18ID:N3/jHtbV
>>121
ary_p はどこへ行ったんだよ (w
0129デフォルトの名無しさん2014/06/04(水) 23:27:02.67ID:82OCHhy2
異次元だな
0130デフォルトの名無しさん2014/06/05(木) 00:52:27.93ID:a7PnX2WK
スタック再忘
0131デフォルトの名無しさん2014/06/05(木) 00:56:08.64ID:lhgzDk/P
バグを探せプログラムのいい例だったな。
0132デフォルトの名無しさん2014/06/05(木) 09:23:38.33ID:bFFkHpFA
よしじゃあ バグを探してみろ
「printf("%u\n", sizeof(double));
が0と表示されました。8じゃないの?」
0133片山博文MZ悪魔崇拝 ◆T6xkBnTXz7B0 2014/06/05(木) 11:06:47.15ID:FT9x6v61
printf("%u\n", sizeof(double));

これは64ビットでバグる。sizeofは64ビットになる可能性あり
0134デフォルトの名無しさん2014/06/05(木) 11:39:01.48ID:3xT5pKKM
ワードアドレッシングコンピューターなら1だな
0135デフォルトの名無しさん2014/06/05(木) 12:23:44.65ID:CbdkWkFK
printf("%u\n", unsigned(sizeof(double)));
0136デフォルトの名無しさん2014/06/05(木) 13:26:11.17ID:lhgzDk/P
これansiでコンパイル通るんかい
0137デフォルトの名無しさん2014/06/05(木) 13:27:36.37ID:kiXIjqkA
size_t が int や unsigneed よりも大きいときにバグる
printf の中の人が喰おうとする値の器の大きさと
printf へ渡した値の器の大きさが不一致で発生

リトルエンディアン/ビッグエンディアンのどちらかですり抜けるかもしれない
# が、 "%u %d\n", sizeof(double), 1); のように、複数フィールドある場合2フィールド目(%d)で狂う

そういや size_t を受けることを前提としたフォーマット型指示子ってないのかな?
0138デフォルトの名無しさん2014/06/05(木) 13:32:02.00ID:tqfyzk9C
>>137
>そういや size_t を受けることを前提としたフォーマット型指示子ってないのかな?
あるよ。printf("%zu\n", sizeof(double))
0139デフォルトの名無しさん2014/06/05(木) 16:49:50.86ID:Pu0yHHt1
クソVCは15年前に決まった%zuに未だに対応していないけどな
0140デフォルトの名無しさん2014/06/05(木) 16:53:35.57ID:bRshLiwB
%Iuがあるじゃない
0141デフォルトの名無しさん2014/06/05(木) 16:57:52.53ID:ztA5Pqkb
>>140はどうしようもない馬鹿
0142デフォルトの名無しさん2014/06/05(木) 17:01:02.87ID:ztA5Pqkb
どの環境でも動いて今後のバージョンでも正しく動くようにするには
>>135しかない
Cなら(unsigned)sizof(double)
0143デフォルトの名無しさん2014/06/05(木) 17:05:47.44ID:xElV2ONh
sizofってなんだよアホ
0144デフォルトの名無しさん2014/06/05(木) 19:54:48.10ID:6la2onTR
ストレスたまってんのはわかったから別の形で発散しろ
0145デフォルトの名無しさん2014/06/05(木) 20:00:32.49ID:9QuXPsv6
基地外アスぺコミュ障が大多数を占めるこの業界人なら
ネットで他人を攻撃か風俗(本番系)でストレス発散と相場が決まっている
0146デフォルトの名無しさん2014/06/05(木) 20:50:47.70ID:HyLJ1E4j
安心して良い
アジャイルプラクティスって本によるとプログラマはみんな上から目線のてんこ盛りだそうだ・_・
0147デフォルトの名無しさん2014/06/05(木) 23:26:42.15ID:lhgzDk/P
それぐらいじゃないとやってやれないのでわ?
若い時はちょっと上手くいくと、ふふふ俺は天才だぜ
とか思うし。
0148デフォルトの名無しさん2014/06/06(金) 00:40:07.89ID:U2iGg+lK
007ゴールデンアイのボリスかよ
0149デフォルトの名無しさん2014/06/06(金) 00:49:17.21ID:9n5gWYtb
プログラマーは基地外アスぺコミュ障に加えて
>>146のようなアニヲタが多い
つまりヒエルキラーの底辺
0150デフォルトの名無しさん2014/06/06(金) 00:50:47.29ID:nCXyhCgm
>>149
ヒエラルキー
0151デフォルトの名無しさん2014/06/06(金) 00:53:20.86ID:chhWQ5VX
外人さんはハイエラーキケウって発音してた ような。
0152デフォルトの名無しさん2014/06/06(金) 01:24:36.80ID:4c1lIHTZ
ヒエルキラーw
馬鹿じゃねーのw
0153デフォルトの名無しさん2014/06/06(金) 08:29:47.43ID:JaXrM7TV
template <typename T> T Squared(T x) {
  return Multiply(x, x);
}
int Multiply(int x, int y) {
  return x * y;
}
int main() {
  printf("%d\n", Squared(5));
}

こんなコードがあって、VC++、gcc、codepadのどれもコンパイルは通るのですが
clangだけエラーになってしまいます。仕様的にはどちらが正しいのでしょうか?
0154デフォルトの名無しさん2014/06/06(金) 08:34:47.12ID:JaXrM7TV
ちなみにideoneでもエラーになってしまうようです。
0155デフォルトの名無しさん2014/06/06(金) 08:53:05.40ID:DTdJKogB
printf("%d\n", Squared((int)5));
0156デフォルトの名無しさん2014/06/06(金) 09:59:47.54ID:R+Edbt39
>>153
手元にあるclang 3.5でもエラーにはならない。-Weverythingにすれば警告は出る。
言語仕様的にも関数宣言のない関数呼び出しは引数int、返り値intで暗黙定義され
るので、エラーではない。
0157デフォルトの名無しさん2014/06/06(金) 10:06:09.06ID:zxHkOkkG
>>156
暗黙定義なんてされないよ。

Cの暗黙宣言を勘違いしてるにしても、引数型がintになるなんてことはない。

>>153
引数依存の式の名前解決はテンプレート実体化の場所で改めて行われる。
エラーにならないってことで正しいよ。
https://www.google.co.jp/search?q=two+phase+name+lookup
0158デフォルトの名無しさん2014/06/06(金) 10:28:33.35ID:R+Edbt39
なるほど。そして、なんだってぇぇぇぇぇぇ
テンプレート実体化の場所とは翻訳単位の最後だったのかあ。
0159デフォルトの名無しさん2014/06/06(金) 10:58:45.44ID:DTdJKogB
http://www.moonmile.net/blog/archives/3580
_name 参照してないから詐欺だよな
0160デフォルトの名無しさん2014/06/06(金) 11:22:41.57ID:zxHkOkkG
>>158
翻訳単位の最後だっけ?使ってるところじゃなくて?それどこに書いてあった?

・・・と思って調べてたら、そもそもintを含めてADLの動かない型だと
テンプレート定義時点で見えてないとダメだったみたい。ごめん。
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=29131
0161デフォルトの名無しさん2014/06/06(金) 11:25:15.51ID:zxHkOkkG
リンクはこっちのほうがよかったか。
http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#197
0162デフォルトの名無しさん2014/06/06(金) 11:35:17.16ID:R+Edbt39
>>160
★に定義があればコンパイルは通り、なければMultiplyが未定義でエラー
☆が実体化の場所ではないようだ
仕様上のどこに該当するのかはわからない

template <typename T> T Squared(T x) {
return Multiply(x, x);
}
int main() {
printf("%d\n", Squared(5)); // ☆
}

int Multiply(int x, int y); // ★
0163KUSO KOTE ◆unko./w.Osri 2014/06/06(金) 18:42:25.21ID:cSJUuqCn
>>162
14.7.1p3
『Unless a function template specialization has been explicitly
instantiated or explicitly specialized, the function
template specialization is
implicitly instantiated when the specialization is referenced in a context that requires a function definition to exist』

実体が存在しなければならないことが確定した時点でインスタンス化されるので
>>162は☆だと思うのだけれど
0164デフォルトの名無しさん2014/06/06(金) 18:45:22.00ID:F0jN0mKa
POI
0165デフォルトの名無しさん2014/06/06(金) 23:14:22.72ID:JaXrM7TV
>>156-157
後出しですいません。バージョンはVC++が2012、gccは4.1.1、clangは3.3でした。
エラーじゃない方が正しい旨了解しました。
0166デフォルトの名無しさん2014/06/07(土) 10:36:02.64ID:ZltTq0Ow
>>160
>ADLの動かない型だとテンプレート定義時点で見えてないと

ついていけないので補足たのむ。
ここでは「ADLの動かない型」がTに指定されただけであって
Multiply(x, x)は引数依存な式であって
テンプレート定義時に見えていなくても良いのでは?
0167デフォルトの名無しさん2014/06/07(土) 13:34:36.41ID:pxDSBXnu
>>166
14.6.4 [temp.dep.res]
"In resolving dependent names, names from the following sources are considered:
 - Declarations that are visible at the point of definition of the template.
 - Declarations from namespaces associated with the types of the function
  arguments both from the instantiation context (14.6.4.1) and from the
  definition context."

引数依存な名前 Multiply を解決するにあたって上記のとおり定義時・実体化時の
2つの文脈で見えている宣言が考慮されるんことになってるんだけど、実は後者は
与えられた実引数に「関連する名前空間」の宣言しか考慮しないことになっている。

組み込み型である int には「関連する名前空間」が無い(= ADL は動かない)
ので、前者の定義時の文脈で見えてる宣言しか考慮しない。


無駄にややこしいのでそもそも後者のこの縛りは意図されたものなのか?という
Issue は作られたが、その後11年ほど放置されたので、現状で良しとなっている。
http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_closed.html#225
0168デフォルトの名無しさん2014/06/07(土) 13:36:32.90ID:AfyymoHz
江添さんチーッス!
0169デフォルトの名無しさん2014/06/07(土) 13:37:15.46ID:pxDSBXnu
江添さんじゃないよ。
0170デフォルトの名無しさん2014/06/07(土) 13:43:28.28ID:pxDSBXnu
>>167
ん、「後者」が実体化時、というのは正しくないな。

後者は正しくは「定義時・実体化時の両方での、実引数の型に関連する名前空間での宣言」で。
結論は変わらないけど。
01711662014/06/07(土) 14:51:46.46ID:80HFvxmh
>>170
ようやく理解したサンクス。
visible/associatedの説明は14.6.4.2にあって
普通?(3.4.1/3.4.3)とADL(3.4.2)のことと理解した
0172デフォルトの名無しさん2014/06/07(土) 19:30:16.30ID:3IE/9PdE
VS2013のC++で
error LNK1169: 1 つ以上の複数回定義されているシンボルが見つかりました。
で悩まされているのですが、そこで質問です。
宣言と実装を.hと.cppに分けずにhppファイルに実装を書いた場合でも、
上手にインクルードガードすれば、上記のエラーは回避できるのでしょうか?
をれとも、原理的に回避できない場合があるなら.hppではなく
.hと.cppに分けて地道にインクルードガードして解決したいと思います。
0173デフォルトの名無しさん2014/06/07(土) 19:33:29.54ID:TTAmplth
原理的に回避できない
0174デフォルトの名無しさん2014/06/07(土) 19:35:39.77ID:Xb2xGj4X
インクルードガードは、ひとつの翻訳単位に複数回定義が現れるのを防ぐだけ
今問題は、複数の翻訳単位に一つづつ定義が現れてしまって、リンクする時点で複数回定義が問題になってる
0175片山博文MZ悪魔崇拝 ◆T6xkBnTXz7B0 2014/06/07(土) 19:37:18.45ID:3R8CEA88
>>172
ヘッダに書くのは宣言。定義はヘッダ以外のソースに書け。
基本的にヘッダの中の変数宣言にはexternをつける。
インクルードガードしても別のコンパイル単位でstaticでない定義が重複する
0176デフォルトの名無しさん2014/06/07(土) 19:37:56.21ID:TTAmplth
AというプログラムかLIBかOBJで必要な関数の実装を組み込んでいて、
BというプログラムかLIBかOBJでも同じ関数の実装を組み込んだら衝突する。
実装はコンパイルしないか、最終的に1ファイルであるかのようにビルドされるならいい。
0177デフォルトの名無しさん2014/06/07(土) 19:47:49.80ID:SxbAzKvi
>>172
>上手にインクルードガードすれば

インクルードガードで定義済みを判断して
定義済みだったら extern を付けると良いよ
0178デフォルトの名無しさん2014/06/07(土) 20:25:44.99ID:3IE/9PdE
皆さんアドバイス有難うございました。
.hppはやめて、.hと.cppに宣言と定義を書く方式にします。
今回問題になったのは変数名ではなく関数名なのですが、
最初は関数の前にstaticを付けると問題は回避できたのですが、
それだと同じ関数が複数個作られるんですよね?
それは嫌なので、.hと.cppに分けて地道にインクルードガード
する方式にしたら上手く行きました。
0179デフォルトの名無しさん2014/06/07(土) 23:04:40.79ID:jBtwYmah
>地道にインクルードガード
当たり前のことをさも大変だったかのように言われても。
0180デフォルトの名無しさん2014/06/08(日) 07:06:28.91ID:WQSrHXS4
リンク時にエラーになるってことはインクルードガードは関係ないと思うんだが
でかいソースってわけじゃないだろうし、一度コマンドラインでコンパイルとリンク分けて処理してみたら?
0181デフォルトの名無しさん2014/06/08(日) 07:13:05.10ID:deHViVaY
>リンク時にエラーになるってことはインクルードガードは関係ない

んなこたーない
0182デフォルトの名無しさん2014/06/08(日) 07:16:18.97ID:397riybv
class 作って inline にすればいい
static おじさん大歓迎だ
0183デフォルトの名無しさん2014/06/08(日) 07:54:05.70ID:b9obj5lE
全部単一ファイルにかけばOK
C++なら名前空間分離できるからstatic関数/変数の必要性も少ないし
処理速度も上がってるからコンパイル時間を気にする必要も無い
0184デフォルトの名無しさん2014/06/08(日) 11:19:10.68ID:ZMHijgj2
無名名前空間でconstなものをhファイルに記述して、
各翻訳単位にばらまく作業をはようはよう
0185デフォルトの名無しさん2014/06/08(日) 12:02:02.19ID:N1ken61t
インクルードガードを
付けなくても動くのがよいデザインであることってホント?
0186デフォルトの名無しさん2014/06/08(日) 12:11:41.62ID:WsLrHXAO
多分嘘
0187デフォルトの名無しさん2014/06/08(日) 12:19:22.41ID:b9obj5lE
インクルードガードが必要な言語仕様がダメ
ダメな土台の上に何を建ててもダメ
0188デフォルトの名無しさん2014/06/08(日) 13:12:45.26ID:81o4BWeL
>>185
理想的にはそうであることを頭に入れつつも
だが現実はそこまで甘くない
0189デフォルトの名無しさん2014/06/08(日) 14:22:51.92ID:WsIQvM8s
付けて何が悪い と言えばいい
0190デフォルトの名無しさん2014/06/08(日) 16:44:48.56ID:DTpplEG3
このコードでstrが定義されていない参照ですと言われるのですが
正しい書き方を教えていただけませんか

//a.h
namespace AA{
struct ST{ static const char* str; };
};
//a.cpp
#include "a.h"
namespace AA{ const char* ST::str = "string";};
//main.cpp
#include "a.h"
#include <stdio.h>

int main(){
printf("%s\n",AA::ST::str);
return 0;
}
0191デフォルトの名無しさん2014/06/08(日) 16:48:50.11ID:VTLGPPW/
ttp://ideone.com/8lSxb0
問題ないけど
a.cppがリンクされてないんじゃね
0192デフォルトの名無しさん2014/06/08(日) 17:02:19.66ID:DTpplEG3
原因はリンクでした、助かります
0193デフォルトの名無しさん2014/06/08(日) 17:39:03.55ID:WsIQvM8s
iostream使ったら?
0194デフォルトの名無しさん2014/06/08(日) 21:02:12.81ID:9wWepqG8
ライブラリのクラス設計に関するいい本ないでしょうか?
0195デフォルトの名無しさん2014/06/08(日) 21:09:55.95ID:qc9K162V
c++のためのAPIデザイン
APIデザインの極意

とかかな。
読んだ事ないけど。
0196デフォルトの名無しさん2014/06/08(日) 21:13:18.11ID:9wWepqG8
c++とjavaのライブラリの設計思想って違うのかな?
0197デフォルトの名無しさん2014/06/08(日) 21:14:59.21ID:Sdh9/TPU
>>196はどうしようもないバカ
0198デフォルトの名無しさん2014/06/08(日) 21:19:15.40ID:9wWepqG8
>>196なんで?
0199デフォルトの名無しさん2014/06/08(日) 21:19:59.29ID:9wWepqG8
>>197だった
0200デフォルトの名無しさん2014/06/08(日) 22:10:28.14ID:lWOSGito
荒らしだから気にすんな
0201デフォルトの名無しさん2014/06/09(月) 00:07:58.15ID:SojYRJUc
初歩的で申し訳ないのですが
最近のvisual studio(C++)だとsprintfやfopenがエラーになり_sをつけたのを使えと言われてしまいます。
でも同じようなソースをmacのxcodeでも使いたいので_sを使わずに書きたいのですが、
設定などでエラーが出ないようにできないでしょうか?
0202デフォルトの名無しさん2014/06/09(月) 00:11:53.41ID:0bWhWxWJ
コンパイラオプションから/WXを消す
0203デフォルトの名無しさん2014/06/09(月) 00:16:32.77ID:SojYRJUc
>>202
ありがとうごさいます
明日やってみます
0204デフォルトの名無しさん2014/06/09(月) 00:16:59.57ID:KVOF4ter
このへん↓
http://msdn.microsoft.com/ja-jp/library/jj161081.aspx

昔は単なる警告だったのに今はエラーらしいね
警告は意味わかるけどどうして非標準のsprintf_s使えってのがエラー扱いになるのか…
Microsoftの考えは理解できん…
0205デフォルトの名無しさん2014/06/09(月) 00:18:52.15ID:0bWhWxWJ
設定しない限りエラーにはならんぞ
0206デフォルトの名無しさん2014/06/09(月) 04:05:39.98ID:ALbP+Rtr
警告をエラーと言ってるんじゃなかったのか
0207デフォルトの名無しさん2014/06/09(月) 07:00:36.72ID:h9TCUEkZ
>>205
んなこたーない
警告回避のプラグマを入れてもコンパイルエラーになる執拗さ
0208デフォルトの名無しさん2014/06/09(月) 07:27:50.76ID:z9pC5xMW
ないない、お前がなんか勘違いしてるだけ
違うと言うなら、現象が発生するソースと環境さらしなよ
0209デフォルトの名無しさん2014/06/09(月) 07:47:51.06ID:NzkmwWkT
MSはBOMなしのUTF-8にすら対応する気が無いからな
VCは捨てろ
0210デフォルトの名無しさん2014/06/09(月) 08:00:25.48ID:3klKh/2e
>>208
・Windows 7/8をインスコ
・Visual Studio 2013 Express Desktopをインスコ
・コンソールアプリのソリューションを作成。設定はデフォルト
・strcpyを書く
これで再現
0211デフォルトの名無しさん2014/06/09(月) 09:27:47.26ID:j0LvVAAE
逆にbccでUTF-8使える方法知りませんか?
他のコンパイラ用にUTF-8に統一してるもので
0212デフォルトの名無しさん2014/06/09(月) 11:26:09.21ID:v4Ko1KtV
>>210
再現しねー
C4996 の警告にしかならないし、#pragma warning(disable: 4996) で抑止できる

Windows 7 + Visual Studio 2013 Express Desktop
0213デフォルトの名無しさん2014/06/09(月) 12:18:47.40ID:Q8TzlagX
アップデートのパッチと予想
0214デフォルトの名無しさん2014/06/09(月) 14:56:19.40ID:CV1N0NlN
https://twitter.com/jtfrom9/status/296916791991603200
この質問の答え教えてください。
0215デフォルトの名無しさん2014/06/09(月) 14:57:40.14ID:WYLHhV4p
>>214
できませんか?
0216デフォルトの名無しさん2014/06/09(月) 14:59:59.51ID:WYLHhV4p
あぁ、typedef void hoge(int);じゃなかったか。
0217デフォルトの名無しさん2014/06/09(月) 17:19:00.70ID:ZzyTzOLC
>>216
正解
0218デフォルトの名無しさん2014/06/09(月) 17:35:00.11ID:bS+se7ig
>>201
>macのxcodeでも使いたいので_sを使わずに書きたい

macのxcodeとやらにはC標準のsprintf_sが無いの?
0219デフォルトの名無しさん2014/06/09(月) 18:21:25.24ID:THWp8jxa
あれってC標準だったの?
0220デフォルトの名無しさん2014/06/09(月) 18:38:29.50ID:7fH1c8DU
任意実装だから、無くてもいいだろ
0221デフォルトの名無しさん2014/06/09(月) 19:04:16.12ID:ZwnzJPC1
>>219
ISO/IEC 9899で規定されている
ただint32_tと同じく「実装する義務はない」という扱いだった気がする
0222デフォルトの名無しさん2014/06/09(月) 20:14:49.18ID:10ZsRbUm
それ、サイズ超えるとエラーハンドラ呼び出すから、ビミョーに使いづらい
デフォルトは無視してくれよ
0223デフォルトの名無しさん2014/06/09(月) 21:46:21.51ID:XTlwiFWy
落ちるのはMS独自のC++用配列オーバーロードだけじゃね?
コードにミスがあるのを気づかせてくれるなんていい奴じゃないか
0224デフォルトの名無しさん2014/06/09(月) 21:50:15.60ID:v4Ko1KtV
>>222
普通、エラーにならないようにするもんじゃねーのか?
バグでエラーになったらハンドラでメッセージ出すなりログとるなりして終了とか、回復試みるとかだろ。
0225デフォルトの名無しさん2014/06/09(月) 22:01:05.32ID:/og56A33
派遣先の製品に脆弱性を埋め込む産業スパイが居ると聞いて飛んできました
0226デフォルトの名無しさん2014/06/09(月) 22:10:04.68ID:ZwnzJPC1
派遣テロはこの業界の常
0227デフォルトの名無しさん2014/06/10(火) 02:14:18.98ID:14Dpn3NN
そんなのいるのか…
0228デフォルトの名無しさん2014/06/10(火) 11:35:16.45ID:IvxqNLPW
typedef void hoge(int)が
void(int)にhogeという名前を付けることだから、
void(int)は値を返さないintを引数に持つ関数の型ということですか?
0229デフォルトの名無しさん2014/06/10(火) 12:43:26.27ID:5ayGoitk
関数ポインタじゃなくて関数をtypedefするなんて変態だな
0230デフォルトの名無しさん2014/06/10(火) 15:01:37.55ID:dXd8C34n
typedef なんてあんまり使った事ないです
0231【重要】2014/06/10(火) 16:16:04.43ID:8cBdtRQK
hogeは禁止されています。使用しないでください。
万が一hogeが書き込まれても、スルーしてください。
相手にするとあなたも荒らしと同じ扱いになります。
なお、hogeはNGワードに追加しておくことが強く推奨されています。
0232デフォルトの名無しさん2014/06/10(火) 16:46:14.39ID:6EsM5oVU
>>212
SDLのチェック外してんじゃねーよハゲ
0233デフォルトの名無しさん2014/06/10(火) 17:14:05.64ID:Hz3VKP2L
Windowsをインスコしろ(まっさらな状態で再現確認しろ)と言っているのに
「Windows 7 + Visual Studio 2013で再現しない」
などと言い出す人は会話のできない残念な人。
0234デフォルトの名無しさん2014/06/10(火) 18:33:27.40ID:9ji/vOoA
>>232-233
既定値は無効じゃ、ボケ
0235デフォルトの名無しさん2014/06/10(火) 18:55:25.24ID:6EsM5oVU
>>234
チェックは規定で入ってるよ馬鹿
0236デフォルトの名無しさん2014/06/10(火) 20:06:27.47ID:q+I0Qf53
hogeを持たないチョーセン人がhoge禁止というチョーセンルールを
押し付けて来ますが、日本人は無視して下さい。
チョーセンルールを守らなければいけないのはチョーセン人だけです
0237デフォルトの名無しさん2014/06/10(火) 20:23:15.27ID:9ji/vOoA
>>235
入ってねーよ、どこの VS 使ってるんだよ (w

既 定では、/sdl は無効になっています。
http://msdn.microsoft.com/ja-jp/library/jj161081.aspx
0238デフォルトの名無しさん2014/06/10(火) 21:15:10.50ID:j8iOZPUp
>>237
それってコマンドライン引数で /sdl を指定しない場合に無効で、
上で言っているのは、プロジェクトを新規作成するとデフォルトで /sdl を使うよ、
ってことだよね
0239デフォルトの名無しさん2014/06/10(火) 21:18:28.24ID:9/0SJ4nx
>>237
まずお前はインストール直後のWindowsにVisual C++をインストールして
挙動を確認したんだろうな?
0240デフォルトの名無しさん2014/06/10(火) 21:22:55.70ID:p3jSqJSc
そこまで行くとC/C++の問題じゃなくてIDEの問題じゃね?
これだから Visual Studio の話はしたくなくなるんだよなあ。
0241デフォルトの名無しさん2014/06/10(火) 21:24:10.35ID:hzZkSFog
環境依存おkだしそんな固く言うことはないだろう
0242デフォルトの名無しさん2014/06/10(火) 21:24:53.17ID:QN3sJURp
>>236
ホゲコピペでスレを荒らした基地外は死ねよ
0243デフォルトの名無しさん2014/06/10(火) 21:29:33.41ID:9ji/vOoA
>>238
プロジェクトプロパティの sdl が空白になってると言うこと
もし、ほんとに入っているなら、プロパティマネージャでどのプロパティシートで設定されてるのか調べてくれ

>>239
お前はうざいわ、アホは黙っとけ
0244デフォルトの名無しさん2014/06/10(火) 21:37:05.66ID:Bd3Y4vSI
>>243
>プロジェクトプロパティの sdl が空白になってると言うこと

なあ、>>237のリンク先のどこにそんなことご書いてあるんだよ
0245デフォルトの名無しさん2014/06/10(火) 21:46:17.32ID:9ji/vOoA
>>244
なに勘違いしてるんだよ、
プロジェクトプロパティの sdl が空白 ⇒ コマンドラインで指定されない ⇒ 既定値を適用 ⇒ sdl オフ
つーことで、その既定値の説明だよ
VS 使ってりゃわかると思うんだが...
で、プロジェクトプロパティ見たのかよ?
0246デフォルトの名無しさん2014/06/10(火) 21:52:06.82ID:Bd3Y4vSI
>>245
>プロジェクトプロパティの sdl が空白
んなこた どうでもいい
普通にVisual Studioをインストールして新規プロジェクト作ったら
そこが有効になるかどうかの話だ
0247デフォルトの名無しさん2014/06/10(火) 21:56:59.89ID:Bd3Y4vSI
ああ、そこが既定で空白になるという主張なのか。
じゃあ>>237のリンク先のどこにそんなことが書いてあるのか教えてもらおうか
0248デフォルトの名無しさん2014/06/10(火) 22:12:35.01ID:9ji/vOoA
>>246-247
お前じゃま、消えろ
0249デフォルトの名無しさん2014/06/10(火) 22:25:18.08ID:Bd3Y4vSI
A「既定ではこの設定になる」
B「再現方法は?」
A「再現方法はX」
B「俺の環境ではならない」
A「再現方法Xをためしたの?」
B「うざい。既定がそうだと>>237のリンク先にある」
A「そんなこと書いてないようだが」
B「お前、邪魔」

ちょっと頭がおかしいのではないか
0250デフォルトの名無しさん2014/06/10(火) 22:30:06.52ID:9ji/vOoA
だから、ごちゃごちゃ言う前にプロパティ確認しろよ
0251デフォルトの名無しさん2014/06/10(火) 22:32:52.95ID:j8iOZPUp
>>243
プロパティシートじゃないよ

C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\VCWizards\AppWiz\Generic\Application\html\1041\default.htm

にて、SDL_CHECK が true だからだよ
0252デフォルトの名無しさん2014/06/10(火) 22:43:47.10ID:9ji/vOoA
>>251
うぉ、まじか
確かに今やると、プロパティが設定されるな、こりゃすまん
うーむ、再現テストしたときになんか勘違いしてたんだろうか...
0253デフォルトの名無しさん2014/06/10(火) 22:50:07.87ID:oUVoGw0Z
おいっ
0254デフォルトの名無しさん2014/06/10(火) 22:55:48.56ID:IE+cVxVO
どうやら俺様が勝ち馬に乗ってオラオラするチャンスが来たようだな
0255デフォルトの名無しさん2014/06/10(火) 23:06:32.70ID:j8iOZPUp
元の質問とは関係ない立場だったけど、気になって調べてみたところで、
いくつもの知見が得られて、うれしい限りだね
同じ場所の AppSettings.htm を加工して遊んでみたけど、楽しいね
0256デフォルトの名無しさん2014/06/11(水) 01:06:26.46ID:qYhdrv3k
>>229
関数をtypedefしたほうがポインタであることが明確になるうえ宣言にも使えるようになるんだぜ。
なんでポインタでtypedefする習慣が広まってるのか、正直わからん。
0257デフォルトの名無しさん2014/06/11(水) 01:46:58.82ID:A/uACQuu
CかC++の話だよな
関数ポインタがポインタであることを意識する必要があるケースが思いつかないんだけど・・・
0258デフォルトの名無しさん2014/06/11(水) 03:33:29.38ID:o2OaGDZj
>>257
型の宣言時にはいやでも意識せざるを得ないか?
0259デフォルトの名無しさん2014/06/11(水) 05:20:11.33ID:mGD11vxw
>>256
構造体のポインタ使う時に
LPSTRUCT struct;とするか
STRUCT *struct;とするか
って感じか
0260デフォルトの名無しさん2014/06/11(水) 07:37:16.84ID:iUw7Woe6
>>256
typedefしないとできない宣言って何?
0261デフォルトの名無しさん2014/06/11(水) 07:48:08.78ID:v5dqjqwp
よくわからないがポインター型への変換の演算子はtypedefしないとミリ
typedef int * kuso;
operator kuso(){…}
0262デフォルトの名無しさん2014/06/11(水) 08:32:39.33ID:iUw7Woe6
>>261
あぁ、演算子ね。
C++は構文が糞だからダメだわ。
0263デフォルトの名無しさん2014/06/11(水) 08:47:03.64ID:XOnpMMdi
>>260
関数宣言にその型が使えるってことだろう。
関数ポインタをtypedefしたらそうはいかない。
0264デフォルトの名無しさん2014/06/11(水) 08:52:05.95ID:rn+luTK4
関数のポインターの型は
typedef a (*Hoge)(b)だからa(*)(b)という考え方と
普通にa(b)*という考え方があるじゃないですか?
0265デフォルトの名無しさん2014/06/11(水) 08:58:23.87ID:iUw7Woe6
>>263
やっと>>256の意味がわかったわ。
関数をtypedefするか関数ポインタをtypedefするか、
どちらが便利?って話ね。
0266デフォルトの名無しさん2014/06/11(水) 09:03:01.74ID:rn+luTK4
void f(int);
あるいは
void(int) f;
あるいは
typedef void Hoge(int);
Hoge f;
といったところか。
0267デフォルトの名無しさん2014/06/11(水) 12:25:26.99ID:L9Q5vk2d
Visual Studio 2013で
IntelliSense: 不完全クラス型へのポインターは使用できません
が解決出来ないのですが、どのあたりをチェックすれば良いでしょうか?
0268デフォルトの名無しさん2014/06/11(水) 14:52:23.76ID:+13mKJ0Z
>>266
D かと思たゎ
0269デフォルトの名無しさん2014/06/11(水) 19:40:34.56ID:43m3ttQ+
>>267
class A;

void f()
{
A* a;
a-> // ここで?
}

上みたい宣言のみが見える状況だと思うので、
#include "A.h" とかで、class A を取り込まれたし
0270デフォルトの名無しさん2014/06/11(水) 20:40:20.88ID:L9Q5vk2d
>>269
アドバイス有難うございました。
まさにそんな状況でした。原因はヘッダーファイルが沢山あって、
混乱して分けわからない状態になってしまっていました。
ヘッダーを整理して無事解決しました。
0271デフォルトの名無しさん2014/06/12(木) 05:16:56.78ID:FoO1aWuI
質問です
スタックの説明の所で
「スキップ」という用語が出てきました。
スタックにはプッシュとポップしかないと思っていたのですが、
「スキップ」とは何でしょうか?
0272デフォルトの名無しさん2014/06/12(木) 05:26:21.08ID:Abgsr/RV
http://viper.2ch.net/test/read.cgi/news4vip/1402516548/20n-
競技プログラミングスレだから暇つぶしに解いてってくれ
0273デフォルトの名無しさん2014/06/12(木) 05:26:26.02ID:oum6q6Py
その説明を丸々貼って欲しい
0274デフォルトの名無しさん2014/06/12(木) 05:45:06.16ID:CisCdg7y
>>271
__stdcall
0275デフォルトの名無しさん2014/06/12(木) 08:02:45.99ID:KtD30A8l
>>272
Cだと超上級者以外無理ってどういう根拠?
0276デフォルトの名無しさん2014/06/12(木) 08:24:48.38ID:pAWvn52T
リスト構造・比較・配列でおわるやんけ
0277デフォルトの名無しさん2014/06/12(木) 18:20:17.40ID:HVN4f7gN
>>271
skip
0278デフォルトの名無しさん2014/06/12(木) 19:24:27.99ID:SK659vFt
C++ の thiscall について質問です
http://codepad.org/F7k3yl9O

メンバ関数をポインタで呼び出す際に VC++ の thiscall 規約では
通常は ECX レジスタが this ポインタを指すようにするそうですが
メンバ関数が可変長引数関数だった場合は
引数を全部スタックに積んだ後に this を push するとのことで
最初の引数のひとつ前に this があることを期待したコードを書いてみました

このプログラムを実行すると実体呼び出しかポインタ経由の呼び出しかに関わらず
self と this が常に等しいと思ったのですが
直接インスタンスに対して x.vfunc(9, 80) を呼び出した場合と
ポインタを経由して x.pvfunc((short)&x, 9, 80) を呼び出した場合で
self->r の値と this->r の値が入れ替わっていますが
なぜでしょうか?

コンパイラは VC++ と dmc で試しましたが結果はアドレスが違うだけでほぼ同じでした
0279デフォルトの名無しさん2014/06/12(木) 19:26:58.04ID:SK659vFt
可変長引数の関数ではない普通?の関数で ECX を使った場合は
常に self == this であることは確認出来ています
0280デフォルトの名無しさん2014/06/12(木) 20:31:25.81ID:b96PYMns
cl /nologo /d1reportSingleClassLayoutTestA F7k3yl9O.cpp

F7k3yl9O.cpp
class TestA size(12):
+---
0 | {vfptr}
4 | r
| <alignment member> (size=2)
8 | pvfunc
+---
0281デフォルトの名無しさん2014/06/13(金) 13:24:12.57ID:9gHonLie
https://github.com/TakahashiShuuhei/DesignPatternPractice/blob/master/Strategy.cpp
このコードはなぜnewしてるのにdeleteなくても大丈夫なんですか?
0282デフォルトの名無しさん2014/06/13(金) 13:32:13.89ID:LHr3GtlM
大丈夫じゃないよ
0283デフォルトの名無しさん2014/06/13(金) 13:33:06.19ID:9gHonLie
http://d.hatena.ne.jp/yppp/20091030/1256909965
このコードもdeleteしてないんですけどなぜですか?
0284デフォルトの名無しさん2014/06/13(金) 13:39:18.05ID:VGNKb44d
>>283
deleteしてるやん、と思ったら半分してないな
忘れてるだけじゃないかな
0285デフォルトの名無しさん2014/06/13(金) 13:55:05.94ID:MfoWKRoy
ありがとうございます。
偶然2回連続でみたコードがdeleteしてないのは自分でも驚きですね。
a(new b)の初期化ではデストラクターにbのdeleteを書かないといけませんね。
呼び出し側でdeleteする規約ならa(new b)はメモリーリークを起こしますね。
この両方に対応するためにshared pointerを使えばデストラクターと
呼び出し側両方でポインターの破棄をできるから便利ですよね。
0286デフォルトの名無しさん2014/06/13(金) 14:02:57.65ID:VGNKb44d
マルチしてるならどこか1つに絞って欲しいな
0287デフォルトの名無しさん2014/06/13(金) 14:09:46.48ID:MfoWKRoy
マルチとは同じ質問を別々のスレッドにすることなので該当しませんね。
0288デフォルトの名無しさん2014/06/13(金) 14:13:47.38ID:VGNKb44d
じゃあ似たような質問を別のスレッドに分けて質問するのはやめて
どちらかひとつに絞って欲しいです。お願いします。
0289デフォルトの名無しさん2014/06/13(金) 14:18:04.87ID:MfoWKRoy
言い掛かりもいいところですね。
あーたには心底見損ないました。
そうやってまた逃げるんでしょう?
卑怯ですね。
0290デフォルトの名無しさん2014/06/13(金) 14:19:45.65ID:Q9n/vajD
初心者の振りして何が楽しい
0291デフォルトの名無しさん2014/06/13(金) 14:21:09.49ID:r0doLLGN
自分で考えろ
0292デフォルトの名無しさん2014/06/13(金) 14:31:21.85ID:VGNKb44d
>>289がなんかのコピペ改変なのか素で言ってるのか判別がつかない自分が悔しい
0293デフォルトの名無しさん2014/06/13(金) 19:55:15.57ID:SNY1qJMs
>>278
linux民だから試せないけど、ポインタをshortにキャストするのってありなん?
普通に考えたらアドレスが欠けて意味を成さなくなりそうなんだけど

あと、この手の質問をするならもうちょっと非本質的なコードを減らす努力をすべきでは
Resultクラスとかfprintfしてる内容もほとんどは質問と関係ないよね
0294デフォルトの名無しさん2014/06/13(金) 23:14:43.28ID:1Fs3q4kS
勉強始めたばかりです
int _tmain(int argc, _TCHAR* argv[])
{
int a[4][4] = { 0 };

a[3][50] = 4;
printf("%d\n", a[3][50]);
return 0;
}
これ普通に実行出来てしまうのですが問題ないんですか?
0295デフォルトの名無しさん2014/06/13(金) 23:18:12.77ID:cshscv7f
>>294
どんな問題があると?
0296デフォルトの名無しさん2014/06/13(金) 23:22:57.79ID:1Fs3q4kS
4個しかint値を格納できないのに50個目を指定してるので
エラーが出るのかと思ったんですが・・・
0297デフォルトの名無しさん2014/06/13(金) 23:26:30.17ID:mc5MXeac
undefined behavior これを調べてみよう。
0298デフォルトの名無しさん2014/06/13(金) 23:29:05.62ID:9kILjAOy
まあスタックの深いところを壊してるから、
mainから呼ばれてるような関数でそれやったら
何が起きるかわからんが、
mainでやっても影響出る前に終了するだけ
0299デフォルトの名無しさん2014/06/14(土) 00:07:41.91ID:+uvAFgvW
今どきのOSはマルチセーフだからどんだけ壊そうと問題ないんですけどね(苦笑)
0300デフォルトの名無しさん2014/06/14(土) 00:27:03.95ID:XFunXvJd
マルチセーフ - Google 検索
https://www.google.co.jp/search?q=%E3%83%9E%E3%83%AB%E3%83%81%E3%82%BB%E3%83%BC%E3%83%95
0301デフォルトの名無しさん2014/06/14(土) 03:28:48.50ID:Zjdqnd2S
>>294
>問題ないんですか?
問題有ります。大きな問題です。
この問題が許容できない人はCを使ってはいけません。
0302デフォルトの名無しさん2014/06/14(土) 08:07:26.00ID:KH7MKyGi
実行時エラーが出ないのは範囲チェックすると実行速度に影響があるからだよ
Cの理念は安全性より速度だから
試してないけど、デバッグモードとかで実行すればエラーになるかもしれない
0303デフォルトの名無しさん2014/06/14(土) 10:29:18.54ID:hFdfnZbt
つーか未定義の意味が分かってないのだろう
配列の範囲外のアクセスは、未定義動作
問題(が何かは知らんが)が出るかどうかも定義されてない
0304デフォルトの名無しさん2014/06/14(土) 10:32:09.81ID:h7hlzhCn
警告が関の山だろ。
0305デフォルトの名無しさん2014/06/14(土) 12:01:26.53ID:oiD1D34h
配列で確保したのに1か所しか使わないのなら単なる変数でよくね?
みたいな強烈な最適化が掛かっているとかw
0306デフォルトの名無しさん2014/06/14(土) 13:35:03.86ID:RWrtwXRC
>>305
そこまでやれるなら警告ぐらいは出してるだろ
0307デフォルトの名無しさん2014/06/14(土) 14:07:39.00ID:BuWNtkHZ
>>306
最適化される場合でも警告無い方が多いだろ
0308デフォルトの名無しさん2014/06/14(土) 14:13:36.81ID:78zIkSm9
>実行時エラーが出ないのは範囲チェックすると実行速度に影響があるから

そうか?
そもそもC/C++の文法では不可能なんじゃね
0309デフォルトの名無しさん2014/06/14(土) 14:36:52.04ID:RWrtwXRC
>>307
>>305 まで最適化されるなら範囲外と言うことも当然わかってるので、警告を出すのは容易でしょ

>>308
文法で禁止してるならともかく、無理ってことはない
0310デフォルトの名無しさん2014/06/14(土) 14:38:45.92ID:BuWNtkHZ
>>309
当然わかってても警告出ない方が多いだろ
0311デフォルトの名無しさん2014/06/14(土) 16:00:33.93ID:kVfPiGuj
初心者歓迎とは書いてあるけど回答側に初心者が多すぎる
0312デフォルトの名無しさん2014/06/14(土) 16:03:45.01ID:1OMxBOxU
代わりに答えてくれてもいいのよ?
0313デフォルトの名無しさん2014/06/14(土) 16:09:07.45ID:MXfphaqR
まともな回答してるやつは>>297,>>301,>>303だけだな
0314デフォルトの名無しさん2014/06/14(土) 19:35:20.06ID:/tZfzh+B
配列の領域外チェックをすると、

  int i,j,a[4][4];

  for(i=0;i<4;i++)
    for(j=0;j<4;j++)
      a[i][j]=0;

のコードが、

  for(i=0;i<4;i++)
    for(j=0;j<4;j++){
      if( i<0 || 4<=i ) goto FAR_ABOUT;
      if( j<0 || 4<=i ) goto FAR_ABOUT;
      a[i][j]=0;
    }

って書くことだから、スピード遅くなるし、無駄だろ?
0315デフォルトの名無しさん2014/06/14(土) 19:46:10.28ID:1ZX8Mtke
>>314
C/C++は配列アクセスにもポインターを使うんだから
それじゃ済まないだろ。たとえば↓
void f(char* p) {
 p++;
 p[100]=0;
}
int main() {
 struct a{} i;
 f(rernterpret_cast<char*>(&i)+8);
}
どんなポインターを渡されても元のオブジェクトが何であって
そのどこを指しているか判断しなきゃいけないので
相当に無駄な処理が要るはず。
0316デフォルトの名無しさん2014/06/14(土) 19:51:58.01ID:E8x77aDB
最近のプログラマはDebugとReleaseで処理を分けないのか。
0317デフォルトの名無しさん2014/06/14(土) 20:00:09.47ID:wDOSJVHJ
唐突だな
分ける奴は死んでいいと思うよ
0318デフォルトの名無しさん2014/06/14(土) 20:10:45.52ID:7PfMrc3+
どうでもいいがスレタイに関係するとは言え「C/C++」とかお前らが言ってるのを
見ると惰性でしかモノが書けないのかと悲しくなる。
お前らが語ってるのはC++だけでCについては、これっぽっちも語ってない。
0319デフォルトの名無しさん2014/06/14(土) 20:28:41.54ID:CZsKRPnE
お前がCについて語りたいんなら語ってもええんやで
0320デフォルトの名無しさん2014/06/14(土) 20:53:47.53ID:oFvG3ION
規格が改訂されていることすら
世の中でスルーされてる程にどうでもいい言語。
語ることもないけどせめてスレが無くてはかわいそうだからと
一緒にしてもらってるんだろ?
0321デフォルトの名無しさん2014/06/14(土) 21:24:35.32ID:X8pvetDB
VC/C++でDLLを作成して.NET環境から利用したいんですがVC++のDLLの情報が多すぎて何が最適解なのか見当がつきません。
ググってみた結果、MFC DLLかATL DLL(COM)の2つまでしぼりましたがC++のライブラリやクラスが使いたい場合はCOMを作るしか選択肢がない?
DLLでもCでなくC++でクラスを呼び出したいときはどうすればいいんでしょうか
0322デフォルトの名無しさん2014/06/14(土) 21:37:21.76ID:dp0V8y28
C++でドトネト一択
0323デフォルトの名無しさん2014/06/15(日) 00:34:47.42ID:Keb4eqpb
調べたら確かにC++/CLIで書いてもネイティブと変わらないみたいですね
.NETだから遅いって思い込みがありましたけどこれならC++→C#ならC++/CLI使わないのは非効率的ですね
0324デフォルトの名無しさん2014/06/15(日) 00:55:41.33ID:AwU5LKmk
C++とかC#とかJavaとかヌルイ言語使ってないでC言語でがんばれ。
0325デフォルトの名無しさん2014/06/15(日) 01:48:12.89ID:yh/Aef2s
むしろC言語がヌルイ言語だろ
0326デフォルトの名無しさん2014/06/15(日) 02:02:30.73ID:gt68Xbbw
>>315
配列に範囲チェックを持たせたのがvectorのatかと
とりあえずC++を使うなら配列はほとんど使い道ないな
初心者のうちは配列も使いまくって色々勉強するべきだと思うけど
0327デフォルトの名無しさん2014/06/15(日) 02:42:12.34ID:MfuA3g7W
安全でない配列を使うのならそれが何であるかを見分ける仕掛けをしておくのが普通だが。
MFCならIsKindOfだが、同じクラスから派生させれば簡単に見分けられる。
0328デフォルトの名無しさん2014/06/15(日) 06:35:29.56ID:szsJKsbt
>>325
ひたすらエラーチェックと解放を書きまくるだけの
脳みそ筋肉なお仕事です
0329デフォルトの名無しさん2014/06/15(日) 10:31:53.98ID:qCbDK5l6
コーダー自体脳筋の仕事だと思うがその中でもさらにランクがあるのか。
0330デフォルトの名無しさん2014/06/15(日) 11:27:07.62ID:Yby/fsOm
>>293
Result は class ではなくて union です
0331デフォルトの名無しさん2014/06/15(日) 17:39:14.85ID:v8abNqS8
A union is a class de?ned with the class-key union;
0332デフォルトの名無しさん2014/06/16(月) 10:32:46.97ID:9KjdQk06
http://d.hatena.ne.jp/gintenlabo/20131211/1386771626
この記事の下の方の人の言っていることは本当ですか?
shared_ptrを使って管理してほしいときはコンストラクターを隠した方が
正解ですか?隠さない方がいいですか?
0333デフォルトの名無しさん2014/06/16(月) 11:58:11.20ID:5KvrIf5s
>>332
> 下の方の人の言っていること

具体的にはどの発言のこと?
0334デフォルトの名無しさん2014/06/16(月) 12:06:47.50ID:9KjdQk06
create_helperはincomplete typeを包含しているって怒られましたし継承だとprivate ctorが呼べない気がします.
0335デフォルトの名無しさん2014/06/16(月) 12:10:22.73ID:5KvrIf5s
>>334
ちゃんとインナークラスで書いてる?
クラス内部なら、private コンストラクタだろうが呼べるよ
0336デフォルトの名無しさん2014/06/16(月) 12:18:19.89ID:9KjdQk06
そうなんですか?
オーバーヘッドはmake_shared使う利点を覆い隠すほどではないというのなら
使ってもいいですよ。
なお後半の質問にもお答えください。
0337デフォルトの名無しさん2014/06/16(月) 12:55:14.62ID:hyWduaRc
>>335
make_sharedの中でnewするのに
インナーが関係すんの?
0338デフォルトの名無しさん2014/06/16(月) 13:16:51.72ID:9KjdQk06
pをmoveしてるけどしてはいけないんですよね。
本に書いてありました。
0339デフォルトの名無しさん2014/06/16(月) 13:18:41.88ID:5KvrIf5s
>>337
後半は、関数内クラスの話だから、インナーとは無関係だよ。
0340デフォルトの名無しさん2014/06/16(月) 13:20:27.97ID:5KvrIf5s
そうか、質問は2つに別れていると勘違いしていた。ごめん。

インナークラスは、factoryで、元のクラスの派生ではない。
関数内クラスは、派生関係であり、そちらはpublicなのでmake_sharedの文脈でnewできる。
0341デフォルトの名無しさん2014/06/16(月) 22:04:23.88ID:pS1FfmOM
この人はshared_ptrのコンストラクターに親を殺されでもしたの?
他からnewできないような特殊な状況なんだから
return shared_ptr<baka>{new baka{}};
でいいじゃないか
0342デフォルトの名無しさん2014/06/17(火) 22:31:31.72ID:b7hbDm+Y
質問です。

int x[2];
x[0] = 0x00010203;
x[1] = 0x04050607;
char* p = reinterpret_cast<char*>(x);
for(int i = 0; i < 8; i++){
cout << (int)(*p) << endl;
p++;
}
の結果が
3 2 1 0 7 6 5 4となるのはなぜですか?教えてください
0343デフォルトの名無しさん2014/06/17(火) 22:38:14.46ID:JQ3yohPe
>>342
使っているCPUが、リトルエンディアンといって、
下位の桁(ここでは03とか07)を若いアドレスに入れる
という方式を採用しているためです。
0344デフォルトの名無しさん2014/06/17(火) 22:39:56.45ID:l1usV0Mc
リトルエンディアンで検索
0345デフォルトの名無しさん2014/06/17(火) 22:59:14.65ID:b7hbDm+Y
なるほど、よく分かりました。
0346デフォルトの名無しさん2014/06/19(木) 03:27:54.23ID:bbnXoqqs
当時インディアンの部族と勘違いしてました。
0347デフォルトの名無しさん2014/06/19(木) 06:44:45.95ID:BRW9+QBS
ガリバー旅行記ネタだろう?
まあ小人国のころはまだ風刺が冴え渡っていたという話だが、書いているうちに狂ってきたのか、馬の国はほとんどむちゃくちゃですね
ヒント:「ヤフー」=ヘブライ語で「ユダヤ人」、この語は「ヘブライ語定冠詞の不規則変化」における有名単語、ヘブライ語を習うと最初の方でかならずやる
0348デフォルトの名無しさん2014/06/22(日) 18:11:55.90ID:waKqYOf3
visual studio のC++のコンソールアプリでmain()の名前を変えずに、
コンソールを出さないようにする方法はありますか?有れば教えてくれ。
0349デフォルトの名無しさん2014/06/22(日) 18:13:57.61ID:mgZTcG6H
http://msdn.microsoft.com/ja-jp/library/windows/desktop/ms681952%28v=vs.85%29.aspx
0350デフォルトの名無しさん2014/06/22(日) 18:18:59.30ID:mgZTcG6H
リンクオプションで何かするんだった気がする
0351デフォルトの名無しさん2014/06/22(日) 18:20:36.75ID:mgZTcG6H
http://msdn.microsoft.com/ja-jp/library/vstudio/fcc1zstk%28v=vs.110%29.aspx
リンクオプションで /subsystem:windows
だったかな
0352デフォルトの名無しさん2014/06/22(日) 18:27:06.55ID:b06vElF6
-Dmain=my_app_driver_main
0353デフォルトの名無しさん2014/06/22(日) 18:32:39.68ID:ed71yomS
/entry:mainCRTStartupも付けろ
0354デフォルトの名無しさん2014/06/22(日) 18:34:39.18ID:waKqYOf3
main()の名前で作ったプロジェクトでコンソール出さないようにしたいんだけれど、
どうやっても
error LNK2019: 未解決の外部シンボル _WinMain@16 が関数 ___tmainCRTStartup で参照されました。
になってしまう。
0355デフォルトの名無しさん2014/06/22(日) 18:43:13.97ID:D6bEseuP
気室の位置からするとビッグエンディアンの方が無駄が無くて正しいと思う。
0356デフォルトの名無しさん2014/06/22(日) 18:46:22.07ID:JOue68DD
ビックとリロ どっちが86系だっけって一瞬迷うよねw
0357片山博文MZ悪魔崇拝 ◆T6xkBnTXz7B0 2014/06/22(日) 18:48:00.57ID:b06vElF6
>>354
mainを呼び出すWinMain関数を作れ。
0358デフォルトの名無しさん2014/06/22(日) 20:54:56.47ID:2ZGZNFaO
>>354
もし、親プロセスが子プロセスの標準出力を取り込みたいのなら
http://support.microsoft.com/kb/190351/ja
で、コンソールウィンドウを生成しないと思う
0359デフォルトの名無しさん2014/06/22(日) 21:14:37.62ID:NYb5iLI3
空のプロジェクト作ってからプロジェクトのサブシステムをwindowsに変更すればいいと思うけど
0360デフォルトの名無しさん2014/06/22(日) 21:38:18.82ID:899IlM/P
明解C言語の第7章の演習難しすぎなんだけど…
0361デフォルトの名無しさん2014/06/22(日) 22:01:02.05ID:I8BwYMoX
ここは360の日記帳
0362デフォルトの名無しさん2014/06/22(日) 22:10:42.21ID:b06vElF6
ご質問は的確に。
ご利用は計画的に
0363デフォルトの名無しさん2014/06/22(日) 22:26:05.97ID:ECBMSpai
要素数が後で要素型がint型である配列を、そっくり別の配列にコピーして、それぞれの要素の値を表示するプログラムを作成せよ。
実行例
va vb
-------------
1 1
10 10
16 16 みたいな感じです。
scanfを使うと改行してしまいうまくできないです。どーすればいいでしょうか。
0364デフォルトの名無しさん2014/06/22(日) 22:32:13.30ID:l/vaCLkN
要素数が後でってどういう意味

memcpyじゃあかんのか
0365デフォルトの名無しさん2014/06/22(日) 22:59:06.47ID:LRekzGzB
>>363
お前説明がとことんヘタだなw
0366デフォルトの名無しさん2014/06/22(日) 23:06:35.45ID:sJMyqLKA
マジで「要素数が後」ってどういう意味よ?
0367デフォルトの名無しさん2014/06/22(日) 23:09:25.87ID:ed71yomS
意味不明な文章をググった結果
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q12130914412
0368デフォルトの名無しさん2014/06/22(日) 23:13:20.47ID:sJMyqLKA
>>367
そういうことかw

なんで「go」って打ったんだろ?普通に「5」って打てばいいのに。
0369デフォルトの名無しさん2014/06/22(日) 23:16:05.79ID:z/PGDlee
> 要素数が5で要素型がint型である配列を、そっくり別の配列にコピーして、それぞれの要素の値を表示するプログラムを作成せよ。という課題で、実行例が
> va vb
> ----------
> 2 2
> 5 5
> という感じです

うん
訳わからん。
0370デフォルトの名無しさん2014/06/22(日) 23:35:57.78ID:Hd58Lxeq
端末で
> 1 SPC(入力) 1 CRLF (出力)
> 10 SPC(入力) 10 CRLF (出力)
> 16 SPC(入力) 16 CRLF (出力)
これは難度高いような...

非標準 windows 系の kbhit に相当する
1文字タイプする毎に確実にやってくる(バッファリングしない)入力って標準であったっけ?
0371デフォルトの名無しさん2014/06/22(日) 23:38:15.59ID:ECBMSpai
すいません。打つの長いから音声入力してテキトーに直したんですけど文章おかしかったです。
0372デフォルトの名無しさん2014/06/22(日) 23:39:31.75ID:WX4sXzY8
あるわけがないが
kbhitが使えない環境を見たことがない
0373デフォルトの名無しさん2014/06/22(日) 23:39:39.82ID:ECBMSpai
まあその知恵袋の通りです。助けてください
0374デフォルトの名無しさん2014/06/22(日) 23:43:02.86ID:ECBMSpai
学校指定のVine Linux使ってます。kbhitはまだ習ってないです。
0375デフォルトの名無しさん2014/06/22(日) 23:44:53.72ID:Hd58Lxeq
学校の課題なら

最後の表示の部分は
 printf("va vb\n----------\n");
 for (i=0; i<n; i++) printf("%d %d\n", va[i], vb[i]);
でよさそうなもんだが

本当にコンソールから、配列の値(と個数?)の入力を要求しているのだろうか?
0376デフォルトの名無しさん2014/06/22(日) 23:46:43.49ID:l/vaCLkN
先に質問した知恵袋で教えてもらえば
0377デフォルトの名無しさん2014/06/23(月) 00:08:28.19ID:1CSrg3US
知恵袋に回答つかなくなったんです(´;ω;`)
0378デフォルトの名無しさん2014/06/23(月) 00:09:56.81ID:1CSrg3US
問題文が難しいけど、もしかしてこれ入力させなくていいのかな?
0379デフォルトの名無しさん2014/06/23(月) 00:29:41.73ID:A9socaCf
まずは正確な問題文をコピーできるようになってからスタートだな
0380デフォルトの名無しさん2014/06/23(月) 00:34:14.21ID:1CSrg3US
スタートできてないんですね。残念です。
0381デフォルトの名無しさん2014/06/23(月) 00:46:24.75ID:q7neCfh7
non block にしてもエンター打たないと入っていかないんだっけ?
0382 ◆QZaw55cn4c 2014/06/23(月) 03:20:26.99ID:0A44UZin
>>372
kbhit() は linux で使えるのか?
0383デフォルトの名無しさん2014/06/23(月) 06:55:34.02ID:1CSrg3US
ちょっと調べたんですけど代わりになるコピペがあるっぽいです。
0384デフォルトの名無しさん2014/06/23(月) 10:58:30.47ID:CA6zRXXy
いや、>>382は「>>372はLinuxを知らないの?」という意図だろう
0385デフォルトの名無しさん2014/06/23(月) 11:21:16.55ID:v1rv9V0E
Linuxってcurses.h使えないん?
0386デフォルトの名無しさん2014/06/23(月) 11:25:47.89ID:BsRgtYHO
おまいら意地悪だな
質問者がテキトーで意味不明でもいいって言ってるんだから
それなりの質のものを与えればいいんだよ
0387デフォルトの名無しさん2014/06/23(月) 11:30:32.35ID:QeZRRlBU
と言う奴は何も与えない法則
0388デフォルトの名無しさん2014/06/23(月) 11:50:52.15ID:iGeNWm0J
constなオブジェクトしか作れないクラスってできますか?
constのコンストラクターををpublicにしてと非constのをprivateにして作ってみたけどエラーでした。
ファクトリー関数を作るという考えに達しましたが、生オブジェクトが作れず柔軟性に欠けるという結論に達しました。
0389デフォルトの名無しさん2014/06/23(月) 11:59:07.07ID:v1rv9V0E
>生オブジェクトが作れず
why?
0390デフォルトの名無しさん2014/06/23(月) 12:00:29.07ID:IfFXpd8g
できません
0391デフォルトの名無しさん2014/06/23(月) 12:09:59.87ID:iGeNWm0J
だって
コンストラクターをプライベートにして
const a * =a::create();あるいは
const shared_ptr<a>=a::create();
のようにするわけでしょ。
0392デフォルトの名無しさん2014/06/23(月) 12:11:49.51ID:v1rv9V0E
試してないけど
コピー禁止にしたら
const unko &&u = unko_fucktory();
みたいに束縛するしかなくなるかなと思った
0393デフォルトの名無しさん2014/06/23(月) 12:23:24.28ID:iGeNWm0J
ポインターがconstじゃなくてオブジェクトがconstだからコピーはできるでしょ。
0394デフォルトの名無しさん2014/06/23(月) 12:24:13.65ID:QJy7NoXE
文法的constにこだわるより代入不可かつメンバ変数がprivateでセッタも持たないクラスでいいんじゃねえの
0395デフォルトの名無しさん2014/06/23(月) 12:29:48.42ID:iGeNWm0J
基底クラスをインプットアウトプット可能にして
基底クラスががconstの時にのみ代入できる派生クラスをつくりたいんですけど。
0396デフォルトの名無しさん2014/06/23(月) 12:32:23.87ID:v1rv9V0E
>>393
こんな感じであかんの?
http://ideone.com/yosr6c
0397デフォルトの名無しさん2014/06/23(月) 12:35:02.23ID:L6qoulCe
constメンバしか持ってないクラスじゃだめなん?
0398デフォルトの名無しさん2014/06/23(月) 12:37:31.43ID:iGeNWm0J
>>390
ありがとうございます。
参考になりました。
0399デフォルトの名無しさん2014/06/23(月) 14:28:02.48ID:qkRWmbbn
vim 辺りで16進数入力モードでELFを入力するのかと思た
0400デフォルトの名無しさん2014/06/23(月) 17:18:09.44ID:IuTQaNwU
>constなオブジェクトしか作れないクラスってできますか?
 ↓
>できません
 ↓
>ありがとうございます。
>参考になりました。

潔い奴だな
0401デフォルトの名無しさん2014/06/23(月) 19:41:04.57ID:0A44UZin
>>383
おう貴様、俺のコピペ騒動の顛末をよく知っているな‥あれは一生の不覚だ‥
http://hibari.2ch.net/test/read.cgi/tech/1289715349/320
http://hibari.2ch.net/test/read.cgi/tech/1289715349/331
http://cboard.cprogramming.com/c-programming/63166-kbhit-linux.html
0402デフォルトの名無しさん2014/06/23(月) 19:51:24.00ID:hMj0GtJU
VISUAL STUDIOでプリプロセッサの質問ですが、

void func(){ // これは正常
#ifdef _DEBUG
string PATH = "C:/temp/Debug/bin";
#else
string PATH = "C:/temp/Release/bin";
#endif
cout << PATH << endl;
}

を

#ifdef _DEBUG
#define PATH_DR Debug
#else
#define PATH_DR Release
#endif

void func()
{
string PATH = "C:/temp/"PATH_DR"/bin"; // ここエラー
cout << PATH << endl;
}
こんな風に置換できないでしょうか?
0403デフォルトの名無しさん2014/06/23(月) 19:57:24.75ID:6uMGjEfX
説明するのも面倒なんだが・・・
ダブルクォーテーションの囲いを3つに分けて連続的に記述すれば
ひとつにつながる。 あとはわかるよな?
0404デフォルトの名無しさん2014/06/23(月) 19:59:18.35ID:6uMGjEfX
でさ、\ のエスケープシーケンスわすれてるだろ?
0405デフォルトの名無しさん2014/06/23(月) 20:02:42.21ID:6uMGjEfX
失敬、/ か…
0406片山博文MZ悪魔崇拝 ◆T6xkBnTXz7B0 2014/06/23(月) 20:12:56.68ID:qZVVaTos
>>402
「プリプロセッサ 文字列化」で検索
0407デフォルトの名無しさん2014/06/23(月) 20:20:46.80ID:dH9hXQor
>403-405が痛過ぎる。
0408デフォルトの名無しさん2014/06/23(月) 20:21:35.91ID:QkN4ZNHL
PATH_DR を 文字列で定義しない場合は、うまくないんじゃ?
ttp://ideone.com/TPzMvf

"C:/temp/" "PATH_DR" "/bin" は連結するけど PATH_DRは展開されず
プリプロセッサ引数の文字列化
#define TOSTR(a) #a
も、欲しいのが2段展開になるのはダメっぽ
0409デフォルトの名無しさん2014/06/23(月) 20:25:14.15ID:6uMGjEfX
#ifdef _DEBUG
#define PATH_DR "Debug"
#else
#define PATH_DR "Release"
#endif
0410デフォルトの名無しさん2014/06/23(月) 20:27:42.86ID:6uMGjEfX
#define PATH_(PATH_DR) "C:/temp/" #PATH_DR "/bin"
#ifdef _DEBUG
#define PATH PATH_(Debug)
#else
#define PATH PATH_(Release)
#endif
0411デフォルトの名無しさん2014/06/23(月) 20:29:10.60ID:EG1g92wv
>>402
なあ、Windowsってのはファイルやフォルダーのパスを
/ でなく \ で区切るんだが、
どうしてオマエはそんなとんちんかんな糞コードにしてるんだ?
0412デフォルトの名無しさん2014/06/23(月) 20:31:11.21ID:6uMGjEfX
ダブルクォーテーションも付けない糞コード晒すとか普通に馬鹿なんだろ
0413デフォルトの名無しさん2014/06/23(月) 20:35:51.47ID:sWcUFpnw
>>411
あほう
http://msdn.microsoft.com/en-us/library/aa365247.aspx
0414デフォルトの名無しさん2014/06/23(月) 20:37:52.99ID:QkN4ZNHL
ごっめーん 2段展開 思い出した

#define PATH_DR Release
#define TOSTR(a) #a
#define EXPAND(a) TOSTR(a)

"C:/" EXPAND(PATH_DR) "/bin";

これで展開される。 マクロは奥深いね
0415デフォルトの名無しさん2014/06/23(月) 20:43:39.90ID:6uMGjEfX
糞面倒くさい
0416デフォルトの名無しさん2014/06/23(月) 20:44:41.54ID:n0ZUNL3t
金や手間を掛けずマクロを読み書きしたいなら
NetBeansのmacro expansionのプレビューがいいよ
0417デフォルトの名無しさん2014/06/23(月) 20:49:19.58ID:hMj0GtJU
みなさんコメントありがとうございました。
403さん方式でうまく行きましたが、414さんに高度な方法を
教えていただきましたので、今回は、そっちを使わせていただきます。
0418デフォルトの名無しさん2014/06/23(月) 21:01:19.47ID:EG1g92wv
>>413
根拠も述べずに『あほう』とか
よっぽどストレスがたまってんだなオマエは

>The�path�to a specified file consists of one or morecomponents, separated by a special character (a backslash),
0419デフォルトの名無しさん2014/06/23(月) 23:53:08.58ID:/7nzoUHh
あほうなのにあほうと呼ばれる事に慣れてないのか?
0420デフォルトの名無しさん2014/06/23(月) 23:54:43.74ID:X5scUM3c
>>418
ようアホ

本題とはずれた所突いてどうするんだ
0421デフォルトの名無しさん2014/06/24(火) 00:08:30.10ID:oDNeDxJ6
#ifdef _DEBUG
#define PATH_DR ”Debug”
#else
#define PATH_DR ”Release”
#endif
0422デフォルトの名無しさん2014/06/24(火) 01:56:45.26ID:6gxdI5ta
>>418
あほうと言ってもらえるだけありがたいと思え。
言われなきゃ、お前は自分があほうという事を自覚できないままだったぞ。
0423デフォルトの名無しさん2014/06/24(火) 19:25:53.35ID:agNpfg/I
おまえらストレスフルだな本当に
0424デフォルトの名無しさん2014/06/24(火) 20:02:17.76ID:6gxdI5ta
適度なストレスをうけていないと>>418のような無自覚なあほうが出来てしまう
0425デフォルトの名無しさん2014/06/24(火) 22:28:04.40ID:zV13MlTP
人を罵っているときが人生で一番輝いている
0426デフォルトの名無しさん2014/06/25(水) 07:28:33.56ID:RKaVXrZj
演算子オーバーロードについて教えてください。

class C {
public:
int value;
bool operator==(const C& c) { return c.value == value; }
friend bool operator==(const C& c1, const C& c2) { return c1.value != c2.value; }
};

このような場合、Cのインスタンスc1, c2を c1 == c2 と比較した場合、メンバ関数のoperator==が呼ばれるみたいなんです。
この優先順位って規格等で決まっているのでしょうか。
0427デフォルトの名無しさん2014/06/25(水) 07:37:24.16ID:zdDoEXg+
はい
0428デフォルトの名無しさん2014/06/25(水) 10:12:36.20ID:51nve3hM
ストレスが無くなって甘えた人間になると
何をしでかすか判らないのが人間
0429デフォルトの名無しさん2014/06/26(木) 00:05:04.15ID:ovR77aW7
VS2013 c++でのfatal error C1001 の回避のしかた教えて!

template<size_t... indice>
struct index_tuple{ };

template <size_t first, size_t last, typename result = index_tuple<>, bool flag = (first >= last)>
struct index_range
{ typedef result type; };

template <size_t first, size_t last, size_t... indice>
struct index_range<first, last, index_tuple<indice...>, false> :
index_range<first + 1, last, index_tuple<indice..., first>> { };

template <size_t N>
struct dummy {
};

template <size_t N>
auto test(const dummy<N>& ) ->typename index_range<1, N+1>::type
{
return typename index_range<1, N+1>::type{};
}

ここで、
test(dummy<0>{});
とすると、

fatal error C1001: コンパイラで内部エラーが発生しました。
(コンパイラ ファイル 'msc1.cpp'、行 1325)
この問題を回避するには、上記の場所付近のプログラムを単純化するか変更してください。

と出てしまいます。
0430デフォルトの名無しさん2014/06/26(木) 01:09:19.49ID:ipx8s2Bd
http://grayhole.blogspot.jp/2010/06/vc-c1001.html
っていうのはあるね
あと、いらんヘッダーファイル入れるなとか、
まるごと引っ越せとか、
ローカルフォルダに置けとか
0431デフォルトの名無しさん2014/06/26(木) 05:21:50.40ID:j1UWc2h0
>>429
1325行ってどの辺りだよ?
0432デフォルトの名無しさん2014/06/26(木) 07:08:34.51ID:ovR77aW7
>>431
すいません。 msc1.cpp ってのはプロジェクト内を見渡しても存在しないし、全然身に覚えのないファイルなんです。

>>430
とりあえずいろいろやってみます。

上の test は1変数だけど、2変数関数にするとエラーにならなくて、もうわけわか。
0433デフォルトの名無しさん2014/06/26(木) 07:37:23.23ID:u2uRfkpu
>>431
コンパイラ ファイルだよソースファイルじゃないよ
0434デフォルトの名無しさん2014/06/26(木) 11:00:47.58ID:qSntLVVK
とりあえずVCのアップデートが出てないか確認
まあうまく行ったとしてエラーメッセージが改善されるだけだろうけどw

ダメならそのままMSにバグレポ出すべき
0435デフォルトの名無しさん2014/06/26(木) 12:35:56.34ID:j1UWc2h0
autoじゃなくてdecltypeにしてみてもダメかね?
04364292014/06/26(木) 20:06:44.11ID:ovR77aW7
>>430-430
>>433-435
レスどうもありがと
抜本的な解決方法じゃないけどいろいろ弄って見つけた

template <size_t N>
auto test(const dummy<N>& ) ->typename index_range<1, N+1>::type
{
return typename index_range<1, N+1>::type{};
}
に対して、意味のないデフォルト引数をくっつけて形式上2変数にしてみた。

template <size_t N, size_t D = 1>
auto test(const dummy<N>& , dummy<D> = dummy<D>{}) ->typename index_range<1, N+1>::type
{
return typename index_range<D, N+1>::type{};
}

これでC1001エラーが消えました。
関数の引数だけじゃダメでテンプレート引数も2つにしなきゃダメだった。

バグレポについては考えてみます。
0437デフォルトの名無しさん2014/06/26(木) 20:13:37.50ID:YPGoBzAC
1 じゃなくて 1UL だよ size_t 型の場合は
0438デフォルトの名無しさん2014/06/26(木) 20:52:22.88ID:u2uRfkpu
clバージョン18.00.30501でコンパイルエラー起きないぜ
0439デフォルトの名無しさん2014/06/26(木) 23:09:30.90ID:MiUhOFNm
>>437
どうして人を陥れるようなことを教えるんだ?
0440デフォルトの名無しさん2014/06/26(木) 23:15:36.79ID:aYCrZVlu
>>438
俺も同じバージョンでコンパイル通った
0441デフォルトの名無しさん2014/06/27(金) 01:19:10.11ID:mUWEtc+x
autoなのに->で返り型これよって指定ってアホくさいと思うけど
なんでこうしないといけないんだ?
return typename index_range<D, N+1>::type{}; で->は不要だろ
0442デフォルトの名無しさん2014/06/27(金) 06:51:44.14ID:aC5lLxyA
>>441
C++14で不要になるんだっけ?

>>439
ULじゃなくてUだってこと?
0443デフォルトの名無しさん2014/06/27(金) 08:17:29.10ID:ey7kK0Y3
size_tの幅は規定がないってことかな。
0444デフォルトの名無しさん2014/06/27(金) 10:04:43.86ID:qmZNQqL1
初心者向けページで勉強中、「Win32SDKヘルプ」を見るように書いてありましたが、これがどこにあるのかわかりません。
関数名やクラス名でググるとたいていトップにMSDNのリファレンス?が出てきますが、これとは別のものですか?
0445デフォルトの名無しさん2014/06/27(金) 10:22:34.34ID:aqfOSeMl
なんでもかんでも auto で置き換えるやつはヘタクソだよな
0446デフォルトの名無しさん2014/06/27(金) 15:36:10.28ID:4gi1qeUb
>>444
Win32SDK→PlatformSDK→Windows Kitと名称が変わっている。
世の中にはカビの生えた情報を垂れ流しっぱなしにするゴミが多くて困ったもんだ。
そういううんこページで勉強してもうんこにしかなれないよ。

MSDN(英語版に限る)のリファレンスを見ればよい。
日本語版はウソが書いてあるから信用しないように。
0447デフォルトの名無しさん2014/06/27(金) 15:49:57.79ID:6IjfwyP8
>>444
vc++2.0 に付いてきたな
4.0以降で見かけた事は無い
0448デフォルトの名無しさん2014/06/27(金) 18:09:44.49ID:rMF85+sd
あと
Microsoft SDK
Windows SDK
.NET Framework SDK
みたいのも存在していたような
04494442014/06/27(金) 18:51:45.92ID:wnZkgc0U
MSDNを見ることにします。
ありがとございました。
0450デフォルトの名無しさん2014/06/27(金) 21:46:52.79ID:QrYLfw5T
>>446
逆に言えば、オブラートでつつんでつつんでここまでやんねーと理解できんっちゅー
話でもあるのでは
04514442014/06/27(金) 23:44:36.99ID:qmZNQqL1
444です。解決しなかったので再度の質問です。
PlaySound関数を使うためにはWinmm.lib(もしくはwinmm.lib? 日本語のMSDNだと小文字だった)をリンクする必要があるようなのですが、
System32フォルダ内に(どころかHDD内のどこにも)Winmm.libが見つからずうまくリンクができません。
代わりにSystem32フォルダ内にwinmm.dll、
C:\Program Files (x86)\Windows Kits\8.0\Lib\win8\um\x86にWinMM.libなどがありましたが、これらは使えますか?
0452デフォルトの名無しさん2014/06/27(金) 23:54:55.89ID:SKslXSwB
WinMM.libでいいよ
大文字小文字の区別ない。
0453デフォルトの名無しさん2014/06/27(金) 23:55:40.45ID:JPj7GtDB
>>451
再現可能な最低限のソース、及びそのコンパイル時に置けるエラーメッセージを貼りましょう
0454デフォルトの名無しさん2014/06/28(土) 00:01:09.59ID:Teu5hNgs
ソースとエラーメッセージ関係無い

#pragmaでリンクしたらいい
0455デフォルトの名無しさん2014/06/28(土) 00:06:05.44ID:Il1cbfhd
>>451
そのwinmm.dllからwinmm.libを作って使う。
04564532014/06/28(土) 00:21:52.94ID:9xXyI8Cq
>>454
> ソースとエラーメッセージ関係無い
マジか・・・
エラーメッセージ意味なしw
0457デフォルトの名無しさん2014/06/28(土) 00:42:03.91ID:s3FxkxPv
>>451
うんこページで勉強してもうんこにしかなれないと忠告したのに
自らうんこになろうとしてる奴
0458デフォルトの名無しさん2014/06/28(土) 00:46:26.58ID:Teu5hNgs
>>456
> 見つからずうまくリンクができません。
って既に問題把握してるからな
0459デフォルトの名無しさん2014/06/28(土) 01:10:33.24ID:9xXyI8Cq
>>458
あぁ、そうなのかぁ

それならそれでパスが通ってないだけだから
#pragmaでってのもおかしな話だな


インストールしたてならlogin/logout or reboot
そうでないなら再インストール

でいいのでは?
0460デフォルトの名無しさん2014/06/28(土) 03:55:21.03ID:Teu5hNgs
>>459
> C:\Program Files (x86)\Windows Kits\8.0\Lib\win8\um\x86にWinMM.libなどがありましたが
場所わかってんだからパス通ってなくても相対・絶対パスでいけるだろ
0461デフォルトの名無しさん2014/06/28(土) 06:20:32.48ID:s3FxkxPv
>>459
コマンドラインで開発したこと無いシロウトは黙ってろよ。
0462デフォルトの名無しさん2014/06/28(土) 09:58:45.31ID:iYeFzTkZ
コマンドラインで開発(笑)
0463デフォルトの名無しさん2014/06/28(土) 10:23:09.77ID:Z5Hu91SB
よーしパパ、コマンドラインダウンロードしちゃうぞ
0464デフォルトの名無しさん2014/06/28(土) 12:36:58.83ID:38QDfB8j
コマンドラインで開発してプロになろう!
0465デフォルトの名無しさん2014/06/28(土) 12:59:08.34ID:pkB82Erl
x コマンドライン
o DOS窓
0466デフォルトの名無しさん2014/06/28(土) 13:06:31.43ID:38QDfB8j
DOS窓はホントにDOSだったよなー。
それに比べてコマンドラインは・・・
0467デフォルトの名無しさん2014/06/28(土) 13:07:37.39ID:38QDfB8j
コマンドプロンプトか。
0468デフォルトの名無しさん2014/06/28(土) 13:08:45.48ID:iagTbHZo
>>465は昭和生まれの労害ジジイ
0469デフォルトの名無しさん2014/06/28(土) 13:10:23.08ID:38QDfB8j
俺も昭和生まれ。
0470デフォルトの名無しさん2014/06/28(土) 13:12:27.15ID:5aCDTjMV
コマンドラインで開発ってソースをcatで書いてsedで修正するんじゃないのか。
0471デフォルトの名無しさん2014/06/28(土) 13:14:06.07ID:38QDfB8j
最初はedlinから。
0472デフォルトの名無しさん2014/06/28(土) 13:58:56.07ID:s3FxkxPv
IDEに対するコマンドラインだろうが。素人の笑いポイントは良くわからんな。
0473デフォルトの名無しさん2014/06/28(土) 14:47:45.55ID:Wnh+uZwR
素人は素人と呼ばれると反発する生き物
0474デフォルトの名無しさん2014/06/28(土) 15:44:47.92ID:Teu5hNgs
○○と言われて反発するのは実際に○○だから
0475デフォルトの名無しさん2014/06/28(土) 16:51:09.39ID:Rh3ZMg97
>>472
IDEという事はdevenvだよね?
プロは半端ないな
0476デフォルトの名無しさん2014/06/28(土) 19:13:40.25ID:QnAT7eoy
プロのご機嫌を損ねるのはこのスレには相応しくないな。
二度と書き込まないでくれ。
0477デフォルトの名無しさん2014/07/02(水) 16:43:39.23ID:84r9MisV
一つのクラスに対してヘッダファイルを複数に分けて内部用と公開用にするのってあり?
0478デフォルトの名無しさん2014/07/02(水) 18:31:15.25ID:8mlFMPKr
>>477
ラッパー作ってそっちだけ公開すりゃええんじゃなかろうか
0479デフォルトの名無しさん2014/07/02(水) 21:49:31.30ID:84r9MisV
>>478
天才
0480デフォルトの名無しさん2014/07/02(水) 22:57:25.47ID:84r9MisV
連投で申し訳ないんですが
とあるクラスからしか生成出来ないようなクラスを作りたい場合はどうすればいいんですか
0481デフォルトの名無しさん2014/07/02(水) 22:59:12.96ID:3z6KjbXy
ファクトリーパターン
0482デフォルトの名無しさん2014/07/02(水) 23:13:24.48ID:84r9MisV
>>480
結局それってコンストラクタを公開しなくちゃいかんでね?
0483デフォルトの名無しさん2014/07/02(水) 23:13:50.03ID:84r9MisV
>>481
でした
0484デフォルトの名無しさん2014/07/02(水) 23:15:09.87ID:3z6KjbXy
friend使えば
0485デフォルトの名無しさん2014/07/02(水) 23:16:33.65ID:NeSEEyGn
コンストラクタ非公開にして特定のクラスをfriendに。
0486デフォルトの名無しさん2014/07/02(水) 23:20:38.52ID:84r9MisV
friendしかないのか…
あざす
0487デフォルトの名無しさん2014/07/03(木) 14:41:25.22ID:BcO5jXIS
明解C言語で現在第9章の文字列を学んでいて

文字列 str の中に、文字 c が含まれていなければ(複数ある場合は、最も先頭側とする)、
その添字を返し、含まれていなければ -1 を返す関数
int str_char(const char str[], int c) {¥* ...........*¥}
を作成せよ。

という演習問題があるのですが
なぜ文字の変数 c を探すのに関数には int で渡すのでしょうか?
0488デフォルトの名無しさん2014/07/03(木) 14:46:31.20ID:DIfIjFzr
気になるなら
int str_char(const char str[], char c) {¥* ...........*¥}
で造ってみてごらん
0489デフォルトの名無しさん2014/07/03(木) 14:54:16.68ID:beuPiWz3
実際に探すのは文字自体ではなくバイト列だからだ
でおk?
0490デフォルトの名無しさん2014/07/03(木) 15:01:51.42ID:2p/tvR1B
>>488
それで何がわかる?
0491デフォルトの名無しさん2014/07/03(木) 15:23:56.95ID:gJnQQam8
>>487
charでも構わないがintの方が自然だと思う
参考
http://stackoverflow.com/questions/2394011/why-does-strchr-take-an-int-for-the-char-to-be-found
0492デフォルトの名無しさん2014/07/03(木) 15:36:02.89ID:BqnntUei
最近のバカはスタックの格納単位が4バイトアラインということも知らないのか
0493デフォルトの名無しさん2014/07/03(木) 15:55:37.22ID:6Wb/t2WZ
初心者スレで何言ってんだお前
0494デフォルトの名無しさん2014/07/03(木) 15:55:42.73ID:M7lcZRBS
>>491
要するに大昔の悪習が変えられなくてズルズル続いているということだな
0495デフォルトの名無しさん2014/07/03(木) 16:02:53.28ID:UCpRmhSf
>>491
「自然だと思う」根拠を参考ページに頼らずに一つ。

>>492
4バイトアラインであることと、charかintかとの関連は?

エンジニアたるもの思考停止に陥らずに自分で答えられなきゃダメだよ。
0496デフォルトの名無しさん2014/07/03(木) 16:05:22.56ID:M7lcZRBS
おまいら長年バカを貫いている大先輩に敬意を払えよ
0497デフォルトの名無しさん2014/07/03(木) 16:10:30.76ID:BqnntUei
説明すんのマンドクセ
ハフマン辺りからか
0498デフォルトの名無しさん2014/07/03(木) 16:11:33.95ID:BqnntUei
ハフマンじゃねぇやノイマンだった
0499デフォルトの名無しさん2014/07/03(木) 16:15:09.29ID:BqnntUei
まあ32ビットの世界だと4バイトに最適化されているスタックに
対してchar型はおまいらの気づかない間に4バイトに自動変換されて
いるということだ。 movsbl みたいな命令を使ってな。
0500デフォルトの名無しさん2014/07/03(木) 16:20:09.88ID:BqnntUei
最初から int としてパラメタ扱っていれば、この自動変換のオーバーヘッドが取り除けるのだよ。
0501デフォルトの名無しさん2014/07/03(木) 16:34:45.78ID:nGz5aJi/
>>495
スタックにpush するときに4バイトに拡張されるyo。
0502デフォルトの名無しさん2014/07/03(木) 16:54:33.11ID:EbPflSnN
内部で4バイトに拡張されようとアラインされようと
char値はcharのまま渡される。
よってintの方が自然などと言うことはありえない。
intが大好きな労害ジジイが言い訳してるだけ
0503デフォルトの名無しさん2014/07/03(木) 16:59:05.73ID:BqnntUei
push命令はクロック食うから、引数が大量にある場合は、スタックポインタからのオフセットで mov 命令で代入してからいっぺんにスタックポインタからオフセット分を引き算するのがトレンディなコンパイラのアセンブル方式だよ
0504デフォルトの名無しさん2014/07/03(木) 17:02:26.98ID:lZc14wWH
VS2013で
struct MyData{
 const char name[5] = "Data";
 int i;
};
としてビルドすると、
error C2536: 'MyData::MyData::name' : クラス、構造体、共用体のメンバーは、初期化できません。
となるのですが、どうしたらエラー出ないように出来ますか?
0505デフォルトの名無しさん2014/07/03(木) 17:05:43.05ID:e/Bdb4Z+
構造体のメンバーは、初期化できません

だろ。そのままだ。そこをなおせ。
0506デフォルトの名無しさん2014/07/03(木) 17:09:31.55ID:EbPflSnN
----baka.h
struct MyData{
 const char name[5];
 int i;
};

----baka.cpp
#include "baka.h"
const char MyData::name[] = "Data";
これでOK
0507デフォルトの名無しさん2014/07/03(木) 17:17:08.47ID:BqnntUei
>>502
おまえの頭の中ではそうなんだろう
おまえのアタマの中のオマエワールドではな
0508デフォルトの名無しさん2014/07/03(木) 17:29:30.62ID:lZc14wWH
>>506
IntelliSense: 静的でないデータ メンバーはそのクラスの外側で定義できません
error C2761: 'const char MyData::name[5]' : メンバー関数の再宣言はできません。
error C1903: 直前のエラーを修復できません。コンパイルを中止します。
エラー増えました。
0509デフォルトの名無しさん2014/07/03(木) 17:30:32.36ID:RzBLIhMy
そういう初期化はできない
コンストラクタでやれ
0510デフォルトの名無しさん2014/07/03(木) 17:33:56.67ID:e/Bdb4Z+
static constにするとかグローバル定数にするとかあるだろ。試してないが。
0511デフォルトの名無しさん2014/07/03(木) 17:40:26.58ID:BqnntUei
>>506
さすがオマエワールドのソースw
エラーチェックもしていないのかよw
0512デフォルトの名無しさん2014/07/03(木) 17:40:28.34ID:0TQE6pDF
マジレスすると char を int で受けるのは勝手な符号拡張を防ぐため
0513デフォルトの名無しさん2014/07/03(木) 17:40:28.25ID:e/Bdb4Z+
ヘッダーでstatic、constメンバー変数の初期化 | 豆知識
http://soundengine.jp/wordpress/tips/tutorial/99/

クラス内では整数しか定義できないと思ってた?
http://yaplog.jp/nyannyontentyo/archive/7

クラスのメンバーとフレンド (C++ のみ) > 静的メンバー
http://pic.dhe.ibm.com/infocenter/comphelp/v121v141/topic/com.ibm.xlcpp121.aix.doc/language_ref/cplr038.html?lang=ja

【C++】static constなメンバの初期化 - Sofilia
http://arikalog.hateblo.jp/entry/2013/11/09/170041
0514デフォルトの名無しさん2014/07/03(木) 18:00:31.43ID:2p/tvR1B
>>512
str_chrでそれをする意味は?
0515デフォルトの名無しさん2014/07/03(木) 18:01:55.50ID:lZc14wWH
情報ありがとうございます。
こっちは行けるんですが、
struct MyData1{
 const string const_member;
 MyData1() : const_member("hoge"){};
};
こっちは相変わらずエラーします。 char[]は初期化出来ないんでしょうか?
struct MyData2{
 const char name[5];
 MyData2() : name("Data"){};
};
0516デフォルトの名無しさん2014/07/03(木) 18:05:41.58ID:0TQE6pDF
struct MyData2{
 const char name[5];
 MyData2() : name("Data"){};
};

constじゃなくても駄目だろ
0517デフォルトの名無しさん2014/07/03(木) 18:30:19.23ID:RzBLIhMy
MyData2() { strcpy(name, "Data"); }
0518デフォルトの名無しさん2014/07/03(木) 18:35:46.13ID:nGz5aJi/
>>514
sjis 環境なら0x80以上がマイナス扱いになると
漢字領域判定に失敗するからじゃね?
0519デフォルトの名無しさん2014/07/03(木) 18:57:09.84ID:rGxSC+Sv
>>512
エラー時の返り値として、-1を使いたいからじゃないの?
0520デフォルトの名無しさん2014/07/03(木) 18:58:28.29ID:rSavfMTp
sjis 半角カナとか 全角1文字目とか 最上位ビットが建つやつが
第一引数 str にある
第二引数 c にある (前者の半角カナ)

引数から一旦キャストした変数で記述し、整合させるぐらいかの

文字を戻りで返すタイプは ASCIIコード と EOF の区別が欲しいケースが多いので
int なんでしょうよ
0521デフォルトの名無しさん2014/07/03(木) 20:43:17.39ID:RqLWNGM7
引数で文字を受け取る場合
型がcharじゃなくてintになってる方が
変な符号拡張されて困るのだが
0522デフォルトの名無しさん2014/07/03(木) 20:56:01.18ID:mpJLProE
unsigned char じゃあかんのか
0523デフォルトの名無しさん2014/07/03(木) 21:05:47.36ID:M2Y6cUeV
文字列リテラルがunsigned charになったら考えてやってもいい
0524デフォルトの名無しさん2014/07/03(木) 21:12:07.04ID:fWjka1bK
文字列リテラルの符号って環境によりけりじゃないか?
0525デフォルトの名無しさん2014/07/03(木) 21:16:49.25ID:GNH3D4XR
/J ってオプションがあったな
0526デフォルトの名無しさん2014/07/03(木) 21:35:20.06ID:vS+uP2bj
>>518
charが符号有りの処理系でシフトJISの半角かなの「ア」の文字定数('ア') は
CでもC++でも-79という値でしょ? 決して+177じゃない。
自分でマイナスの値を持ってきておいて
「ボクちんの糞ロジックだと誤判定するからイヤ」なんて
どんだけゆとりなのよ
0527デフォルトの名無しさん2014/07/03(木) 21:40:13.71ID:bRkIiAVF
>>525
まだ、有効だよ。
0528デフォルトの名無しさん2014/07/03(木) 21:47:39.07ID:L2FauWM9
C言語って、型とかキチキチに考えずにintで問題ないものはintでいいじゃんって言語だよ。
0529デフォルトの名無しさん2014/07/03(木) 21:53:41.56ID:9loBiyLT
などととんちんかんなことを言っており
老人たちには型(type)の概念は難しかったようで
いまだにenumも使いこなせません
0530デフォルトの名無しさん2014/07/03(木) 22:05:15.07ID:Uk6O0RKU
>>526
お前は何と戦っているんだ?
0531デフォルトの名無しさん2014/07/04(金) 01:23:29.99ID:qCindXU8
>>521
引数の型をcharにしたところで、渡す側でも受ける側でも汎整数拡張でintになるんだから、
符号拡張を防ぐなんて効果は無いと思うんだ。
0532デフォルトの名無しさん2014/07/04(金) 03:11:19.37ID:ELfPkTWJ
>、渡す側でも受ける側でも汎整数拡張でintになるんだから

ほうほう、ソースは?
0533デフォルトの名無しさん2014/07/04(金) 06:24:18.61ID:ac1k1f80
x86のマニュアル読んどけ
0534デフォルトの名無しさん2014/07/04(金) 07:02:23.57ID:jjVM/fWv
x86という特定環境の仕様は関係ない。無関係でもないけど
charをintで扱うことが多いのは、CPUにとって自然(つまり高速)だからだろう
Cは基本的になんでもintで扱う言語だしね
0535デフォルトの名無しさん2014/07/04(金) 07:02:49.06ID:KtRhy4gA
Cの話をしているのに
CPUのマニュアルとはこれ如何に
0536デフォルトの名無しさん2014/07/04(金) 09:01:25.74ID:Drkr2UiK
引き数がcharだと、上位ビットにお構いなしに下位8ビットだけ使って関数に渡せるから寧ろ効率よくなるんだけどな。
ansi以前のCは整数拡張が必要だったけどね。
ロートルと言われたくなければせめて20年以上前の仕様位把握しておこうよ。
0537デフォルトの名無しさん2014/07/04(金) 09:57:07.30ID:qCindXU8
>>532
https://www.google.co.jp/search?q=%E6%B1%8E%E6%95%B4%E6%95%B0%E6%8B%A1%E5%BC%B5

C も C++ も "usual arithmetic conversions" の一環として整数拡張が入ることになってる。
C (N1570) 6.3.1.8 Usual arithmetic conversions
> Many operators that expect operands of arithmetic type cause conversions ...
C++ (N3936) 5 [expr] p10
> Many binary operators that expect operands of arithmetic or enumeration type cause conversions ...


たとえば >487 の関数を実装するには str[i] == c とか比較することになるんだろうけど、
そこで整数拡張が入ることになる。(最適化で消えるだろうが、少なくとも意味上は)

「渡す側でも」ってのは引数が何らかの演算の結果であることを想定して言ってたんだけど、
元々 char な値をコピーして渡すこともあるだろうから言い過ぎたかもしれない。
0538デフォルトの名無しさん2014/07/04(金) 10:26:36.83ID:rIOXbDfy
>>528
でFA。C言語は文字リテラル('A'とか)の型がintだし。
0539デフォルトの名無しさん2014/07/04(金) 12:13:35.46ID:twdVMSox
>>537
hoge(char *fuga, char c) で
fuga[i] == c
のときも
hage(char *fuga, int c) で
fuga[i] == c
のときも
どちらの == の場合も int で比較されるってことでしょうか?
0540デフォルトの名無しさん2014/07/04(金) 12:19:43.01ID:Drkr2UiK
>>539
前者の場合はchar同士の比較であることが確定的だから、char同士で比較され得るよ。
実際、gccでx86の場合、cmplではなくcmpbを出力してくる。
0541デフォルトの名無しさん2014/07/04(金) 12:24:23.83ID:twdVMSox
そうですか
0542デフォルトの名無しさん2014/07/04(金) 12:27:37.11ID:bq/wfsm7
>>540
仕様ではインテグラルプロモーションが発生するというのが>>537の主張なのだが。
それと等価な結果を得るために特定のコンパイラーが出力するcodeなどどうでもいい。
ただ呼ばれた側で2項演算するとintになるだけで
渡された時点ではまだcharであることには変わりない。
0543デフォルトの名無しさん2014/07/04(金) 12:31:47.80ID:Drkr2UiK
>>540
ついでにインライン展開するとどうなるか見てみたら、前者も後者もcmpbを使って全く同じコードになった。
0544デフォルトの名無しさん2014/07/04(金) 12:48:41.97ID:Drkr2UiK
>>542
あーそうか、char同士の比較も意味的には整数拡張されてから比較されると言うことか。
実装上は>540だとしても。
0545デフォルトの名無しさん2014/07/04(金) 12:59:18.07ID:gZUpiCYP
それが元の質問のなぜ文字を受け取るのにcharじゃなくてintなのかってのと直接関係は無いんだけどな。
実際C言語より型チェックを厳しくしたC++は文字リテラルはcharだし各種文字を取る標準関数もcharを取るようになってる
0546デフォルトの名無しさん2014/07/04(金) 13:56:26.28ID:azKVS+/T
なぜ引数の型をcharにしなかったというと
それが学習者に疑問を持たせるという
出題者の意図な訳だよ
0547デフォルトの名無しさん2014/07/04(金) 18:43:07.84ID:GgJqStie
理由があるとしたら、符号関係か、アライメントがらみぐらいしか思いつかないな俺も。
俺がintで渡すとしたら、
将来"ファイルの中に該当文字があるか"って関数に応用する場合に、
getcとの比較で符号による間違いを考えたくないからってとこかな。
0548デフォルトの名無しさん2014/07/04(金) 19:59:35.94ID:TeA8MqEy
パラマウント型
0549デフォルトの名無しさん2014/07/04(金) 20:36:07.24ID:D3ATmUin
横から低レベルな質問失礼。
visualstudio2012で、MFCでプロジェクトを作成したら
MessageBox(_T("test"));
が実行できたので深く考えずに使っていたんだけど、改めて調べると
int WINAPI MessageBox(
 HWND hWnd,
 LPCTSTR lpText,
 LPCTSTR lpCaption,
 UINT uType
);
となってて、引数の数が合ってないよね。
どこかでオーバーロードされてるのかな?
0550デフォルトの名無しさん2014/07/04(金) 20:56:18.29ID:wPBJyG2S
>>549
http://msdn.microsoft.com/ja-jp/library/0eebkf6f.aspx
0551デフォルトの名無しさん2014/07/04(金) 21:02:39.17ID:wPBJyG2S
てか
カーソル当てたり
補完のヒントを見たり
宣言に飛んたりと
IDEの機能を使えば確認出来ると思うぞ
0552デフォルトの名無しさん2014/07/04(金) 23:17:14.86ID:q4rOzSzK
>>549
そのMessageBoxはCWndとかのメンバ関数なんじゃね?
0553デフォルトの名無しさん2014/07/04(金) 23:24:29.24ID:0mRzOonU
>552
ひとつふたつ前のレスくらい読んだらどうだ
0554デフォルトの名無しさん2014/07/05(土) 04:00:07.33ID:Q8yincZ0
MFCは糞
0555デフォルトの名無しさん2014/07/05(土) 15:18:14.89ID:Im7i5kcd
複数のメンバをコンストラクタの引数で初期化するようなクラスを作ってんですが、
なるべく高速に動作させたいので、const参照以外にも右辺値参照も受け取れるよう
にしたいんですが、

class C {
private:
const M1 m1;
const M2 m2;
public:
C(const M1 &amp;x1, const M2 &amp;x2): m1(x1), m2(x2) {}
C(M1 &amp;&amp;x1, const M2 &amp;x2): m1(x1), m2(x2) {}
C(const M1 &amp;x1, M2 &amp;&amp;x2): m1(x1), m2(x2) {}
C(M1 &amp;&amp;x1, M2 &amp;&amp;x2): m1(x1), m2(x2) {}
};

こんなかんじで、2のメンバ数乗個のコンストラクタを書かずに済む方法ってありますか?
クラスM1やM2には、コピーコンストラクタとムーブコンストラクタが定義済みってことで。
0556デフォルトの名無しさん2014/07/05(土) 16:47:47.17ID:1PRnEyxo
>>555
コンストラクターだけをテンプレートにすればよろしい
0557デフォルトの名無しさん2014/07/05(土) 20:19:37.34ID:aJ+xLPrG
ムーブが重いクラスじゃ無かったら値渡しで受け取ってムーブすればいいんじゃない?
05585552014/07/05(土) 20:49:00.54ID:Im7i5kcd
>>556
http://codepad.org/IWIjpHFC
やってみたけどうまくいかなかった。
クラスC1をコンストラクトする段階で、M1やM2のコピーコンストラクタが
move可能な状況でも呼ばれる。

C2みたいに書いてようやく所望の動作をしてくれたんだが・・・
初期化リストにいちいちstd::move()とか書かないといけないもんなの?

もうすこしシンプルな書き方知っている方おしえてです。
05595552014/07/05(土) 20:55:30.71ID:Im7i5kcd
これじゃコンストラクタ引数で初期化したいメンバが4個も5個もあると軽く死ねる。。。

>>557
いみわからんです。値渡しを避けたいから可能な限りムーブを使うんだが。
0560デフォルトの名無しさん2014/07/05(土) 20:55:39.17ID:/CpBjlc8
ttp://ideone.com/lgIjEX
これでおk
0561デフォルトの名無しさん2014/07/05(土) 21:07:37.90ID:aJ+xLPrG
>>559
>>560のように、値渡しで受け取ってメンバにムーブ代入する
実際コピー/ムーブ回数を数えてみると、ムーブ回数が一回増えるだけなので、ムーブが十分軽い操作なら問題は無い
しかしstd::arrayのようにムーブが重い場合はオーバーヘッドが生じてしまうので注意
05625552014/07/05(土) 21:15:06.00ID:Im7i5kcd
>>560-561
でも、そのコードだとm1オブジェクトがぶっ壊れるんだが。
http://ideone.com/fZ7eB6
05635552014/07/05(土) 21:20:22.29ID:Im7i5kcd
あ、>>560のコードのバグだな。
c2dのコンストラクタ呼び出しで、不要なmoveが入ってる。
どうもわかってきた。サンクス。
0564デフォルトの名無しさん2014/07/05(土) 21:24:15.65ID:aJ+xLPrG
いや、もうm1を使う事が無いからstd::moveしているんだろう
move後のオブジェクトが壊れているのは当然
05655552014/07/05(土) 21:32:06.45ID:Im7i5kcd
うん、書き込んでから、そういう意図かな、と気づいた。
ただ激しくバグの素の匂いがするコードなのであまり関心できない。

あとは、このムーブのオーバーヘッドを無視できるかだなぁ。。。

あと、値渡しコンストラクタ引数が初期化リストで一回使われるだけの
時とか、勝手に右辺値に変えてくれたりの最適化ってしてくんないのかね。
0566デフォルトの名無しさん2014/07/05(土) 21:37:32.66ID:aJ+xLPrG
そもそもstd::moveがそういう意図を持った関数だからなあ
最適化は許可されているから後はコンパイラ次第
0567デフォルトの名無しさん2014/07/05(土) 21:41:35.10ID:IfJTJU6r
C++11以降はmove推奨言語になってるからな
0568デフォルトの名無しさん2014/07/05(土) 21:47:42.49ID:Im7i5kcd
もっと11の最適化が進んだら、そのうちmoveはgoto並みの劇薬扱い
されるようになる様子が目に浮かぶわ・・・
0569デフォルトの名無しさん2014/07/05(土) 21:53:13.94ID:eQft9RyA
>C2(M1 x1, M2 x2): m1(move(x1)), m2(move(x2))

なんなのこの糞コード
おまえら正気か?
0570デフォルトの名無しさん2014/07/05(土) 21:54:24.78ID:/CpBjlc8
どうせコンストラクタ終わったら破棄されるんだから問題ない
0571デフォルトの名無しさん2014/07/05(土) 21:56:53.63ID:Im7i5kcd
C++11自体が正気じゃない。
0572デフォルトの名無しさん2014/07/05(土) 22:35:39.07ID:FweWc6DI
moveセマンティクスて、もはや無くてはならない機能だけど、
シンプルな構造体にまで毎回T(T&&)、T& operator=(T&&)は面倒ですw
(だからunique_ptrを使うお)

そのうち何も書かなくてもデフォルトで、暗黙的に実装されるように
なるらしいけど、早くしろや
0573デフォルトの名無しさん2014/07/05(土) 22:53:26.54ID:9YOT8bNa
よく理解できなかったんだが
これじゃダメなのか?
http://ideone.com/7RlFa7
0574デフォルトの名無しさん2014/07/05(土) 23:24:55.26ID:i+bJ5TvG
C言語の勉強をはじめて
明解C言語入門編というものを1周したのですが
この本は何回も読んで頭に叩き込むものでしょうか?
それとも違う本を読んでいったりしたほうがいいのでしょうか?
0575デフォルトの名無しさん2014/07/05(土) 23:28:20.95ID:xvor2Eqf
コード書いて動かせよw
0576デフォルトの名無しさん2014/07/05(土) 23:55:18.87ID:4LsGsAKA
まずわフィルターとか作ってみてわ?
0577デフォルトの名無しさん2014/07/06(日) 14:00:28.32ID:KUsWw/gB
>>574
とりあえず何でもいいから実践しないと覚えないよ
明解C言語入門という参考書は読んだことないけど、Cはポインタさえ理解出来れば後は慣れだから
ポインタ部が不安なら2冊目にポインタに詳しい参考書を読むのもあり
それ以外でも本屋で立ち読みしてこの本いいなと思ったら2冊目に買ってもいいんじゃないかな
有名なカーニハン&リッチーの本は1、2冊初心者用参考書を読んだレベルじゃ多分無理

はっきりした目的もなく始めたのならコンソール画面だけのプログラムばかりだとつまらないから、
ある程度Cを身に付けたらC++は無視していっそWin32APIに手を出してもいいかも
覚えることは多いし参考書は高くて少ないけどやってること自体は大したことない
0578デフォルトの名無しさん2014/07/06(日) 14:24:27.65ID:T51ro//s
>有名なカーニハン&リッチーの本
は今となっては悪書なので読んではいけない
0579デフォルトの名無しさん2014/07/06(日) 18:31:25.28ID:Xcdpas3C
んなこたーない
本当の意味での初心者には向かない(理解できない)けど
0580デフォルトの名無しさん2014/07/06(日) 19:57:45.46ID:BFMhGjiP
あれは今となってはプロが読む本でないかい。
初心者ならもっといい本がでてるべ。
0581デフォルトの名無しさん2014/07/06(日) 20:16:59.98ID:FJzh/6Se
ポインタが難しいなら、すべて配列アクセスにすればいいよ。
0582デフォルトの名無しさん2014/07/06(日) 20:17:41.25ID:FJzh/6Se
ポインタが難しいなら、すべて配列アクセスにすればいいよ。
0583デフォルトの名無しさん2014/07/06(日) 20:37:15.49ID:Qw6AqEGX
スマートポインタとvectorでいいんじゃないかな
0584デフォルトの名無しさん2014/07/06(日) 20:40:27.85ID:Xcdpas3C
>>580
K&Rは、普通の知性があれば、初心者が読んで全然いい
タイトルで釣ってる易しいだけの初心者本は、読んでも何の役にも立たない

ただ、小中学生とか、そういう方向の初心者には向かないと思う
0585デフォルトの名無しさん2014/07/06(日) 21:13:29.33ID:JKxWpx0K
今の底辺は大学出ててもまともな中学生より馬鹿だからな
0586デフォルトの名無しさん2014/07/06(日) 22:02:22.76ID:PmG1bj5r
まともな中学生というのは、授業でフェルマーの小定理の証明やるような中学?
0587デフォルトの名無しさん2014/07/06(日) 22:08:10.06ID:iCoJ9ZiO
自分がかつて読んだ本を無根拠にすすめるのが老人の特徴
0588デフォルトの名無しさん2014/07/06(日) 22:10:17.74ID:PmG1bj5r
読み散らかした経験から言うと、言語仕様書だけあれば良い。
0589デフォルトの名無しさん2014/07/06(日) 22:49:11.98ID:goqQr1zD
コンピュータとは何か?を理解しなくても良いのか?
0590デフォルトの名無しさん2014/07/06(日) 22:56:56.49ID:HGTxW80D
そういうのは要らないな
年寄りが懐かしさを楽しむ会話のネタぐらいしか価値がない
0591デフォルトの名無しさん2014/07/06(日) 23:01:14.42ID:M2Rbqlfg
C++は基本的なことを学んだら、次はライブラリだと思う
最初のうちは直にコレを読むのは厳しいだろうけど、
海外メジャーなC++サイトの解説で補完
cppreference.comとか

日本語版もあるけど簡易な英語だから、英語版でも大丈夫
どっちにしても、この程度の英語は読めた方がよいと思う
検索の世界が広がる
0592デフォルトの名無しさん2014/07/07(月) 01:49:42.75ID:HY+/BDCg
実体をメモリの種類を問わずインスタンスを作成できるのがC/C++の強みの一つだと思うが
ポインタはそれを受け取ると、変数と同じようにアクセス出来る。
javaの代入するとポインタ参照が増える方がよほど難しいと思うが、そこでつまずくのか。

今のコンピュータはバス調停でプログラム上のアドレスが決まり、ブリッジをいくつも越えて
デバイスを制御する。C/C++が知っているコンピュータと随分違っているし家電にもjavaマークが
ついていたりする。
OSにアプリを提供するのがほとんどのプログラムであってドライバでない物が機械を直接
制御しようとするのは迷惑な時代なのかな。
0593デフォルトの名無しさん2014/07/07(月) 04:25:22.13ID:JyDRLdVK
>javaの代入するとポインタ参照が増える方がよほど難しいと思うが、そこでつまずくのか

?
はて、なんのことだろう
0594デフォルトの名無しさん2014/07/07(月) 14:38:12.48ID:+4QXnu28
>>593
後半読めばわかるだろ






知ってる単語並べてるだけだから、スルーでいいよ
0595デフォルトの名無しさん2014/07/07(月) 18:24:11.07ID:vhBKyZOo
>>593
プリミティブ型のことじゃないの?
0596デフォルトの名無しさん2014/07/07(月) 20:20:06.39ID:+WEgGdq/
おまえら日本語で会話ぐらいできないのか
0597デフォルトの名無しさん2014/07/07(月) 21:43:33.74ID:JT9yWl9Z
日本語は得意だぞ
馬鹿にすんな

それはそうと、なんの問題もないよ
どんな環境を想定してるのかは知らないけど、
特権レベルの低いユーザアプリでそれは無理

もちろん、カーネルで動くようなプログラムを
組むとなると別だろうけど、ドライバでもないものが、
そのレベルで動作できるとしたら、それはそのOSがおかしい
0598デフォルトの名無しさん2014/07/07(月) 21:59:45.35ID:8C4Wbu/Z
>>597
mmap
0599デフォルトの名無しさん2014/07/08(火) 07:44:10.46ID:LIkQQfqy
>それはそうと、なんの問題もないよ

この一文は前野どこと繋がってるんだ?
0600デフォルトの名無しさん2014/07/08(火) 14:54:07.18ID:nXAnWEmN
本の例題に
http://codepad.org/MyFrk2D7
というのがあったのですが、上手く曜日が表示されません
なぜなのでしょうか?
0601デフォルトの名無しさん2014/07/08(火) 15:11:56.18ID:SPtpfnz3
>>600
最後を %2.2s にしなされ
0602デフォルトの名無しさん2014/07/08(火) 16:47:48.70ID:z6eg5pPo
utf8においては、漢字一文字は大抵3バイト。
0603デフォルトの名無しさん2014/07/08(火) 16:49:51.76ID:z6eg5pPo
>>600
>602なので、const char wday_name[][4]にすればいい。
或いは、const char * const wday_name[]でもいい。
後者の方が、例えば"日"を"日曜"に変えても使えるので便利。
0604デフォルトの名無しさん2014/07/08(火) 17:44:01.88ID:RGmPR9KR
便利かどうかで意味を考えない馬鹿っているのな
0605デフォルトの名無しさん2014/07/08(火) 21:57:31.35ID:hPWUgG1S
>なぜなのでしょうか?
例題が間違っているから
としか言いようがない
0606デフォルトの名無しさん2014/07/08(火) 22:59:59.16ID:qu8l/hUZ
見て分かるようになろう
0607デフォルトの名無しさん2014/07/08(火) 23:13:38.68ID:qe5n8Iyp
>>605
いやいや、「環境依存で正しいこともある」だな。
0608デフォルトの名無しさん2014/07/08(火) 23:15:33.96ID:qu8l/hUZ
こんな処理で環境に依存してるような例題を書く時点で
0609デフォルトの名無しさん2014/07/08(火) 23:23:52.87ID:rf429Cp2
char s[3]="あ";
環境依存で正しいこともある というよりは
環境依存で動いてしまうこともある レベル
0610デフォルトの名無しさん2014/07/08(火) 23:39:35.68ID:UwqYrzyQ
コンパイルエラーにならんのか。
やっぱりC言語は糞だな
0611デフォルトの名無しさん2014/07/08(火) 23:43:30.57ID:yUaVsh4d
ならんよ
ヌルターミネートは付加できる場合のみ自動で付加される仕様だから
0612デフォルトの名無しさん2014/07/08(火) 23:44:51.26ID:UwqYrzyQ
>>611
そんな理由じゃないでしょ。
試しに長さ1とかにしてみなよ。
0613デフォルトの名無しさん2014/07/08(火) 23:50:34.65ID:yUaVsh4d
最大長がコピーされる仕様だし合ってるんじゃね?
0614デフォルトの名無しさん2014/07/08(火) 23:51:36.72ID:cdcsHPOD
>ヌルターミネートは付加できる場合のみ自動で付加される仕様

ほうほう、そんなことがISO/IEC 9899:2011のどこに書かれているのか
0615デフォルトの名無しさん2014/07/08(火) 23:54:08.87ID:yUaVsh4d
だから最大長だってんだろハゲ
0616デフォルトの名無しさん2014/07/08(火) 23:55:19.67ID:UwqYrzyQ
>>615
誤解招くような発言したのは誰だよ。

まあとりあえず糞仕様なのは間違いない。
0617デフォルトの名無しさん2014/07/08(火) 23:57:35.93ID:yo3e3U2e
A「コンパイルエラーにならないとは糞な仕様だ」
B「仕様です」

間違いなくBは会話のできないアスペ
0618デフォルトの名無しさん2014/07/09(水) 00:00:46.06ID:UwrdPaFY
いちいちウルサイはげどもだ
0619デフォルトの名無しさん2014/07/09(水) 00:00:54.49ID:G+O1M7ss
>ヌルターミネートは付加できる場合のみ自動で付加
確かそんなunkoな関数があったよね
strncpyだっけ?
0620デフォルトの名無しさん2014/07/09(水) 01:12:15.01ID:tDynlsgr
>>619
strncpy( ) は文字列の途中を書き換えたりするハレンチな使い方するから勝手に付加されても困るわ
0621デフォルトの名無しさん2014/07/09(水) 18:36:05.86ID:eczUeSs+
void func1(string &s){
  s = s + "を変更した";
}
string func2(const string &s){
  return s + "を変更した";
}
void sub(){
  string s = "変更前";
  func1(s);       // (1)
  s = func2(s);   // (2)
}
文字列を処理する関数を作成する場合、(1)のようにしたほうが速度的に速いのは分るのですが、
(2)のように s= という左辺に代入の形式で書きたいので、無駄を承知で(2)のような関数を作る事が多いのですが、
馬鹿でしょうか?皆さんそんなこと無いですか?
0622デフォルトの名無しさん2014/07/09(水) 18:40:28.71ID:aj4O2jpl
別にいいと思うけど、その例なら
string func() {return "を変更した";}
void sub()
{
string s = "変更前";
s += func();
}
でいいような。
0623デフォルトの名無しさん2014/07/09(水) 18:43:24.54ID:O1jvNzTi
あとでボトルネックになってるか調べる。
単体で100万回実行した時の実測値が遅くても、
本番では10回しか使わなれば差がないことはある。
0624デフォルトの名無しさん2014/07/09(水) 18:48:50.64ID:aj4O2jpl
あー、
const char * func() {return "を変更した";}
で充分だな。
0625デフォルトの名無しさん2014/07/09(水) 18:56:39.77ID:oJAo1LX4
>>621
俺も関数型マンセーな(2)派。
ムブコン対応が普及すれば、その手のパフォーマンス差は無問題だと思う。
多分、現状でも最適化かければRVO入ると思うし。
0626デフォルトの名無しさん2014/07/09(水) 18:58:46.32ID:O1jvNzTi
関数型は破壊的代入は禁止か避けるのでは?
だから2はダメでは。その部分だけ見ただけで破壊的代入してる。
0627デフォルトの名無しさん2014/07/09(水) 19:04:34.33ID:oJAo1LX4
>>621
あと、一般的には、
s = s + "を変更した";
より、
s += "を変更した";
の方が速い。

もちろん、最終的には実測あるのみだが、 >>621ならどちらも速度的には変わらないと思う。
0628デフォルトの名無しさん2014/07/09(水) 19:05:19.81ID:oJAo1LX4
>>626
破壊してないよね?
0629デフォルトの名無しさん2014/07/09(水) 19:12:08.74ID:O1jvNzTi
境界を越える: Haskell を使った関数型プログラミング

代入 (Assignment)。命令型言語のユーザーは、他のどんなプログラミング手法よりも、代入に依存します。
関数型言語では、1つの変数に対して最大 1 回の代入しか許されません。
ある値を変更する代入は、すべて破壊的代入(destructive assignment) と呼ばれ、許されません。
例えば、ほとんどの関数型言語では、x= x + 1 は許されません。

繰り返し (Iteration)。命令型言語のプログラムは、様々なタイプのデータ構造を、繰り返しを使って処理します。
多くの場合、命令型制御構造では、繰り返しを行うために破壊的代入に依存しています。

副作用 (Side effect)。命令型言語において、異なる値を返す可能性のある全てのメソッドは、同じ入力に対して副作用を持っています。
またアプリケーション変数の状態に影響を与える全てのメソッドも、副作用を持っています。関数型言語には副作用がありません。

関数型言語を使ったことのない人には、破壊的代入や副作用のないアプリケーションの書き方など、想像もできないでしょう。
しかしこうした基本的な特徴は、命令型言語の持つ非常に大きな問題につながるのです。

https://www.ibm.com/developerworks/jp/java/library/j-cb07186/
0630デフォルトの名無しさん2014/07/09(水) 19:31:17.51ID:oJAo1LX4
俺が関数型と言ったのは func1 と比べた func2 の事なんだけど…
0631デフォルトの名無しさん2014/07/09(水) 19:48:21.88ID:O1jvNzTi
func1 と func2 を比べたら、func2は破壊的代入してるからただちに関数型ではないとわかる。
0632デフォルトの名無しさん2014/07/09(水) 20:04:53.59ID:oJAo1LX4
それはサンプルコードでの Sub() 側における使い方の問題でしょ。
俺が関数型といっているのは、func2 の実装の事だってば。

っていうか、ボソッと言ったことにそこまでつっかかるなよ。
しかも、知識を持ってる割に、察しが悪いあたりがめんどくさい。
0633デフォルトの名無しさん2014/07/09(水) 22:41:08.40ID:G+O1M7ss
>>629
まず日本語でレスできるようになってから出直した方がいいよ
0634デフォルトの名無しさん2014/07/11(金) 09:37:24.83ID:ifGpSMFq
システムに依存しないインターネットにアクセスするの標準的な
ライブラリーありますか?
0635デフォルトの名無しさん2014/07/11(金) 09:52:46.07ID:FjcVBQS/
無い
0636デフォルトの名無しさん2014/07/11(金) 09:55:06.74ID:Fti743/d
ソケット
0637デフォルトの名無しさん2014/07/11(金) 10:41:47.01ID:ifGpSMFq
無いソケットというライブラリーをつかえばいいのですか?
0638デフォルトの名無しさん2014/07/11(金) 10:53:29.26ID:Lx3So7Yg
QtとかwxWidgetsとかに付いて来てるのでどう?
0639デフォルトの名無しさん2014/07/11(金) 10:54:09.45ID:Lx3So7Yg
ソケットだけならboostでもいいかな
0640デフォルトの名無しさん2014/07/11(金) 11:28:17.72ID:ifGpSMFq
asioってやつですね。
ありがとうございます。
0641デフォルトの名無しさん2014/07/11(金) 23:19:16.60ID:oJ0M31OD
unique_ptrとかshared_ptrとかでコピーを防ぐものってありますか?
0642デフォルトの名無しさん2014/07/11(金) 23:26:57.99ID:fhWSO1fs
unique_ptrはコピーできないものと思っとりました
0643デフォルトの名無しさん2014/07/12(土) 14:23:47.41ID:13qaOtx3
使う関数や演算子によっても速度が変わるんですか?
0644デフォルトの名無しさん2014/07/12(土) 14:33:37.79ID:ir47X0Sd
>>643
変わることもあるし変わらないこともある。
気になるなら実測。
0645デフォルトの名無しさん2014/07/12(土) 15:06:27.71ID:uBkJb0ew
printfは遅いので有名
0646デフォルトの名無しさん2014/07/12(土) 15:09:24.84ID:SOVDXsjY
>>643
変わります。
0647デフォルトの名無しさん2014/07/12(土) 17:19:17.62ID:13qaOtx3
トリッキーなプログラムだけど解りずらいのと解りやすいけどオーソドックスで遅いのではどちらがプログラム
としては良いんですか?

機械制御のシーケンサ(PLC)なんかでは業界としては解りやすい方がいいとされています。会社にもよりますが・・・
0648デフォルトの名無しさん2014/07/12(土) 17:53:32.22ID:tBRK6qJR
>>647
目標のスピードがあってそれをクリアしてるんなら読みやすいほどよい
0649デフォルトの名無しさん2014/07/12(土) 18:05:50.63ID:13qaOtx3
関数や演算子のスピードに関わるのはおそらくそれらが元々持つ機械語の規模によるってことで良いんですかね?
0650デフォルトの名無しさん2014/07/12(土) 18:38:11.56ID:trVqQ/Kh
>>647
トリッキーだけど速い方がいいなんて会社はない
技巧的とか流行りの技法使って楽しいのは本人だけ
0651デフォルトの名無しさん2014/07/12(土) 18:51:17.75ID:13qaOtx3
プログラムにも安定した技法や信頼性のある技法というのもあるんですかね?

いわゆるその会社その会社によるノウハウ・・・

でも大体がどこの会社も似たり寄ったりの技法使っていると思いますが・・・どうでしょう。
0652デフォルトの名無しさん2014/07/12(土) 18:55:59.34ID:hZ9DjkyP
>>649
1行でも無限ループが書けるから速度と規模は関係ない
0653デフォルトの名無しさん2014/07/12(土) 18:57:30.18ID:hZ9DjkyP
>>651
会社によってレベルはピンキリ
某大手企業でもとんでもなく酷いソースのまま納品してることがある
0654名無しさん@0新周年2014/07/12(土) 20:27:17.13ID:ieTzojX6
だから日本のIT技術がすたれた
0655デフォルトの名無しさん2014/07/12(土) 20:29:18.30ID:7NB7b6IE
1ミリ秒でも高速さを求めるところもあれば、そうでないところもある
リアルタイムOSのように一定時間で処理を完結されることもあれば、
センサーからの信号を取りこぼしても良いこともある
0656デフォルトの名無しさん2014/07/12(土) 21:08:11.45ID:4xZ44lSC
場合によるわな。
綺麗に書いても遅すぎて使い物にならないなら意味がないし。
想定される環境で必要十分な速度がでるならもちろん綺麗な方がいい
0657デフォルトの名無しさん2014/07/12(土) 23:35:20.59ID:MBGOWzVT
必ず同値が2個づつ連なる232C取り込みのロギングデータなら見たことがある。
原因は簡単に予想できたが他社の領分だったんでスルーした。
0658デフォルトの名無しさん2014/07/12(土) 23:53:22.38ID:13qaOtx3
綺麗に書いても結果が出なかったらプログラマーとしては失格ですか?
0659デフォルトの名無しさん2014/07/13(日) 00:34:03.24ID:7UphRhX9
綺麗に書いておいて後で必要なところだけ直すことはできる
0660デフォルトの名無しさん2014/07/13(日) 00:37:51.82ID:kSriMbNH
状況にもよるけど、社会人として失格
0661デフォルトの名無しさん2014/07/13(日) 00:51:01.41ID:e/Rw2AM2
>>654
それでも、世界一のIT技術国なんだろ

ともかくまともなものを納期までに作れだよな
きれいを心がけ納期間に合わずじゃアウトだし
0662デフォルトの名無しさん2014/07/13(日) 01:35:10.89ID:7UphRhX9
そうやって負の遺産を積み上げてきたからこそブラックとか言って苦しんでるんじゃないのか
0663デフォルトの名無しさん2014/07/13(日) 01:58:35.94ID://8rR9Cj
綺麗に書いたからと言って速度にそれほど影響するとも思えないが…
0664デフォルトの名無しさん2014/07/13(日) 02:01:33.47ID:psjBpgTU
ソース修正速度が上がるんじゃね
0665デフォルトの名無しさん2014/07/13(日) 02:25:32.19ID:kSriMbNH
綺麗なソースは見通しがよくてケアレスミスの修正は簡単なんだけど
設計からのミスや変更があると修正が大変で
ツギハギだとミスが紛れ込みやすいんだけど設計からのミスや変更でも
新たに継ぎ足して修正しやすいイメージ

あくまでイメージ
0666デフォルトの名無しさん2014/07/13(日) 02:45:17.28ID:y/mNp4ZU
キレイなプログラムは大抵満足出来るレベルの速度が出るものだよ。
ごく稀に80%では満足出来ない製品で100%を目指すのが最適化。
実測もせずに「こうした方が速いんだぜー」と 自己満足で書かれた訳の分からんコードは、逆に遅いことすらある。
0667デフォルトの名無しさん2014/07/13(日) 04:01:44.91ID:oCOYKlaE
>>665
新たに継ぎ足して修正して汚くなっていくことが明らかで普通は鬱になる状態でも
元が汚いと罪悪感を感じにくいので作業が捗るという意味では
同じイメージを持っています
0668デフォルトの名無しさん2014/07/13(日) 08:42:20.47ID:OfL9oG5/
>>657
kwsk
0669デフォルトの名無しさん2014/07/13(日) 12:49:07.99ID:WFVo9McB
>>666
そもそも、そういう小技って極一部のアルゴリズムを置き換えるだけで済むこと多いしなあ
0670デフォルトの名無しさん2014/07/13(日) 14:00:05.06ID:/A7mwUNZ
>>658
綺麗綺麗って、どんだけ綺麗にかけるんだよ?
0671デフォルトの名無しさん2014/07/13(日) 15:51:53.01ID:y/mNp4ZU
綺麗の定義からだな
0672デフォルトの名無しさん2014/07/13(日) 15:54:53.61ID:y/mNp4ZU
先ずは綺麗の定義から始めないとだな。
でもこれも主観入るよねー。
キッチリハンガリアンで書くのが綺麗だという人もいるしなあ…
0673デフォルトの名無しさん2014/07/13(日) 17:05:01.55ID:OfL9oG5/
>>672
昔(アプリケーション)ハンガリアンで書いたことがあったが、会社の方々で爆笑ものだったらしい‥
少なくとも動的型言語でハンガリアンを使うのは自爆ものだった‥スペルミスをはじけないからね‥
0674デフォルトの名無しさん2014/07/13(日) 23:50:24.30ID:psjBpgTU
型が違う同名が必要になった時どうすんねん
0675デフォルトの名無しさん2014/07/13(日) 23:54:01.05ID:3cmdlTId
>スペルミスをはじけないからね

ハンガリアンの目的を微塵も理解していない失笑もののレスだな
0676デフォルトの名無しさん2014/07/14(月) 00:16:38.38ID:wkbLFwHf
int i,j,k;
double x,y,z;
0677デフォルトの名無しさん2014/07/14(月) 00:44:27.27ID:uZBKU8fE
て言うか、動的言語とスペルミスの関連がわからん
0678デフォルトの名無しさん2014/07/14(月) 08:59:16.06ID:Hkx+f73P
http://msdn.microsoft.com/ja-jp/library/windows/desktop/ff934858.aspx
ここのリスト2のサンプルがうまく行きません。分かる人いたら教えてください

#include "stdafx.h"
#include "Shlobj.h"
#pragma comment(lib, "shell32.lib")

int _tmain(int argc, _TCHAR* argv[])
{
IShellItem* pItem = nullptr;
HRESULT hr = ::SHCreateItemInKnownFolder(
FOLDERID_Libraries, 0, nullptr, IID_PPV_ARGS(&pItem));
if (SUCCEEDED(hr))
{
printf("成功");
pItem->Release();
}
getchar();
}
0679デフォルトの名無しさん2014/07/14(月) 09:00:37.03ID:dxRw1V7C
肝心の何がうまくいかないかが書かれてないんだが
0680デフォルトの名無しさん2014/07/14(月) 09:13:59.83ID:Hkx+f73P
IShellItemが取得でたら成功と表示されるはずなのに
何も表示されないってことです
0681デフォルトの名無しさん2014/07/14(月) 09:15:43.03ID:dxRw1V7C
ブレークポイントおいてhrの値見てみろ
0682デフォルトの名無しさん2014/07/14(月) 09:27:34.76ID:v6rlvCBe
CoInitializeしてないから
0683デフォルトの名無しさん2014/07/14(月) 09:34:21.32ID:Hkx+f73P
>>681
>>682
どうもありがとうございます
CoInitialize(NULL);をつけたら解決しました
hrの値がCreateInstance 0x800401f0になってたので検索したらすぐ出てきました
失礼しました
0684デフォルトの名無しさん2014/07/14(月) 10:43:19.64ID:+a3AQKeB
http://msdn.microsoft.com/ja-jp/library/ms235627.aspx
↑ここのサンプルを使ってスタティックライブラリ(*.lib)を作ったのですが
Releaseビルドだと

dumpbin /symbols xxx.lib

でexportした関数が表示されません。
Debugビルドだと表示されます。

Release/Debug双方とも別のアプリから利用可能で、正常に動作します。
ビルド環境はVisual Studio Express 2013 for Windows Desktop(Visual C++)です。

何かヒントを頂けると助かります。
0685デフォルトの名無しさん2014/07/14(月) 11:14:54.55ID:v6rlvCBe
dumpbin /exports
0686デフォルトの名無しさん2014/07/14(月) 11:33:22.58ID:+a3AQKeB
>>685
レス、ありがとうございます。

/exportsだとDebugモードでビルドしたものでも
関数が表示されなくなってしまいます。
0687デフォルトの名無しさん2014/07/14(月) 11:42:59.57ID:WY2FYArG
良くわからんけど
スタティックライブラリで (DLL)export 可能なのかえ?

/exports
ttp://msdn.microsoft.com/ja-jp/library/30e78zd0.aspx

/symbols
ttp://msdn.microsoft.com/ja-jp/library/b842y285.aspx
0688デフォルトの名無しさん2014/07/14(月) 11:51:51.44ID:v6rlvCBe
declspec(dllexport)でエクスポートしたシンボルを含むオブジェクトを
スタティックライブラリにしたのだと勝手に翻訳していたが、違うんならわかんね。
06896842014/07/14(月) 12:07:02.98ID:+a3AQKeB
>>687,688
すみません、exportという表現は間違いでした。

シンプルなスタティックライブラリです。
0690デフォルトの名無しさん2014/07/14(月) 12:55:50.36ID:FojawQzw
結局何をしたいのか。exportした関数ってのは間違いだったのか
06916842014/07/14(月) 13:08:38.05ID:+a3AQKeB
>>690
すみませぬ・・・

よく使う関数をライブラリにまとめたいのですが、DLLではなくスタティックライブラリに
しようと思っています。

スタティックライブラリの作成まで出来て、動作確認もできたのですが、
念のためdumpbin /symbols xxx.lib でスタティックライブラリに定義した関数を
確認しようと思ったら、

--------------------------
(略)
Dump of file xxx.lib

File Type: LIBRARY
--------------------------
としか表示されず、不思議に思って質問しました。

☆ Q: Debug情報付きでビルドすると、スタティックライブラリに定義された
関数が全て表示されるので、Releaseビルドだと内部情報が見えないように
最近仕様変更されたのでしょうか?

注)Release/Debugビルド共に別のプログラムからリンク可能で、動作も
問題ないようです。
dumpbinで表示されないだけのようです。
0692デフォルトの名無しさん2014/07/14(月) 15:31:42.67ID:FojawQzw
>>691
多分シンボルをリンクするための情報だと思ってるんだろうけど
シンボルはあくまでデバッグ情報だから、動作機能には関係ない。
プログラムサイズを減らすためリリース版では無くしてる

exportsで何も出ない(?)と言ってたけど、リンクで使われるのはexporrsの方
0693デフォルトの名無しさん2014/07/14(月) 15:39:00.80ID:FojawQzw
ごめんexportsはdllの場合だった
0694デフォルトの名無しさん2014/07/14(月) 16:54:22.95ID:FojawQzw
一応試してみた&調べた結果、
リンカは、dumpbin /linkermember で表示されるパブリックシンボルを使うみたい
これはdebugビルドにもリリースにも含まれる
0695デフォルトの名無しさん2014/07/14(月) 22:33:32.39ID:5duasKc4
>>677
動的型付け、というか宣言なしで変数をすき放題に使える極悪な環境で苦しんだ
考えてみれば、別にハンガリアンでなくともスペルミスに泣いただろうな‥

>>675
ハンガリアンの目的?
たぶん typedef を使うのがまっとうだろうし、その意味ではどんなハンガリアンも金輪際出番はないと今では思っているよ
0696デフォルトの名無しさん2014/07/14(月) 22:36:58.52ID:dxRw1V7C
なんでハンガリアンでtypedefが出てくるんだ?
ほんとうに分かってないんだな
0697デフォルトの名無しさん2014/07/14(月) 22:47:51.75ID:OyQeXbSe
アプリケーションハンガリアンという言葉を知っててこの理解度ってのが理解できんな
0698デフォルトの名無しさん2014/07/14(月) 23:26:12.87ID:caGHL+SV
まあ中途半端に言葉だけ覚えて、知ったかする奴はいくらでもいるし
0699デフォルトの名無しさん2014/07/14(月) 23:34:23.13ID:5duasKc4
>>697
ま、そういってもらってもいいかもね、昔はよく使ったものだが、今ではハンガリアンの利点が微塵もわからないからね‥
0700デフォルトの名無しさん2014/07/15(火) 00:27:21.44ID:zbG7kkwG
>>699
知らないようだから教えてあげよう
君は今も昔もハンガリアンというものを全く理解していない
利点がわかる以前の問題だ
0701デフォルトの名無しさん2014/07/15(火) 00:29:19.91ID:VgFN9iM9
ハンガリアン・・・・

それ缶コーヒーの名前ですかねw
0702デフォルトの名無しさん2014/07/15(火) 01:03:07.74ID:8uHHkp3Z
最初に覚えないといけないのはhoge
先ずhogeを使いこなせるようにがんばる
0703名無しさん@0新周年2014/07/15(火) 01:48:48.45ID:20ZBC4Aq
hage は?
0704デフォルトの名無しさん2014/07/15(火) 04:50:16.60ID:7MWYl2Sv
12韓がりあん
0705デフォルトの名無しさん2014/07/15(火) 05:28:14.02ID:RsIVkhHs
組み込み・制御などでは、MISRA-C 2004 ルール6.3(推奨) で、
基本型も環境によって、16,32ビットと変わるので、
int型などの組み込み型は使えず、typedefして使う

signedは、int16_t, int32_t
unsignedは、uint16_t, uint32_t
0706デフォルトの名無しさん2014/07/15(火) 06:32:32.17ID:TXyFzYBa
>>705
いきなりどうした?
0707デフォルトの名無しさん2014/07/15(火) 08:48:05.63ID:ijGdIMAg
◎2ch勢いランキングサイトリスト◎

★ +ニュース
・ 2NN
・ 2chTimes
★ +ニュース新着
・ 2NN新着
・ Headline BBY
・ unker Headline
★ +ニュース他
・ Desktop2ch
・ 記者別一覧
★ 全板
・ 全板縦断勢いランキング
・ スレッドランキング総合ランキング
・ ログ速
★ 実況込
・ 2勢
・ READ2CH
・ i-ikioi

※ 要タイトル名検索
07086842014/07/15(火) 09:35:15.71ID:D9/XfTkl
>>694
おお、神がいた・・・
ありがとうございました。m(_ _)m
0709デフォルトの名無しさん2014/07/16(水) 01:52:44.09ID:moRTR2el
>16,32ビットと変わるので、
>int型などの組み込み型は使えず

はて、使えないと考えた根拠は何だろう
0710デフォルトの名無しさん2014/07/16(水) 11:35:51.91ID:ff/AGVGE
>>700
システムハンガリアン: 変数の型をプレフィックスに
アプリケーションハンガリアン: 動作や大きさ等の変数の用途概要をプレフィックスに
こういう認識でよろしいでしょうか?
0711デフォルトの名無しさん2014/07/16(水) 13:11:23.81ID:dtGU31iT
ハンガリアンはあるのに
ブルガリアンとか
インドネシアンがないのはどうしてなぜ
0712デフォルトの名無しさん2014/07/16(水) 13:21:50.78ID:CWCGAhMr
810 名前:デフォルトの名無しさん :2014/07/16(水) 13:10:17.21 ID:dtGU31iT
わかるひとだけレスしてください
うざいだけです
0713デフォルトの名無しさん2014/07/16(水) 14:48:57.53ID:M3a2qYLU
逆ポーランドとかあるぞ?
0714デフォルトの名無しさん2014/07/16(水) 15:52:58.62ID:ej6YH4lk
なんでポーランドだけ逆なんですか?
ポリッシュ加工じゃないんですか?
0715デフォルトの名無しさん2014/07/16(水) 17:21:33.62ID:moRTR2el
Visual C++はようやくprintfで%zu使えるようになったんか?
ちょっとCTPダウンロードしてくる
0716デフォルトの名無しさん2014/07/16(水) 17:25:43.61ID:XexGWa0+
逆ポーランドは実は和式
0717デフォルトの名無しさん2014/07/16(水) 18:19:36.46ID:dNTYPL/v
何、便所の話?
0718デフォルトの名無しさん2014/07/16(水) 18:39:49.76ID:OnMw5ahO
#define PI 3.1415926535897f ←このfって何?
floatのfなんだろうけど付けると付けないので何が違うの?
0719デフォルトの名無しさん2014/07/16(水) 18:45:21.78ID:VblCYr0v
>>718
つけるとfloat精度の定数として扱われる。
0720デフォルトの名無しさん2014/07/16(水) 18:47:58.93ID:VblCYr0v
逆に言うと、「3.1415926535897f」と書いても実際に評価される値は3.1415925とか3.1415927辺り。
0721デフォルトの名無しさん2014/07/16(水) 18:52:04.75ID:OnMw5ahO
>>719
なるほど
あんまり気にしなくて良さそうだなありがとう
0722デフォルトの名無しさん2014/07/16(水) 19:38:54.29ID:08lL72ov
1に2を足して3で割る
1 2 + 3 /
0723デフォルトの名無しさん2014/07/16(水) 19:46:08.70ID:VVCsJDdp
>>714
ポーランド記法もあるぞ
C言語で言う関数呼び出しに近い並べ方をする

/ * h + a b 2

Cで加算関数add()、乗算関数mul()、除算関数div()を定義したとすると、上は

div(mul(h,add(a,b)),2)

つまり「h * (a + b) / 2」になる
0724デフォルトの名無しさん2014/07/16(水) 20:02:51.66ID:tcd1R/Nt
HPのRPN電卓が人気なのは、慣れれば(PNや中置より)RPNの方が
使いやすい(思考しやすい)ってことなんだろうね
俺はよく分からんけど
0725デフォルトの名無しさん2014/07/16(水) 20:12:34.32ID:1kMXRFN/
論理演算できるのとかあるんかよ
0726デフォルトの名無しさん2014/07/16(水) 20:19:31.66ID:IAnIlCUw
>>723
lisp だぬ
0727デフォルトの名無しさん2014/07/17(木) 00:05:58.56ID:a1mey4OR
virtual void func(int var = 123) = 0;
こんな感じで純粋仮想関数の引数にデフォルト値を設定してるコードを見たのですが
何か意味があるのでしょうか?
0728デフォルトの名無しさん2014/07/17(木) 00:16:06.23ID:0zYOxTli
var=123は引数指定しないときのデフォ値
virtual ~ = 0;は純仮想関数のこと
このクラスは仮想クラスでfuncメソッドを実装してないし実体化もできません
サブクラスで必ずfuncメソッド実装してねって宣言
0729デフォルトの名無しさん2014/07/17(木) 00:38:38.92ID:vErG7G9r
>>728がアスペ過ぎる件

>>727
デフォルト引数は呼び出し側のコードに対するシンタックスシュガー。
呼び出し側は純粋仮想関数の定義クラスのみを見て呼び出すのが普通なので
何らおかしいことではない
0730デフォルトの名無しさん2014/07/17(木) 01:21:02.34ID:K9zU74xB
>このクラスは仮想クラスでfuncメソッドを実装してないし

んなこたーない
 仮想クラス→抽象クラス
 実装してないし→実装してるかも知れないけど
0731デフォルトの名無しさん2014/07/17(木) 02:07:10.58ID:io69XSml
アスペっていつからバカの代わりになったん?
0732デフォルトの名無しさん2014/07/17(木) 04:21:03.93ID:rKanS680
VS2013のMSVC11.0でローカル変数を戻り値にした場合何もしなくてもmoveしてくれるみたいなC++11の機能は既に実装されていますか?
0733デフォルトの名無しさん2014/07/17(木) 06:56:04.50ID:GgjV7ET4
>ローカル変数を戻り値にした場合何もしなくてもmoveしてくれるみたいなC++11の機能

そんな機能あったっけ?
0734デフォルトの名無しさん2014/07/17(木) 09:56:10.16ID:IRxGKMmZ
NRVOはC++11とか関係なくコンパイラが独自に行う(行っても良い)最適化だぞ
0735デフォルトの名無しさん2014/07/17(木) 12:41:11.54ID:Bl+ex1Cq
NRVOしたらmoveすら行われないのでNRVOは>>732と関係ない
0736デフォルトの名無しさん2014/07/17(木) 16:11:15.49ID:L+oCb2OI
一旦、void *の変数に入れると、
dynamic_castのための情報消えるのでしょうか?_・」
0737デフォルトの名無しさん2014/07/17(木) 19:29:41.65ID:2uwVyKeT
dynamic_castのための情報なんてあんの?
0738デフォルトの名無しさん2014/07/17(木) 19:34:54.77ID:1eXUmlLq
このバグ回避できる猛者はいませんか?
http://social.msdn.microsoft.com/Forums/vstudio/ja-JP/23298b39-4c82-4bc2-a599-ec7788af0e23/clistctrl-?forum=vcgeneralja
0739デフォルトの名無しさん2014/07/17(木) 19:48:22.85ID:G/IBZqpC
>>731
リアルのアスペが「アスペ、アスペ」と言われるの心底恐ろしい事なので、他人も
そう言われると恐ろしがったり憤慨するだろうと思い込んでついつい多用してしまう。

つまり、「アスペ、アスペ」を多用する奴は例外なくリアルでアスペ。
0740デフォルトの名無しさん2014/07/17(木) 21:30:32.67ID:ZpRdyoCC
ワロタw
0741デフォルトの名無しさん2014/07/17(木) 21:38:35.16ID:rl0VCi9H
ウリはイルボンにだだから、>>739がリアルアスペって分かるあるね
0742デフォルトの名無しさん2014/07/18(金) 01:22:47.59ID:FE5kMOuz
>>736
・ポインタにはポインタそのもの以外の情報は含まれない
・ポインタをキャストしてもそれだけではポインタの参照先のデータは変更されない
あとは…わかるな?
0743デフォルトの名無しさん2014/07/18(金) 06:18:01.93ID:P4uOsCCD
longに入れても平気
0744デフォルトの名無しさん2014/07/18(金) 06:34:00.65ID:XHxbn6C8
>>736
消えないけど、キチンとしないと腐る可能性はある。
void*への変換前には、想定している基底クラスのポインタにstatic_castしておき、
戻す際は逆に規定クラスのポインタにstatic_castしてからdynamic_castする。

変換時は派生クラスから直接、戻すときには基底クラスにと言うのでは、多重継承が絡むと悲惨な目にあうこと請け合い。
0745デフォルトの名無しさん2014/07/18(金) 07:48:16.14ID:dUYH8N/1
>想定している基底クラスのポインタにstatic_castしておき

ほうほう、それはどのような理由から?
0746デフォルトの名無しさん2014/07/18(金) 08:22:23.99ID:jUWTV+EC
void*からは直接dynamic_castできないからだろ
0747デフォルトの名無しさん2014/07/18(金) 08:26:06.70ID:MNjetX+m
可逆/非可逆と決め打ちキャストって違いますから。
0748デフォルトの名無しさん2014/07/18(金) 13:51:40.57ID:G86bfh5O
デストリビューションの特定の変数の値を得ることはできないんですか?
不特定なら得られるアルゴリズムがあるからでしょうか?
0749デフォルトの名無しさん2014/07/18(金) 13:57:19.28ID:exI1hoJs
日本語でおk
0750デフォルトの名無しさん2014/07/18(金) 14:07:18.74ID:G86bfh5O
デストリビューションのある値の出るプロバビリティー
を得ることはできないのでしょうか?
デストリビューションからランダムな値を出すアルゴリズムがあるからでしょうか?
0751デフォルトの名無しさん2014/07/18(金) 14:14:24.21ID:rqweNMeD
>>750
ママにもわかる言葉で話せ
0752デフォルトの名無しさん2014/07/18(金) 14:29:43.08ID:QuIJUfIo
ディストリビューションって何? 分散?
文脈指定しなかったらLinuxディストリビューションと受け取るのみ
0753デフォルトの名無しさん2014/07/18(金) 14:50:44.05ID:G86bfh5O
では他の質問します。
なぜstd::string<double>は無いのでしょうか?
0754デフォルトの名無しさん2014/07/18(金) 14:58:26.85ID:exI1hoJs
日本語でおk
0755デフォルトの名無しさん2014/07/18(金) 17:40:38.25ID:PV8tXGrb
std::basic_string<double>とかコンパイル通るかな?
でもたとえコンパイルが通ったとしても誰が使うん
0756デフォルトの名無しさん2014/07/18(金) 20:59:36.40ID:nuTBpive
> なぜstd::string<double>は無いのでしょうか?
文字をdoubleで表現する意味・利点がないからだろう

欲しければ特殊化したchar_traitsを自分で用意すればコンパイルできるところまではいけるはずだ
期待したとおりに動くかどうかまではわからんが
0757デフォルトの名無しさん2014/07/18(金) 21:11:29.22ID:CAlJujN8
int<bool>って無いの?
std::common_type<int<bool>>::typeみたいにSfinaeで便利につかえるやつ
0758デフォルトの名無しさん2014/07/19(土) 00:17:38.31ID:AQ8sn0hT
>>743
なわけねーだろ
0759デフォルトの名無しさん2014/07/19(土) 00:27:34.27ID:OIynjZC4
longに入る保証はないが
longに入らない糞VCは淘汰されるべき
0760デフォルトの名無しさん2014/07/19(土) 00:30:43.58ID:Yw2Estsc
そもそもなんのためにlongに入れたいんだよ?
0761デフォルトの名無しさん2014/07/19(土) 00:35:23.80ID:AQ8sn0hT
どうしても整数にポインタ入れたい場合はuintptr_t使うべき。どんな時か知らないけど
0762デフォルトの名無しさん2014/07/19(土) 00:37:17.59ID:yrAJEjUL
longにポインタ突っ込んでるunkoソースは
世の中にいくらでもある
0763デフォルトの名無しさん2014/07/19(土) 00:49:15.46ID:TQHRbNLh
uintptr_tは移植性が無い
0764デフォルトの名無しさん2014/07/19(土) 01:08:46.62ID:AQ8sn0hT
もしuintptr_tが定義されていない糞コンパイラを使ってた場合は、
ソース内の共通のヘッダのその糞コンパイラしか通らない場所でuintptr_tを適切な型にtypedefするだけでいいだろ。
0765デフォルトの名無しさん2014/07/19(土) 02:08:36.84ID:Uu8pPwAp
それってコンパイラがバージョンアップしてintptr_tができた時に困らね?
0766デフォルトの名無しさん2014/07/19(土) 02:22:16.49ID:Vm5mnqEX
なぜ?
0767デフォルトの名無しさん2014/07/19(土) 03:17:01.77ID:0s6Yl60V
union{
long kuso;
void* ptr;
} unko;

unko.ptr = hoge;
fuga = unko.kuso;

これじゃだめ?
0768デフォルトの名無しさん2014/07/19(土) 06:35:09.81ID:xOXvGf1s
俺は画像処理でsize_tに突っ込んでたな
8bit,16bitではダメなんだろうけど
0769デフォルトの名無しさん2014/07/19(土) 07:00:13.73ID:AQ8sn0hT
>>765
64bitでもな
0770デフォルトの名無しさん2014/07/19(土) 07:07:03.96ID:AQ8sn0hT
>>767
何がしたいの?
>>768
ああ、勘違いしてたかも。その頃のコンパイラがsize_tに対応してるかはさておきsize_tにポインタ入れてもオーバーフローする事はないんじゃない?
0771デフォルトの名無しさん2014/07/19(土) 08:58:10.39ID:xOXvGf1s
>>769、770
64bit時はsize_tがunsigned longだったので、それは大丈夫だった
ちなみにuintptr_tなんて知らなかった

H8ファミリのアドバンスドモードはアドレスは32bitだけどsize_tは16bit
0772デフォルトの名無しさん2014/07/19(土) 08:58:36.27ID:SDAdo38b
long long ago
0773デフォルトの名無しさん2014/07/19(土) 09:28:35.15ID:TVhA1aeD
本来、セグメント:実アドレス で4テラまで拡張可能な32ビット
0774デフォルトの名無しさん2014/07/19(土) 09:29:26.02ID:TVhA1aeD
Windowsは糞も同然
0775デフォルトの名無しさん2014/07/19(土) 09:36:15.56ID:IWYq98T0
全角英数気持ち悪
07767532014/07/19(土) 12:04:36.94ID:f86ObGV1
stringの利点はベクトルとリストの良いとこどりだと思うんですよ。
string<double>はlist<vector<double>>を便利にしたものだと思うのですよ。
あとデストリビューションは確率分布の英語訳です
0777デフォルトの名無しさん2014/07/19(土) 12:06:10.98ID:O++5YktW
>>776
気のせいです
確率分布に関しては一様分布から自前で実装するのが普通
0778デフォルトの名無しさん2014/07/19(土) 12:08:12.91ID:f86ObGV1
>>777
なるほどー、確率分布を計算しないでもサンプリングはできるんですね。
勉強になりました。
list<vector<double>>についてもよろしくお願いします。
0779デフォルトの名無しさん2014/07/19(土) 12:54:12.69ID:MpBDR/wJ
なんか勘違いしてるんじゃないの
string<double>があったとしても似てるといえるのはvector<double>であって
list<vector<double>>とは全く違うぞ
0780デフォルトの名無しさん2014/07/19(土) 13:02:51.88ID:HDcv4V4x
stringはlist<vector<double>>ですよ。
stringは文字列のリストじゃないですか。
文字列をvector<double>とするとlist<vecotr<double>>になりますね。
0781デフォルトの名無しさん2014/07/19(土) 13:03:30.41ID:Vm5mnqEX
std::stringは文字のリストです
0782デフォルトの名無しさん2014/07/19(土) 13:06:27.27ID:HDcv4V4x
ソースありますか?
長さ固定の文字列のリストのようなきがするんですが
0783デフォルトの名無しさん2014/07/19(土) 13:10:51.86ID:Vm5mnqEX
ソースはそれこそソース見りゃわかるだろ
std::vector<char>と一緒だ
0784デフォルトの名無しさん2014/07/19(土) 13:31:48.02ID:7vXH8KFw
本日の釣り師
ID:HDcv4V4x
0785デフォルトの名無しさん2014/07/19(土) 14:00:27.67ID:49sXT33z
釣りだと思ったら専用ブラウザーでNG共有してください
0786デフォルトの名無しさん2014/07/19(土) 14:36:42.00ID:RJFTE+GY
intptr_tに入れるべきだな。
0787デフォルトの名無しさん2014/07/19(土) 15:43:33.56ID:1Dfhl11w
ptrdiff_t使うわ。
0788名無しさん@0新周年@転載は禁止2014/07/19(土) 15:45:35.26ID:sK6c9bRW
【男の夢】Day113「全日本人男性が望む理想のおっぱいが公開される」
https://www.youtube.com/watch?v=kDfbXZZ15s4
0789デフォルトの名無しさん2014/07/19(土) 20:07:35.84ID:sTmxVhyC
>>774
32bitのWindowsはsizeo(time_t)が8bytes(64bit)になったんだよね。
いまだに4bytes(32bit)の32bit Linuxは残念だ。それだけが、残念。
0790デフォルトの名無しさん2014/07/19(土) 21:24:39.92ID:vfUrh3Ml
放送大学、コンピュータについてやってる。面白い。
0791デフォルトの名無しさん2014/07/20(日) 09:59:40.08ID:9FmAbioD
2014-07-19 20:45
コンピュータのしくみ(’14)
第15回 コンピュータの将来
担当講師:岡部 洋一(放送大学長)
https://twitter.com/__obake/status/171193006379118592

改訂回って書かれてるけど今年は何が違うんだろ
http://www.ouj.ac.jp/hp/kamoku/H26/kyouyou/B/joho/1570102.html
15 今後の発展 (第11章) 【改訂回】
コンピュータは今までのようにどんどん進化していくのか。
何らかの限界があるのかといったコンピュータの進化論と合わせて、将来のコンピュータについて概説する。

【キーワード】
コンピュータ、進化、スケール則、汎用コンピュータ、専用コンピュータ


前は過去の番組が無料で見れてたけど今は見れなくなってるね
http://www.moge.org/okabe/lectures/computer/
http://www.moge.org/okabe/temp/computer2014.pdf
0792デフォルトの名無しさん2014/07/20(日) 10:03:03.22ID:S7UqHs8v
ヒ・ミ・ツ!
https://twitter.com/__obake/status/490006817574248448
0793デフォルトの名無しさん2014/07/20(日) 20:00:48.67ID:X/PXfUWh
放送大学、PM8:45コンピュータ、9:00線型代数w
0794デフォルトの名無しさん2014/07/21(月) 11:56:50.56ID:d2ZNMTAr
放送大学よりアニメだろ、なー
0795デフォルトの名無しさん2014/07/21(月) 12:50:18.08ID:mYM6Tgvw
15ってスパコンの紹介してた回だと思うけど
最近の家庭用PCはもう当時のスパコンの能力は超えてるから改訂?
0796デフォルトの名無しさん2014/07/21(月) 13:45:22.92ID:S8fE5fJF
技術者なら常に勉強しなさい!!!
0797デフォルトの名無しさん2014/07/21(月) 17:49:36.54ID:d29c7r1+
vectorは連続するメモリ空間に値が並んでないといけないけど
stringはそういう仕様無いからvector<char>ではないんじゃない?
0798デフォルトの名無しさん2014/07/21(月) 18:01:04.80ID:258Qrgwd
>>797
http://codepad.org/tPcCdfqS

vector の派生かどうかはわからないけれども、
これをお手軽に実現したいのなら、連続するメモリ空間に展開しているんじゃないかな‥
0799デフォルトの名無しさん2014/07/21(月) 18:14:39.22ID:su0Tmyz4
C++11で正式に連続性が保証されるようになったから気にするな
0800デフォルトの名無しさん2014/07/21(月) 18:19:07.58ID:d29c7r1+
>>799
>C++11で正式に連続性が保証
なんてこった、ホントだ知らんかったw
0801KUSO KOTE ◆unko./w.Osri 2014/07/21(月) 18:21:33.15ID:Ku7uPJru
>>797
連続じゃなかったっけ

----ISO/IEC 14882:2011 21.4.1p5
The char-like objects in a basic_string object shall be stored contiguously
0802KUSO KOTE ◆unko./w.Osri 2014/07/21(月) 18:22:13.73ID:Ku7uPJru
おっと先に書かれていたすみませぬ。
0803デフォルトの名無しさん2014/07/21(月) 18:26:50.85ID:258Qrgwd
いつもありがとうございます
0804デフォルトの名無しさん2014/07/21(月) 18:26:57.03ID:nI+eBqTg
どっちみち data() で連続性確保できるじゃんかよ
0805デフォルトの名無しさん2014/07/21(月) 18:28:05.51ID:o5z7JOEW
data入ったの11からだし…
0806デフォルトの名無しさん2014/07/21(月) 21:18:39.98ID:3nqQLRBx
>>805
dataは1998からあるのだが
0807デフォルトの名無しさん2014/07/21(月) 21:36:35.46ID:dhQPcixf
dataもc_strも03ですでにある
11から導入されたのはそれらの呼び出しの定数時間保証
=メンバ関数呼び出し時に内部データを連続領域にコピーして返す実装の禁止
=内部データを連続領域で保持する実装の要求
0808デフォルトの名無しさん2014/07/21(月) 22:10:58.47ID:m69vy/uT
追加されたのはvectorのdata()だよね。
cのapiと連携するのが楽になった。
0809デフォルトの名無しさん2014/07/22(火) 00:04:22.03ID:Vdixnqey
>>808
そうか?
Cインタフェースならoperator[]で事足りね?
0810デフォルトの名無しさん2014/07/22(火) 00:08:17.50ID:Dz34/rA1
ポインタを受け取るようなC APIのことだろう
0811デフォルトの名無しさん2014/07/22(火) 00:23:29.66ID:Vdixnqey
C API なら↓で充分じゃね?
vector<char> a(100);
strcpy(&a[0], "abc");
0812デフォルトの名無しさん2014/07/22(火) 00:39:30.98ID:Dz34/rA1
それの保証もC++11から
0813デフォルトの名無しさん2014/07/22(火) 00:41:35.78ID:Vdixnqey
そんなことはないでしょ。
vectorに関してのメモリ連続性は03で文書化されてたよ。
0814デフォルトの名無しさん2014/07/22(火) 00:44:54.35ID:XmTqIxPz
暫定的にね
0815デフォルトの名無しさん2014/07/22(火) 00:49:01.75ID:LkWjPyuU
>>814
kwsk
俺も03時点で規格化されていると思ってたから気になります!
0816デフォルトの名無しさん2014/07/22(火) 01:04:13.93ID:oXIwm1js
おまいら息を吸って吐くように妄想が出てくるのな

1st Editon 1998
 vector: dataなし
 string: c_str, dataあり

2nd Editon 2003
 vector: &v[n] == v[0] +nの保証を追加

3rd Editon 2011
 vector: data追加
 string: dataがc_strと同じに。
     &*(s.begin() + n) == &*s.begin() +nの保証を追加
0817片山博文MZ悪魔崇拝 ◆T6xkBnTXz7B0 2014/07/22(火) 01:06:07.06ID:zJWBojIk
http://stackoverflow.com/questions/247738/is-it-safe-to-assume-that-stl-vector-storage-is-always-contiguous
0818デフォルトの名無しさん2014/07/22(火) 01:08:47.83ID:LfybK2en
STLみたいな化石ライブラリじゃなくて
標準のstd::vector, std::basic_stringの話をしてください
0819デフォルトの名無しさん2014/07/22(火) 01:15:16.48ID:7219qbQL
>>818
こんなところに書いてないで直接stackoverflowに書いてこいよ
0820デフォルトの名無しさん2014/07/22(火) 02:00:01.16ID:XmTqIxPz
2003はあくまでも暫定的なんだよ
アドレスを抽出する確定的なメンバー関数が用意されてないかっただろ
昔の規格でもコンパイラが通るのは非常にまずいのだよ
0821デフォルトの名無しさん2014/07/22(火) 02:02:30.36ID:Xum8Qzge
>>820
>アドレスを抽出する確定的なメンバー関数が用意されてないかっただろ
oprator[]()でなにかご不満が?
0822デフォルトの名無しさん2014/07/22(火) 02:07:00.41ID:Vdixnqey
>>820
operator[]でダメな理由は?
0823デフォルトの名無しさん2014/07/22(火) 02:07:57.46ID:Vdixnqey
あ、被った。すまん。
0824デフォルトの名無しさん2014/07/22(火) 02:24:04.66ID:qs+WQu09
>>791
幾度も放映しているな
0825デフォルトの名無しさん2014/07/22(火) 02:58:35.24ID:XmTqIxPz
[]は、本来要素を出し入れするためのもので&でアドレス無理矢理
取っているのはスマートではないよ
0826デフォルトの名無しさん2014/07/22(火) 03:04:14.54ID:XmTqIxPz
2003以前の仕様ならリファレンサーであることも視野にいれておかなくてはならないし、環境によってはバグの温床になりかねない
0827デフォルトの名無しさん2014/07/22(火) 06:02:56.71ID:7219qbQL
昔の規格で通るとまずいっていってもvectorが連続してない実装見たこと無いな。見たことある人いる?

今からC++03より前の規格参照してライブラリ作るやつなんていないだろうし
0828デフォルトの名無しさん2014/07/22(火) 06:46:06.31ID:DwkuFwbx
>>826
[]で起きて11で追加されたdata()なら回避できるバグ
というのが何なのか教えてはもらえないだろうか
0829デフォルトの名無しさん2014/07/22(火) 07:22:22.04ID:d6XRxtMh
data()はempty時でも例外出さない
0830デフォルトの名無しさん2014/07/22(火) 07:31:57.76ID:DRWzN1pt
つまりdataは[]だと気づくはずのミスに気づかないバグの温床ということですね
0831デフォルトの名無しさん2014/07/22(火) 07:36:27.72ID:7219qbQL
operator[]は例外出さないよ。出るのはat
0832デフォルトの名無しさん2014/07/22(火) 07:55:41.90ID:2Rm5dE3g
空の時にv[0]してしまったのなら諦めがつくけれど、
空の時にdata()は適当なポインターを返してミスに気づかないことがあるのかー。
data()こそバグの温床だね うんうん。
0833デフォルトの名無しさん2014/07/22(火) 08:02:49.84ID:YxIecBAI
data単体で使うことなんてないだろ
0834デフォルトの名無しさん2014/07/22(火) 08:06:20.65ID:gLVnM0Vt
温床の意味判ってるか?
0835デフォルトの名無しさん2014/07/22(火) 08:08:46.89ID:BNIwdJxa
温床の意味判ってるか?
0836デフォルトの名無しさん2014/07/22(火) 08:26:31.41ID:1VMWpZ78
床が暖かい。つまり、オンドルだろ? JK
0837デフォルトの名無しさん2014/07/22(火) 10:25:09.85ID:z9lahGhQ
例外出さないならせめてぬるぽを返す仕様にして欲しいもんだ
0838デフォルトの名無しさん2014/07/22(火) 10:28:45.99ID:e98fz3Ln
>>833
ほらいたぞ>>837
0839デフォルトの名無しさん2014/07/22(火) 12:10:14.29ID:XmTqIxPz
>>828
data() があるかないかで vector の領域が連続である環境かどうかきっちり把握できる
0840デフォルトの名無しさん2014/07/22(火) 12:17:44.45ID:XmTqIxPz
data() 以前の環境は、言語環境の仕様確認が必要だからすべての環境で動作するプログラムを作成する場合に環境依存の問題を解消できない。
0841デフォルトの名無しさん2014/07/22(火) 12:41:48.45ID:Q4Gbe4KR
>>840
そんな環境は存在したのかい?
みんな&v[1]=&v[0]+1 を期待して使っていたのに仕様上の保証が無かったので追加したわけだけれど
バグの温床と言われてもね
0842デフォルトの名無しさん2014/07/22(火) 16:41:04.62ID:wwmjqdAW
>>840
言いたい事はわかった。
確かに、data()の有無で簡単に見分けられる点は利点だね。
でも、バグの温床になるという主張は通らないと思う。
実際どういうバグになるのか教えてほしい。
0843デフォルトの名無しさん2014/07/22(火) 17:51:11.28ID:d6XRxtMh
operator[]は範囲チェックしないと明言されていたっけ?
msvcがしてくれるんで面倒だったのだけど
0844デフォルトの名無しさん2014/07/22(火) 18:42:13.90ID:1+XnpiPT
Release版でも?
0845デフォルトの名無しさん2014/07/22(火) 18:48:53.87ID:7SenP8Gs
operator[]もat()も*(begin()+n)といった意味になるよう実装しろ
ただしat()の場合はout_of_rangeを投げろとしか書いてない

まあVCの場合イテレータに範囲外チェックが付いてるからな
0846デフォルトの名無しさん2014/07/22(火) 22:10:58.50ID:C/6ZBKHs
範囲外アクセスは未定義動作だからどうなるべきとかない。
手元にVC++無いから確認出来ないけどassertでチェックされてるんじゃない?手元のgnuのlibstdc++はノーチェックLLVM/Clangはプリフロセッサマクロで有効にした場合のみassertが入ってた
0847デフォルトの名無しさん2014/07/23(水) 00:09:59.72ID:kXd0VYSv
>>843
defineでチェックしないように出来たはず
0848デフォルトの名無しさん2014/07/23(水) 00:33:02.89ID:tGsBfAr4
Visual C++で試したけど何も反応しなかったぞ
VC++ 2013 CTP Debug / 14 CTP2
0849デフォルトの名無しさん2014/07/23(水) 00:41:11.44ID:3zspOrim
チェックを行う反復子
http://msdn.microsoft.com/ja-jp/library/aa985965.aspx
0850デフォルトの名無しさん2014/07/24(木) 00:42:57.05ID:dgV+vw+i
クラスを配列として使用する時にコンストラクタに引数を渡すってどうやってる?

Class **class;
class = new Class*[5];
class[0] = new Class(・・・);
・・・
delete class[0];
delete [] class;

これ以外にスマートなやり方あるかな
0851デフォルトの名無しさん2014/07/24(木) 00:47:14.53ID:4t+fFG8a
>>850 std::vector::emplace()
0852デフォルトの名無しさん2014/07/26(土) 00:12:24.27ID:hFYKSO2x
>>850みたいな糞コード見せられたら
さっちん 発狂しちゃうよ?
0853デフォルトの名無しさん2014/07/26(土) 00:31:28.35ID:vX+zD2iO
なんで class とかおもいっきし予約語変数に使っているの?
馬鹿なの?タヒぬの?
0854デフォルトの名無しさん2014/07/26(土) 00:43:31.08ID:6NmHP0zd
VC++でちょっと試したけど
U+200B(ZWSP)文字を変数名に含めるとあたかも
キーワードと同じ名前が使えているように見えるな。
馬鹿には見えないコピペという嫌がらせとして使える。
0855デフォルトの名無しさん2014/07/26(土) 01:33:06.15ID:Xdk7ISQK
例えなのに突っ込むの?
馬鹿なの?タヒぬの?
0856デフォルトの名無しさん2014/07/26(土) 01:40:54.35ID:vX+zD2iO
字句解析も通らないまともな例えも出来ないの?
馬鹿なんだねタヒんじゃうんだろうね?
0857デフォルトの名無しさん2014/07/26(土) 01:56:21.16ID:Xdk7ISQK
普通に読み替えればいいだけだろ?
アスペ?池沼?しぬの?
0858デフォルトの名無しさん2014/07/26(土) 02:10:42.35ID:vX+zD2iO
馬鹿は自覚がないからな
タヒななきゃ治らない不治の病だな
0859デフォルトの名無しさん2014/07/26(土) 07:43:34.03ID:Fh6+kzNL
>>850
それだけの情報で最適解を問われても・・・
GoFのデザインパターンとか読んでみたら
0860デフォルトの名無しさん2014/07/26(土) 07:54:10.78ID:h/TRjXuF
とゆうか個々にコンストラクション時のパラメータが必要なクラスを大量に
複製する必要があるとしたら、それはクラス自体やプログラムの設計に
欠陥があるんじゃないだろうか?
0861デフォルトの名無しさん2014/07/26(土) 08:06:09.30ID:ZVICdgrk
そうでもない
0862デフォルトの名無しさん2014/07/26(土) 10:26:59.83ID:Wi1QFEHO
実際のところそれなりのクラスでなければ>>850みたいな設計より
素直にreserveしたvectorにpush_backするほうが速さも含めたあらゆる面で優れているんだがな
0863デフォルトの名無しさん2014/07/26(土) 10:58:55.36ID:EislOxX9
もっといいのがC++捨てて他のマネージド言語使うことだな
そんでspringとかDIで生成する
0864デフォルトの名無しさん2014/07/26(土) 13:21:08.28ID:WST624mX
C#にAddMessageFilter
というのが有りますが、Visual Studio のC++(CLR使わない)でも
同じようなこと出来ますか?メッセージをキャプチャーしたいのです。
0865デフォルトの名無しさん2014/07/26(土) 13:24:38.00ID:DTo922cR
SetWindowsHookEx
0866デフォルトの名無しさん2014/07/26(土) 13:46:59.00ID:WST624mX
>>865
有難うございます。さっそく調べてみます。
0867デフォルトの名無しさん2014/07/26(土) 14:37:59.36ID:Xdk7ISQK
>>860
エディットボックスを使用するためのクラスがあるとすると
複数のエディットボックスを使用するために必要だろ
08688642014/07/26(土) 14:47:42.51ID:WST624mX
>>865
あるプロセスに送られる全てのメッセージをフックしたいのですが、
どこかに良いサンプルあれば教えてください。探しているのですが
見つかりません。
0869デフォルトの名無しさん2014/07/26(土) 17:44:34.59ID:h/TRjXuF
>>867
ひでぇ例えだなぁ、それってコンストラクタで全部セッティングする必要がどこにあるんだ?
0870デフォルトの名無しさん2014/07/26(土) 18:01:14.07ID:Xdk7ISQK
>>869
ただの例えなんだから必要あるないじゃないだろ
 ○○を使用するためのクラスがあるとすると
 複数の○○を使用するために必要だろ
と自分で○○の部分を読み替えできないのか?

エディットボックスによって親が変わるからコンストラクタで設定とか想定できないのかよ
これも例えだからずれた突っ込みすんなよ?
0871デフォルトの名無しさん2014/07/26(土) 22:54:33.55ID:h/TRjXuF
>>870
ずれた例えをしておいて「俺はズレてるから突っ込まれても困る(キリッ」とか甘え過ぎだな…
0872デフォルトの名無しさん2014/07/27(日) 00:32:33.88ID:QPDAOaP0
>>871
どう見てもお前が捻くれてるんだが
0873デフォルトの名無しさん2014/07/27(日) 02:33:35.19ID:/na8DLgf
ただの例えでも必要性は絶対に必要ニダ!
必要性のないコード例は禁止あるよ
0874名無しさん@0新周年@転載は禁止2014/07/28(月) 17:50:46.89ID:i/rvh4PY
【男性必見】Day62「ついにアダルトビデオも4K次世代画質へ」
https://www.youtube.com/watch?v=kDfbXZZ15s4
0875デフォルトの名無しさん2014/07/28(月) 21:19:25.27ID:XSb707Vx
プログラムやる奴にはアニメ、漫画、アダルトビデオが大好きな奴が多いよな。
いくらそれらの中で一番アダルトビデオ好きな奴が多いC/C++erのスレでもな...
0876デフォルトの名無しさん2014/07/28(月) 21:45:01.88ID:vzbhE8SK
>>875
アダルトはプログラム関係ないだろ
むしろ二次元に流れてる分少ないぐらいだ
0877デフォルトの名無しさん2014/07/28(月) 22:33:16.37ID:tepR/B4V
プログラミングするやつにはパン好きな奴が多いよな!
0878デフォルトの名無しさん2014/07/28(月) 23:51:18.53ID:+VSel65U
CからC++へ変更するのは
とりあえず構造体をクラスにするでok?
0879デフォルトの名無しさん2014/07/29(火) 00:05:39.78ID:Br1WLOnz
構造体のままでいいじゃない。
クラスにするかどうかはパラダイム選択の問題では?
オブジェクト指向で再設計だな
0880デフォルトの名無しさん2014/07/29(火) 00:48:54.91ID:eQiQakEi
第一引数に構造体渡して何か返したりその構造体のメンバに何か設定したりするのはそのままその構造体のメンバー関数にしていいとおもう。
グローバルな名前空間じゃないってだけでもメリット
0881デフォルトの名無しさん2014/07/29(火) 01:30:25.07ID:VigjQVAX
機能毎にプロジェクトが分けてあって(機能プロジェクト)
メインプロジェクトにファイルをコピーしてプロジェクト固有の処理が必要なら追加
結果メインプロジェクトの個数分機能プロジェクトの.h.cpp.rcコピーが必要
ってやってるんだがもっといいやり方無いかな?

例えば
リスト構造を使用するプロジェクトがある
メインプロジェクトにコピー
→メインプロジェクト固有の構造体メンバ追加して使用する
って感じで使ってる
他の人はどんな感じでやってる?
0882デフォルトの名無しさん2014/07/29(火) 01:42:49.49ID:C5tbuDhu
share/とかこさえて共用
0883デフォルトの名無しさん2014/07/29(火) 03:25:40.79ID:IsBE7wYX
>>878
>構造体をクラスにするでok?

Yes
C++に構造体というものは無いので
0884デフォルトの名無しさん2014/07/29(火) 04:47:04.23ID:ufPt6u02
>>881
独立性の高いプロジェクトなら
static な .a or .lib や
.so or .DLL 化してしまって
メインプロジェクト側は .h だけ使う
0885デフォルトの名無しさん2014/07/29(火) 07:46:09.55ID:IygmE6D0
>>878-880
https://github.com/HatsuneMiku/FontGlyph/tree/master/src
0886デフォルトの名無しさん2014/07/29(火) 18:33:50.52ID:4ECyUkwP
>>883
C++に構造体はあるよ,メソッドも定義できる構造体だけど
0887デフォルトの名無しさん2014/07/29(火) 18:52:39.13ID:BJmMNc0a
ねえよ
0888デフォルトの名無しさん2014/07/29(火) 18:53:00.43ID:rBtE9P3L
構造体は存在するよね「構造体 is-a クラス」という関係だけれども
0889デフォルトの名無しさん2014/07/29(火) 18:54:31.65ID:H8EUDzLQ
あるよ。classとほぼイコール
0890デフォルトの名無しさん2014/07/29(火) 21:17:01.94ID:6Uab2rmr
規格にはそんなことは一言も書かれていないのに
どうしてこう、息を吸って吐くようにウソをつくのか
0891デフォルトの名無しさん2014/07/29(火) 21:25:11.08ID:OGgZvd6a
そんなこと言って
どこが嘘か指摘できない無能
0892デフォルトの名無しさん2014/07/29(火) 21:26:09.46ID:BJmMNc0a
どこに構造体という言葉が規定されているのか示せない無能
0893デフォルトの名無しさん2014/07/29(火) 21:35:16.95ID:3+sGdxzk
>>888
それだと構造体はクラスのすべての機能を持つということになってしまうよ
クラス is-a 構造体 でしょ。クラスの方が構造体の機能+αを持っているのだから
0894デフォルトの名無しさん2014/07/29(火) 21:39:28.79ID:P21nvuPZ
+αって何?
0895デフォルトの名無しさん2014/07/29(火) 21:41:05.16ID:3+sGdxzk
コンストラクタやデストラクタ
0896デフォルトの名無しさん2014/07/29(火) 21:47:11.14ID:OGgZvd6a
構造体にもコンストラクタ、デストラクタ書けるけど
違いはデフォルトのアクセス指定子しかないよ
0897デフォルトの名無しさん2014/07/29(火) 21:48:32.29ID:VigjQVAX
メンバ関数
プライベート
パブリック
0898デフォルトの名無しさん2014/07/29(火) 22:02:39.64ID:+2235k/1
private デフォルトなのが class で
public デフォルトなのが struct
0899デフォルトの名無しさん2014/07/29(火) 22:12:01.99ID:kX0Yuk84
『違いはデフォルトのアクセス指定子しかないよ』

こういうことを言う奴に限って「アクセス指定子」が
どこのアスセス指定子のことを指すのか絶対に説明できない不思議
0900デフォルトの名無しさん2014/07/29(火) 22:17:24.86ID:sU+hd/26
ちょっと待った
>>893が何か言った
0901デフォルトの名無しさん2014/07/29(火) 22:23:00.44ID:SNz2hPcW
>>899
割とまじめに「どこの」の意味がわからないので
解説希望
0902デフォルトの名無しさん2014/07/29(火) 22:32:35.41ID:P21nvuPZ
>>899
絶対出来ないと断言できる理由は?
0903デフォルトの名無しさん2014/07/29(火) 23:27:29.20ID:EBj+gGC4
>>901
メンバーと継承時のベースグラスだろ
0904デフォルトの名無しさん2014/07/29(火) 23:38:48.41ID:EuLIBRAq
>>893
>クラス is-a 構造体 でしょ。クラスの方が構造体の機能+αを持っているのだから

ISO/IEC 14882:2011はおろか2003にも無い仕様だね
その脳内妄想はやめた方がいい
0905デフォルトの名無しさん2014/07/29(火) 23:42:41.66ID:+2235k/1
>>903
前者はわかるけど、後者ってどういうこと?

struct A : class Base { };
class A : struct Base { };
どこの議論かが見えない
0906デフォルトの名無しさん2014/07/29(火) 23:48:49.24ID:sObRQZBs
structの方がC言語でもそのまま構造体として使えるものを定義出来る(場合によってはプリフロセッサと__cplusplusを駆使して)という意味で多機能だよな!
0907デフォルトの名無しさん2014/07/29(火) 23:49:56.95ID:VlFdNbFI
>>905
君はクラスの派生をしたことがないのか?
class d : public b ←このパブリック
{
};
0908デフォルトの名無しさん2014/07/29(火) 23:50:12.33ID:P21nvuPZ
>>893
キミに残されている選択肢はクラスとはC++のclass, struct,
構造体とはCのstructと言い張る事だけだ
0909デフォルトの名無しさん2014/07/29(火) 23:53:09.78ID:+2235k/1
>>907
b が struct の場合

class d : b {} と
class d : public b {}
は等価なことなの? という話

デフォルトのアクセス指定子 からの流れ
0910デフォルトの名無しさん2014/07/30(水) 00:00:09.10ID:r3jA/z7W
>>909
「デフォルトがpublicなだけ」とだけ言われると
少なくない人がそう勘違いするけど違う。
struct s : x {};
と
struct s : public x {};
が同じ
0911デフォルトの名無しさん2014/07/30(水) 00:03:24.06ID:SCvOp0sp
>>910
thx そっち側か。 すっきりした

やったことないパターンだから気にもしてなかったけど、勉強になった ありがとね
0912デフォルトの名無しさん2014/07/30(水) 00:13:09.65ID:3Vj1p70/
C++のISO規格2011は2003からの修正で
構造体の消し忘れが1箇所あるよね?
0913デフォルトの名無しさん2014/07/30(水) 00:57:42.39ID:Lx6eGAbr
Cの構造体とC++のクラス、ならともかく
C++の構造体はクラスの一種って扱いなんだよなあ
0914デフォルトの名無しさん2014/07/30(水) 02:04:09.56ID:p8tf5nVw
むしろC++のクラスは構造体と理解すれば分かりやすい
0915デフォルトの名無しさん2014/07/30(水) 05:07:55.67ID:ycWHhajY
>>914
いいかげん
息を吸って吐くようなウソをつくのはやめた方がいい
0916デフォルトの名無しさん2014/07/30(水) 07:02:31.10ID:bupIlqa6
構造体を継承してクラス
0917デフォルトの名無しさん2014/07/30(水) 07:09:00.46ID:B3MDpURs
>>915
だいたいあってるだろ
構造体に毛が生えただけ
0918デフォルトの名無しさん2014/07/30(水) 10:23:04.53ID:w2VcxxPr
見苦しいケツ毛がボーボーに生えてる
0919デフォルトの名無しさん2014/07/30(水) 10:32:14.94ID:pnS9wqNv
村岡さんをばかにするな!
0920デフォルトの名無しさん2014/07/30(水) 11:27:43.38ID:w2VcxxPr
見苦しくないケツ毛なので問題ない
0921デフォルトの名無しさん2014/07/30(水) 13:48:56.04ID:SvzBKPnt
まーたくだらない定義論争始まってる
C++のstructはCのstructと同じようにも使えるんだから
構造体機能を含んでいるでいいじゃん
0922デフォルトの名無しさん2014/07/30(水) 13:56:49.46ID:3y+toC8l
定義がくだらないと思う人はプログラミングをすべきでない
0923デフォルトの名無しさん2014/07/30(水) 14:26:53.41ID:0chgaDSZ
初心者歓迎
環境依存OK
0924デフォルトの名無しさん2014/07/30(水) 17:56:52.23ID:bRUL0BFv
WindowsのVS2013のC++で
void func(string *array)
{
   int s = _countof(array);   // エラーする
}
void main()
{
   string array[3] = {"000","111","222"};
   int s = _countof(array);   // 3になる
   func(array);
}
_countofで配列要素の数を取得したいのですが、なぜfunc()内では、
_countofが使えないのでしょうか?どうすればfunc()内で要素数3
が得られますか?
0925デフォルトの名無しさん2014/07/30(水) 17:59:51.19ID:g1c+taJs
void func(string &array)
{
   int s = _countof(array);   // エラーする
}
0926デフォルトの名無しさん2014/07/30(水) 18:03:56.75ID:0jrgScMV
C言語でGUIプログラミングをするには、やはり、Gtk+しかありませんか?
0927デフォルトの名無しさん2014/07/30(水) 18:04:43.33ID:g1c+taJs
訂正
void func(string (&array)[3])
{
   int s = _countof(array);   // OK!
}
0928デフォルトの名無しさん2014/07/30(水) 18:05:23.75ID:bRUL0BFv
>>925
レスありがとうございます。教えてもらった方法でも、同じエラー出ます。
0929デフォルトの名無しさん2014/07/30(水) 18:07:15.82ID:bRUL0BFv
>>927
うまく行きました。ありがとうございます。
要素数が3以外の一般の場合はどうすればよいでしょうか?
0930デフォルトの名無しさん2014/07/30(水) 18:15:35.00ID:g1c+taJs
>>929
typedef
0931デフォルトの名無しさん2014/07/30(水) 18:24:08.74ID:hDem8HYV
>>929

# re: [C++]_countof マクロ 2008/03/08 13:14 アキラ
C++0xのconstexprがはやくほしいなー、と思いました
コンパイル時に実行される関数を作れたほうが手っ取り早いw

template <class T, size_t Size>
constexpr size_t count_of(const T(&ar)[Size])
{
 return Size;
}

int ar[3];
int arr[count_of(ar)]; // arの要素数で新たな配列作成

さよなら変態テクニックw

http://blogs.wankuma.com/melt/archive/2008/03/08/126828.aspx
0932デフォルトの名無しさん2014/07/30(水) 18:55:28.27ID:bRUL0BFv
>>931
レスありがとうございます。試してみたのですが、
int arr[count_of(ar)];
のところで、
template<class T, size_t Size> size_t coont_of(const T (&ar)[Size])
エラー:関数呼び出しでは、定数式に定数値が必要です。

と出るんですが。
0933デフォルトの名無しさん2014/07/30(水) 19:04:17.72ID:Lx6eGAbr
>>924
C/C++の配列を配列のまま関数に渡すには、関数の仮引数でも要素数を指定するしかない(>>927)
だが普通は渡されるほうに要素数を指定したくない、その場合ポインタになり関数側では長さが分からなくなる
なので、

・std::string配列の代わりに std::vector<std::string> を使う
・要素数も引数として渡す

上はC++の機能を積極的に使うパターン
下はC言語から使われてるパターン
0934デフォルトの名無しさん2014/07/30(水) 19:17:02.22ID:SvzBKPnt
>>922
「くだらない定義」と言ったが「定義はくだらない」とは言ってない
役立たずの規格バカはすっこんでろ
0935デフォルトの名無しさん2014/07/30(水) 19:31:33.20ID:qwpIAm/n
定義論争がくだらないって言ってるのに
定義がくだらないって何だよw
0936デフォルトの名無しさん2014/07/30(水) 19:38:17.12ID:bRUL0BFv
>>933
解説ありがとうございました。
vectorを使うようにします。
vectorは便利なのは分るのですが、二次元配列の代わりに使う場合、
std::vector<std::vector<int>> v;
みたいな書き方が、Cになじみの深い私には今一つ見栄えが良くないなあと思います。
こういう場合のvectorをスッキリ書く方法ありますか?
0937デフォルトの名無しさん2014/07/30(水) 19:40:05.65ID:IgNsWgE5
>>935
一つ前のレスくらい読めよ
0938デフォルトの名無しさん2014/07/30(水) 19:45:54.16ID:gr9rcF4R
>>936
行列ならmatrix、多次元配列ならmulti_array
てのがboostにある
0939デフォルトの名無しさん2014/07/30(水) 19:46:43.63ID:EhyLj3aH
>>936
vectorはそういう約束になってるんだ。そのままつかえよ。
初期化も一行できるし多少のことは目をつぶれよ。
初期化も含めた2次元配列はCでは一行で完了しない。
0940デフォルトの名無しさん2014/07/30(水) 19:52:14.86ID:g1c+taJs
>>939
>初期化も含めた2次元配列はCでは一行で完了しない。

えっ
0941デフォルトの名無しさん2014/07/30(水) 19:58:34.92ID:U3vqYHMy
>>939
参考までに100×100のゼロ初期化されたdoubleの二次元配列の作り方を教えてください
0942デフォルトの名無しさん2014/07/30(水) 20:04:26.14ID:EhyLj3aH
こういう初期化。


#include <iostream>
#include <vector>
using namespace std;

int main() {

vector< vector<int> > v( 100, vector<int>(1000, 0) );

typedef vector<int> retu;
vector< retu > w( 100, retu(1000, 0) );
}
0943デフォルトの名無しさん2014/07/30(水) 20:08:23.05ID:EhyLj3aH
>>941
#include <iostream>
#include <vector>
using namespace std;


int main() {
int N=100;
typedef vector<double> dretu;
vector< dretu > vec( N, dretu(N, 0.0) );

cout<<"tatesize="<<vec.size()<<" yokosize="<<vec[0].size()<<endl;
cout<<"vec[0][0]="<<vec[0][0]<<endl;
return 0;
}
0944デフォルトの名無しさん2014/07/30(水) 20:51:44.35ID:2L0zFGiE
>vector< vector<int> > v( 100, vector<int>(1000, 0) );
こういう糞コードを真顔で書く人って
頭おかしいんじゃないかと思う
0945デフォルトの名無しさん2014/07/30(水) 21:01:22.80ID:W9PSXMzc
>>944
どの点がクソ?
0946デフォルトの名無しさん2014/07/30(水) 21:56:50.09ID:qwpIAm/n
ただ単に批判するだけで具体的な事は言わない奴はスルーでいいと思うが
0947デフォルトの名無しさん2014/07/30(水) 22:48:22.03ID:gCaS+ceb
Cに馴染み深かったらポインタから配列のサイズを取ろうとなんてしないだろ…
0948デフォルトの名無しさん2014/07/30(水) 23:05:57.62ID:dNII6Xox
夏休みだからさ
0949デフォルトの名無しさん2014/07/30(水) 23:13:49.89ID:XrVWbNH+
> それだと構造体はクラスのすべての機能を持つということになってしまうよ
> クラス is-a 構造体 でしょ。クラスの方が構造体の機能+αを持っているのだから

今更だがワロタw
なんだ+αって?
0950デフォルトの名無しさん2014/07/31(木) 00:57:41.24ID:jWkZT9V7
int16_t と int_32_t の間の int24_t ってのはやっぱり無いんでしょうか
環境はx86_64、linux、gcc
0951デフォルトの名無しさん2014/07/31(木) 00:59:41.70ID:KWL6BjZO
2のべき乗って知ってる?
嫌われ者のビットフィールド使うって手も
0952デフォルトの名無しさん2014/07/31(木) 01:10:02.84ID:IQWxjy8B
>>951
べつにそれが24bit整数が存在しない理由にならんよ
0953デフォルトの名無しさん2014/07/31(木) 01:10:33.17ID:jWkZT9V7
>>951
やっぱり自分で作るしかないんですかね
ググっても各自作ってるぽい
よく言われる車輪の再発明は云々……
0954デフォルトの名無しさん2014/07/31(木) 01:13:24.52ID:KWL6BjZO
24+8=32
だけど
32ビットアクセスのほうが
メモリケチりたいだけ?
0955デフォルトの名無しさん2014/07/31(木) 01:15:34.62ID:yKtyQ3zg
ビットフィールドでおk
0956デフォルトの名無しさん2014/07/31(木) 01:25:23.81ID:u2zE/A7k
>>953 あのさ、何でINT16, INT32 が有るか理解して無いだろ。
CPUのレジスターってのを調べてご覧。
多分演算結果を24bitで格納したいからそんなことを考えたんだろうけど。
32bit演算して24bitで格納すれば良いだけの話。
0957デフォルトの名無しさん2014/07/31(木) 01:25:49.03ID:jWkZT9V7
やりたい処理が24bit区切りだと都合が良いというそれだけ
とりあえず自分で実装してみます
0958デフォルトの名無しさん2014/07/31(木) 01:28:33.56ID:u2zE/A7k
>>957 やって見るのは良いけど、勉強だからついでにスピード測定した方が良いよ。
かなりスピードが遅くなるはず。
基礎を理解することが大事だよ。
0959デフォルトの名無しさん2014/07/31(木) 01:34:39.18ID:jWkZT9V7
>>956
そうです24bitづつ格納したいだけなんで、
自分でやるならどうってことはないんですが、
もしint24_tがあるなら都合が良いなと思ったまでで。

>>958
速度について了解です。
0960デフォルトの名無しさん2014/07/31(木) 01:35:36.12ID:KWL6BjZO
適性無いような感じだから、あまり突っ込まないほうが
0961デフォルトの名無しさん2014/07/31(木) 01:36:02.12ID:jWkZT9V7
>>960
サーセン
0962デフォルトの名無しさん2014/07/31(木) 01:44:28.73ID:m9V5jEgt
解ってるかもしれんがbitfield使ってもメモリ上に24bitで詰まって格納されるとは限らんよ
0963デフォルトの名無しさん2014/07/31(木) 02:06:12.37ID:KWL6BjZO
24bit整数演算があれば、楽できると思ってるだけじゃないですかね
間違ったりするほうが・・・
0964デフォルトの名無しさん2014/07/31(木) 02:15:59.96ID:jWkZT9V7
素直に8bit×3を1セットで処理してきます
有難うございました
0965デフォルトの名無しさん2014/07/31(木) 03:11:53.88ID:FOk5tvdO
何ビット目に何ビットの値をセットする
何ビット目から何ビットを何型として取得する
こんなん自作した方がいいよ
0966デフォルトの名無しさん2014/07/31(木) 03:20:31.93ID:LPUMyosE
24bitと聞いてどうせrgbだろうと思ったらやっぱりrgbだった。
0967デフォルトの名無しさん2014/07/31(木) 04:01:17.09ID:I9wcB7pD
むしろ色ならアルファ値も含めて32bitでちょうど良い
0968デフォルトの名無しさん2014/07/31(木) 15:28:01.76ID:rIdc6Eew
http://www.buzzword.jp/img/face10.png
0969デフォルトの名無しさん2014/07/31(木) 15:54:35.55ID:bpHeI3uW
WindowsでboolからBOOLに変換したいのですが、
ググるといろいろ出てくるのですが、
一番お勧めの方法は何でしょうか?
0970デフォルトの名無しさん2014/07/31(木) 16:00:09.40ID:/YLgyhx6
馬鹿には無理
0971デフォルトの名無しさん2014/07/31(木) 16:07:24.34ID:yKtyQ3zg
bool b = true;
BOOL B = b;
0972デフォルトの名無しさん2014/07/31(木) 16:18:39.98ID:bpHeI3uW
>>971ありがとうございます。
間違えていました。聞きたかったのはBOOLからboolの変換でした。
b=B;
とすると警告レベルW4で
warning C4800: 'BOOL' : ブール値を 'true' または 'false' に強制的に設定します (警告の処理)
が出るんです。
0973デフォルトの名無しさん2014/07/31(木) 16:23:55.90ID:2lELiYdj
bool b;
BOOL B;

...
b = !!B;
0974デフォルトの名無しさん2014/07/31(木) 16:24:12.74ID:zqI59uuY
キャストすりゃいいじゃん
0975デフォルトの名無しさん2014/07/31(木) 16:28:40.28ID:j4TPbz8e
BOOLにはTRUEでもFALSEでもない値が入っている場合があるけど、その場合はどうしたいのよ?
0976デフォルトの名無しさん2014/07/31(木) 16:33:12.41ID:bpHeI3uW
>>974
そのキャストをすると警告が出るんです。
前提としてはBOOLにはTRUEかFALSEのどちらかが必ず入っているとして
警告出さない方法ありますか?
0977デフォルトの名無しさん2014/07/31(木) 16:45:28.83ID:v4Z6YiZZ
>>976
あらほんとだ申し訳ない

http://msdn.microsoft.com/ja-jp/library/b6801kcy.aspx
答えそのまま書いてあるね
0978デフォルトの名無しさん2014/07/31(木) 16:47:23.28ID:FYG1BBi8
>973も見えないなら諦めた方がいいよ。
09799732014/07/31(木) 17:08:13.79ID:2lELiYdj
比較演算の結果は bool 型

TRUE と等しいか では TRUE/FALSE 以外の値の場合に false となるので
FALSEではないのか で判定し bool 化するとよさげ

B !=FALSE とか B !=0 とか !!B とか 記述の仕方は好きにして
0980デフォルトの名無しさん2014/07/31(木) 17:38:21.95ID:bpHeI3uW
>>973,979
有難うございます。
>TRUE と等しいか では TRUE/FALSE 以外の値の場合に false となるので
ということは、BOOL B にはTRUE/FALSEしか入れないとして、もしこれ以外の値なら
FALSEにしたい場合はTRUEと比較する
bool b = (B==TRUE);
で良いでしょうか?
0981デフォルトの名無しさん2014/07/31(木) 17:43:00.82ID:v4Z6YiZZ
Windowsでしょ?
デバッガ使ってイミディエイトウィンドウで確認したら?
0982デフォルトの名無しさん2014/07/31(木) 17:47:17.38ID:2lELiYdj
意図してやりたいのならそれでよい

BOOL で成功時に非0を返す と 成功時にTRUEを返す では雲泥の差なので、要注意だがね
※ Win32API のほとんどは 前者だったような???
0983デフォルトの名無しさん2014/07/31(木) 17:56:49.76ID:2lELiYdj
GetMessage() の戻りのように BOOL としてるが罠だ
実質 INT としてつかってるぜ というのもある
0984デフォルトの名無しさん2014/07/31(木) 18:07:32.61ID:GqatOQBv
>>980
>>980
>>980
>>980
>>980
>>980
>>980
>>980
>>980
>>980
>>980
>>980
>>980
>>980
>>980
>>980
>>980
>>980
>>980
>>980
>>980
>>980
>>980
0985デフォルトの名無しさん2014/07/31(木) 18:48:53.71ID:17Xd3Yqq
>>980
ダメ
b = B != FALSE;
0986デフォルトの名無しさん2014/07/31(木) 19:03:00.14ID:kECANlkh
> BOOL B にはTRUE/FALSEしか入れないとして、もしこれ以外の値ならFALSEにしたい
という仕様は無視か
0987デフォルトの名無しさん2014/07/31(木) 19:04:30.84ID:CiBvTkDB
うめ
0988デフォルトの名無しさん2014/07/31(木) 19:12:18.68ID:17Xd3Yqq
windowsでと言うことなので、それは仕様を読み間違えてる
0989デフォルトの名無しさん2014/07/31(木) 19:15:56.30ID:17Xd3Yqq
次 http://peace.2ch.net/test/read.cgi/tech/1406801653/
0990デフォルトの名無しさん2014/07/31(木) 19:19:31.75ID:lno8ouMQ
BOOL B にはTRUE/FALSEしか入れないとして、
もしこれ以外の値ならFALSEにしたいという仕様

を window 用で適用させるのは仕様としてそぐわないからやめておけ という主張が >>985

※ Windows は BOOL に TRUE と FALSE をつめてくるわけではなく
※ FALSE と それ以外をつめてくる というのが大半であるからだ
0991デフォルトの名無しさん2014/07/31(木) 19:32:52.47ID:CsC+7eo5
(B == FALSE ? false : true)
0992デフォルトの名無しさん2014/07/31(木) 19:36:04.26ID:GXINcJqA
COBOOL
0993デフォルトの名無しさん2014/07/31(木) 19:56:17.67ID:bPbJw8eT
警告レベルを下げて万事解決
0994デフォルトの名無しさん2014/07/31(木) 21:33:05.90ID:VIa3A75O
>>980
それでよい。
だがその発想は常軌を逸しているのでやめたほうがいい
0995デフォルトの名無しさん2014/08/01(金) 02:30:55.61ID:D0aaPCQP
うめ
0996デフォルトの名無しさん2014/08/01(金) 07:14:05.85ID:Otaa7YsK
TRUEと比較しちゃいけないのを知らない奴大杉
0997デフォルトの名無しさん2014/08/01(金) 09:45:23.26ID:VcCQb1qo
釣りと判っててスルーしてるか
逆に釣るために反応してるだけだろ
0998デフォルトの名無しさん2014/08/01(金) 10:17:41.56ID:CS2hb/Ws
.
0999デフォルトの名無しさん2014/08/01(金) 10:18:18.72ID:CS2hb/Ws
.
1000小倉優子 ◆YUKOH0W58Q 2014/08/01(金) 10:18:47.74ID:CS2hb/Ws
  ∧,,,∧ 
 (  ・∀・) 1000ならジュースでも飲むか
  (    ) 
  し─J 
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。