[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 2chのread.cgiへ]
Update time : 04/16 18:53 / Filesize : 155 KB / Number-of Response : 599
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

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



1 名前:デフォルトの名無しさん mailto:sage [2011/12/12(月) 21:21:26.11 ]
エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。
※sage禁止です(と代々スレに書いてありますが自己判断で)。

【前スレ】
【初心者歓迎】C/C++室 Ver.76【環境依存OK
hibari.2ch.net/test/read.cgi/tech/1312621728/

◆ソースのインデントについて
半角空白やTABでのインデントはスレに貼ると無くなります。
そのため、アップローダーに上げるのも手ですが直接貼る場合は、
全角空白か に置換すると見栄えだけはよくなります。

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

2 名前:デフォルトの名無しさん [2011/12/12(月) 22:01:55.18 ]
>>999
型キャストがビットシフトの前に行われるのって
言語仕様でしたかね?

3 名前:デフォルトの名無しさん mailto:sage [2011/12/12(月) 22:22:29.78 ]
JISX3010によると、
6.5.7 ビット単位のシフト演算子 意味規則 整数拡張を各オペランドに適用する。

らしいです。

4 名前:デフォルトの名無しさん mailto:sage [2011/12/12(月) 22:26:00.04 ]
>>2
算術演算子の優先順位
ttp://www.bohyoh.com/CandCPP/C/operator.html

キャスト演算子の方がシフト演算子より優先順位高いですね。

5 名前:デフォルトの名無しさん mailto:sage [2011/12/12(月) 22:51:51.26 ]
>>2,4 優先順位とか関係なくね?

6 名前:デフォルトの名無しさん mailto:sage [2011/12/12(月) 23:05:20.87 ]
>>4
「暗黙の」型変換というところに引っ掛かりを覚えるのだが・・・


さらに言えば、ビットシフトとブール演算が右辺で複合的に行われた場合、それらのビットシフトやブール演算より先に
左辺の型を見て右辺の数をのこらず自動型変換って、期待していいものなのか?当てにしているとあぶなくないか?

7 名前:デフォルトの名無しさん mailto:sage [2011/12/12(月) 23:22:54.97 ]
>>5
型変換が行われないと、桁あふれで右辺は0になる

8 名前:デフォルトの名無しさん mailto:sage [2011/12/12(月) 23:23:55.25 ]
汎整数拡張
ttp://ja.wikipedia.org/wiki/%E6%B1%8E%E6%95%B4%E6%95%B0%E6%8B%A1%E5%BC%B5

9 名前:デフォルトの名無しさん mailto:sage [2011/12/12(月) 23:24:38.10 ]
ん?>>3に書いてあるとおりじゃないか^^

c<<16の段階で、両辺が整数型にキャストされてる。
左辺 i が整数であるかどうかはまったく関係ない。
double d = c << 16;
のごとく書いても、cは整数型にキャストされるし
char s = c << 16;
のごとく書いても、cは整数型にキャストされる。
(そして結果はchar型にキャストされて面白い事になる)。

10 名前:デフォルトの名無しさん mailto:sage [2011/12/12(月) 23:31:55.62 ]
>>7 整数拡張は演算子じゃないから、優先順位とか関係ないぜ。



11 名前:デフォルトの名無しさん mailto:sage [2011/12/12(月) 23:38:03.81 ]
左辺をuint64_tにして右辺で4バイト超えるとこまでシフトしても、うまいことキャストするみたいなんだが・・・環境依存?
(単に整数型にするだけなら桁あふれでゼロ)

12 名前:デフォルトの名無しさん mailto:sage [2011/12/12(月) 23:40:00.07 ]
>>9
intはint型と書いてくれよ。char型だって整数型なんだから。

13 名前:デフォルトの名無しさん mailto:sage [2011/12/12(月) 23:51:16.42 ]
>>6-10
すんません。偉そうに教える程の知識は無いんですが、、、
「暗黙」だろうが「明示」だろうが、優先順位は変わらないと思います。
そして、式内では「精度の高い型」に変換されるので

i = c<<16;
は、うちは64bitOS(linux)
(1)16はint型とみなされる。
(2)c<<16 で右辺の16はint型なので、cは暗黙的にint型にキャストされる。
(3)i = c<<16 で左辺の(unsigned int)にキャストされる。
ってな感じだと思っていたのです。

・・・って、みなさんの言う、整数拡張ってwikiって見たら、
確かに演算子ではないですね。ということは、無条件に行われるから
優先順位が一番高いとも言えるのかな。

すっかり、ミイラ取りがミイラになっています。

とりあえず、多分、前スレ>>999さんは
unsigned char c;
unsigned int i;

c = 0xff;
i = (unsigned char)(c<<(unsigned char)(16));

printf("c: %x\n", (unsigned int)c);
printf("i: %x\n", i);
を期待されていたのでしょう。

14 名前:デフォルトの名無しさん mailto:sage [2011/12/12(月) 23:53:16.02 ]
あ、アンカ間違えた
× 前スレ >>999
○ 前スレ >>997

15 名前:デフォルトの名無しさん mailto:sage [2011/12/12(月) 23:56:03.66 ]
img.pics.livedoor.com/012/d/6/d6f87fce733d70932354-1024.png
mamorenihon.files.wordpress.com/2011/09/kao-demo1.jpg
blog-imgs-34.fc2.com/d/e/l/deliciousicecoffee/201108040637592d3.jpg
tantawan.blog.so-net.ne.jp/_images/blog/_13f/tantawan/E88AB1E78E8BE4B88DE8B2B7-18690.jpg
stat.ameba.jp/user_images/20110820/18/lisa-w-paz/07/00/j/o0500032111430159404.jpg
livedoor.blogimg.jp/news30over/imgs/c/3/c3860b80.jpg



16 名前:デフォルトの名無しさん mailto:sage [2011/12/13(火) 00:22:04.65 ]
www.bohyoh.com/CandCPP/C/operator.html

今まで何の疑問も持たずに見過ごしてきたけど、順位が間違ってるね。
配列の添字[]は関数呼び出し()より順位が高いですよ・・・

17 名前:デフォルトの名無しさん mailto:sage [2011/12/13(火) 00:24:10.32 ]
>>16
どんな式でその二つの優先順位の違いが問題になるの?

18 名前:デフォルトの名無しさん mailto:sage [2011/12/13(火) 02:37:54.17 ]
C/C++の宿題片付けます 154代目
ttp://hibari.2ch.net/test/read.cgi/tech/1322562648/

のスレを見て、他人のプログラムを見て色々と勉強させてもらっているのですが、
そのスレの、>>258 が質問し、>>259 が解答したプログラム(元コード ttp://ideone.com/BRXCl)があるのですが、
そのプログラム中にある、

char *roman_nums[] = {"XI", "XII", "XIV", "XVIII", "XXIV", "XLIII", "XCIX", "CDXCV", "MDCCCLXXXVIII", "MCMXLV", "MMMCMXCIX"};

for (i = 0; i < sizeof(roman_nums)/sizeof(*roman_nums); i++) {

という文の、sizeof(roman_nums) / sizeof(*roman_nums) ところが分かりませんでした。

前(分子)のsizeofと後ろ(分母)のsizeofが何なのかがわかりません。割るとどういうことになるのでしょうか。

前の方は、roman_numsは配列なので&roman_nums[0]ってことでしょうか??

自分の理解が大分足りてないようで、どなたか解説をお願いできませんか。よろしくお願いします。

19 名前:デフォルトの名無しさん mailto:sage [2011/12/13(火) 02:41:37.26 ]
配列の数がわかる
いちいち割らなくても_countofという便利なものもあるけど

20 名前:デフォルトの名無しさん mailto:sage [2011/12/13(火) 02:56:20.91 ]
>>19
ほんとですね。
今自分で試したのですが確かに配列の数がピッタリでますね。

どうしてこうなるのでしょうか・・・



21 名前:デフォルトの名無しさん mailto:sage [2011/12/13(火) 02:58:20.66 ]
sizeof(roman_nums)で配列全体の大きさがわかって
sizeof(*roman_nums)で配列1個の大きさがわかるから
*roman_numsが難しかったらroman_nums[0]と読み替えてもいい

22 名前:デフォルトの名無しさん mailto:sage [2011/12/13(火) 03:03:42.52 ]
>>21
>*roman_numsが難しかったらroman_nums[0]と読み替えてもいい
ああ!そういえばそうですよね。すっかり忘れてました。

お陰ですっきりしました!!
ほんとありがとうございます!



23 名前:デフォルトの名無しさん [2011/12/13(火) 06:54:21.79 ]
Win7 64+GCC(on MinGW)で・・・・

これはゼロになる
unsigned char c;
uint64_t i;

c = 0xff;
i = c<<63;
-----------------------------------------
これならMSBにビットが残る
unsigned char c;
uint64_t i;

c = 0xff;
i = (uint64_t)c<<63;
-----------------------------------------


暗黙の型変換でやってくれるのは、int(機種依存の?)まで?




それはそうと、
:-] ←ドヤ顔

24 名前:デフォルトの名無しさん mailto:sage [2011/12/13(火) 08:02:56.86 ]
>>23
そそ、暗黙の型変換は左辺に何があるかは知らない。

25 名前:デフォルトの名無しさん mailto:sage [2011/12/13(火) 10:57:50.76 ]
>>23
整数拡張だったら大きい方で計算されるんじゃね?
unsigned charとintならint、uint64_tとintならuint64_t

26 名前:デフォルトの名無しさん mailto:sage [2011/12/13(火) 11:41:24.46 ]
>>16
こっちの方が良かったかな?
ttp://www.cppreference.com/wiki/jp/operator_precedence
でも、添字[]と関数呼び出し()の優先順は同じはずですよ。あとは、結合の順番だけのはず。たしか・・・・。


>>17
たぶん、関数ポインタあたりを使うと書ける(問題になる)んじゃない?書いたこと無いけど。

27 名前:デフォルトの名無しさん mailto:sage [2011/12/13(火) 13:16:20.65 ]
for文を使う、配列を使わないやり方でお願いします。

10個の数値を入力
入力された各々の数値を二倍して表示するプログラム。


28 名前:デフォルトの名無しさん [2011/12/13(火) 13:24:43.76 ]
>>27
for(i=0;i<10;i++){scanf("%d",&n);printf("%d ",2*n);}

29 名前:デフォルトの名無しさん mailto:sage [2011/12/13(火) 15:02:10.31 ]
表示は入力の度ではなくまとめてでお願いします。

30 名前:デフォルトの名無しさん mailto:sage [2011/12/13(火) 15:24:10.41 ]
条件小出しにしないで、宿題スレ行ったら?



31 名前:デフォルトの名無しさん mailto:sage [2011/12/13(火) 17:03:53.64 ]
むりじゃね?w
ってか釣りか

32 名前:デフォルトの名無しさん mailto:sage [2011/12/13(火) 17:19:14.88 ]
int x2(int i){int n;for(;i;)printf("%d\n",x2(--i));scanf("%d",&n);return 2*n;}

x2(10);

33 名前:デフォルトの名無しさん mailto:sage [2011/12/13(火) 18:12:03.06 ]
>>27
#include<stdio.h>
#include<stdlib.h>
int main(){
int i, n;
char s[1000] = "", *p = s;
for (i = 0; i < 10; i++) {
printf("%d. ", i + 1);
scanf("%d", &n);
sprintf(p, "%d ", 2 * n);
while (*p)p++;
}
printf("%s", s);
return 0;
}


34 名前:デフォルトの名無しさん mailto:sage [2011/12/14(水) 11:27:42.91 ]
以下のような_allocaをラップした関数を作りたいのですが
Debugでは意図通りに出力されません。

template<typename T> T *aloca(size_t t){
return (T*)_alloca(sizeof(T) * t);
}

int _tmain(int argc, _TCHAR* argv[]){
int *a = aloca<int>(1); *a = 1;
int *b = aloca<int>(1); *b = 2;
int *c = aloca<int>(1); *c = 3;
printf_s("*a = %d\t", *a);
printf_s("*b = %d\t", *b);
printf_s("*c = %d\t", *c);
return 0;
}

Debug出力
*a = 3  *b = 1  *c = 1

Release出力
*a = 1  *b = 2  *c = 3

やはりalocaを抜けた時点で_allocaが確保したメモリは解放されてしまうのでしょうか?
だとするとReleaseで動いているように見える理由は?
どうすればDebugでも動くようにできるでしょうか?

35 名前:デフォルトの名無しさん mailto:sage [2011/12/14(水) 11:47:19.34 ]
>>34
msdn.microsoft.com/ja-jp/library/wb1s57t5%28v=vs.80%29.aspx
_alloca は、プログラム スタックから size バイトを割り当てます。
割り当てられた領域は、単に割り当てがスコープ外になる場合ではなく、
呼び出し関数が終了する場合に、自動的に解放されます。
このため、_alloca から返されたポインタ値を引数として free に渡さないでください。

36 名前:デフォルトの名無しさん mailto:sage [2011/12/14(水) 13:35:47.86 ]
_alloca()は実装にも拠るけど関数じゃないからね。

37 名前:片山博文MZ ◆0lBZNi.Q7evd [2011/12/14(水) 14:08:39.47 ]
#define MYALLOCA(type, count) ((type *)_alloca(count * sizeof(type)))

38 名前:片山博文MZ ◆0lBZNi.Q7evd mailto:sage [2011/12/14(水) 16:09:24.02 ]
おっと、カッコで囲まなきゃ。
#define MYALLOCA(type, count) ((type *)_alloca((count) * sizeof(type)))

39 名前:デフォルトの名無しさん mailto:sage [2011/12/14(水) 17:08:08.53 ]
なるほどマクロならいけそうですね。
名前空間に入れられないのがつらいけど
それでいこうと思います。

ありがとうございました。

40 名前:デフォルトの名無しさん mailto:sage [2011/12/14(水) 19:56:37.04 ]
マクロを使うとお先真っ黒ってね



41 名前:デフォルトの名無しさん mailto:sage [2011/12/14(水) 20:43:11.65 ]
>>40
まっ、苦労するのは確かだな。

42 名前:デフォルトの名無しさん [2011/12/14(水) 20:50:01.99 ]
在日の戦略にひっかかり、全ての間違いが始まった2009年 夏
        |:::::::::::::;;;ノ  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
        |::::::::::( 」 < 民主になればこの世はバラ色、政権交代!
        ノノノ ヽ_l   \______________
       ,,-┴―┴- 、    ∩_
     /,|┌-[]─┐| \  (  ノ
      / ヽ| | 在 反 | '、/\ / /     
     / `./| | 日 日  |  |\   /
     \ ヽ| lゝ    |  |  \__/
     \ |  ̄ ̄ ̄   |
      |   ┬    |それでも懲りない日本人、韓国民団総理支持率35%w早く目を醒まそう!


43 名前:デフォルトの名無しさん [2011/12/14(水) 21:50:18.48 ]
visualstudio2008で開発を行っているのですが、デバッグでは発生せずリリースでのみ発生する不具合があって困っています。
プログラムとしては別スレッドで受信したデータをファイルに記録とウィンドウに表示するものなのですが、20分ほどするとJITのウィンドウが開いてプログラムがフリーズしてしまいます。
その際にVSを立ち上げて落ちた箇所を調べるとfwriteの実行で落ちているようで、書き込むデータのサイズが定数を使用しているにも関わらずfwriteの内部で値が全く違う大きな値になっていました。
このような現象の原因についてご存じもしくは思い当たるふしがあれば教えていただけないでしょうか?
よろしくお願いします。


44 名前:デフォルトの名無しさん mailto:sage [2011/12/14(水) 22:03:51.91 ]
volatile修飾子に関係があるかもしれない

何故そう思ったかというと、つい数日前俺が勉強したばかりだからだ

45 名前:デフォルトの名無しさん mailto:sage [2011/12/14(水) 22:10:24.40 ]
>>44
C/C++のvolatilはjavaやC#とちがってメモリバリアもアトミックも
保証されていないぞ

46 名前:デフォルトの名無しさん [2011/12/14(水) 22:27:41.84 ]
C++で、クラスポインタを0で初期化するようなプログラムを頻繁に見るんですか、いいんですか?
間違って、初期値のままポインタの参照先の値を書き替えてしまうと、かなり危険なきがするんですが。

47 名前:デフォルトの名無しさん mailto:sage [2011/12/14(水) 22:32:29.62 ]
>>46
間違って書き換える方が悪い、という考えで作られているのがC++。

48 名前:デフォルトの名無しさん mailto:sage [2011/12/14(水) 22:44:51.81 ]
class A{...};
A * p = NULL;
*p = hogehoge;

みたいなことを言ってるの?
余裕で落ちるから大丈夫

49 名前:デフォルトの名無しさん mailto:sage [2011/12/14(水) 22:45:52.23 ]
C++で

class CHoge;
CHoge* p_test = NULL;
p_test = new CHoge();

↑の処理は、
一番上はクラスの宣言、
二番目はCHogeを入れるためのp_testという名前の箱を用意してやる、
一番下はコンストラクタを呼び出して、実態を与えてやる
といった処理でしょうか?

50 名前:デフォルトの名無しさん mailto:sage [2011/12/14(水) 23:18:04.55 ]
宣言しただけじゃnewできんぞ



51 名前:デフォルトの名無しさん mailto:sage [2011/12/14(水) 23:28:57.40 ]
>>46
よく気がついたな
かなりヤバイコードだから絶対に真似しちゃイカンぞ

52 名前:デフォルトの名無しさん mailto:sage [2011/12/14(水) 23:29:11.50 ]
CHoge* p_test = NULL;
/*スタック領域にクラスのポインター型変数を確保*/

p_test = new CHoge();
/*ヒープ領域にクラスに必要なメモリを確保した後、
 そのクラスのコンストラクタを呼び出し、
 そのポインタをp_testに代入*/

53 名前:デフォルトの名無しさん mailto:sage [2011/12/14(水) 23:32:32.42 ]
RAIIのひろーい原則に従えば、ポインタにNULLを突っ込む余地はないはずなんだけどね
確保の直後に初期化されなければならないし、破棄は(コード的に)確保と隣接した場所で行われるから
要するに無効なまま運ばれる区間は限りなく短くなってるはずなので

54 名前:デフォルトの名無しさん mailto:sage [2011/12/15(木) 00:40:15.58 ]
なに得意そうにswitchさんデスっての?

55 名前:デフォルトの名無しさん mailto:sage [2011/12/15(木) 09:43:31.74 ]
前スレ>>782
>namespace manko {
> extern "C" {
>  #include <Windows.h>
を見て、へーこんなことできるんだと思って試してみた。

namespace Impl{
struct impl_struct{ char c[8]; };
extern "C" void externCtest(impl_struct *a){
for(int t = 0; t < 8; ++t) printf_s("%d ", a->c[t]);
printf_s("\n");
}
}
namespace Decl{
struct decl_struct{ int a, b; };
extern "C" int externCtest(decl_struct *a);
}
void externCtest(){
Decl::decl_struct a = { 1, 2 };
printf_s("externCtest ret = %d\n", Decl::externCtest(&a));
printf_s("&Decl::externCtest = %x\n", (int (*)(Decl::decl_struct*))Decl::externCtest);
printf_s("&Impl::externCtest = %x\n", (void (*)(Impl::impl_struct*))Impl::externCtest);
}

extern "C"をつければ、どのnamespaceで定義しても
どのnamespaceで宣言しても、引数や戻り値がでたらめでも
名前と引数のサイズとかが合ってれば動くみたいなんだけど
これってちゃんと仕様に沿ってるの?

56 名前:デフォルトの名無しさん mailto:sage [2011/12/15(木) 10:16:23.06 ]
呼ばれる関数は同じだがオーバーロード(?)すらできた。

using Impl::externCtest;
using Decl::externCtest;
Impl::impl_struct a = { 3, 4, 5, 6, 7, 8, 9, 10 };
Decl::decl_struct b = { 1, 2 };
externCtest(&a);
auto bret = externCtest(&b);

57 名前:デフォルトの名無しさん mailto:sage [2011/12/15(木) 23:24:31.68 ]
>>52
ありがとうございmす

58 名前:デフォルトの名無しさん [2011/12/16(金) 13:43:12.04 ]
DLL内の関数名の前につく
__imp__

__imp_
の違いってなに?

59 名前:デフォルトの名無しさん mailto:sage [2011/12/16(金) 17:45:05.81 ]
気分

60 名前:デフォルトの名無しさん mailto:sage [2011/12/16(金) 19:33:04.17 ]
エスパーすると区切る場所が違う

__imp___func -> __imp__ + _func
__imp__func -> __imp_ + _func
ではなく
__imp___func -> __imp__ + _func
__imp__func -> __imp__ + func

_func と func の違いは呼出規約(stdcallかcdeclか)の違い





61 名前:デフォルトの名無しさん mailto:sage [2011/12/17(土) 01:05:33.53 ]
インプ君思い出した

62 名前:デフォルトの名無しさん mailto:sage [2011/12/17(土) 02:47:27.11 ]
class Hoge
{
 [型] hoge(bool var);
}
↑のような関数があるとき、
Hoge hoge;
bool foo = true; // どちらでもいいので初期化
hoge.hoge(foo); // (1). bool型の変数指定
hoge.hoge(true); // (2). trueの定数指定
hoge.hoge(false); // (3). falseの定数指定
と出来ますが、
(3)以外のパターンでコンパイルエラーにしたいのですが、可能でしょうか?
falseしか指定できないenumを作るしかありませんか?

63 名前:デフォルトの名無しさん mailto:sage [2011/12/17(土) 03:04:53.79 ]
そもそも引数なんか必要ないんじゃないか?

ちなみにC++0xなら、右辺値参照を使えば(1)をコンパイルエラーにできる。
hoge(bool &&var);

64 名前:デフォルトの名無しさん mailto:sage [2011/12/17(土) 03:21:42.82 ]
プロトタイプ宣言の関数の引数に書かれる「rhs」は何の略です?

65 名前:デフォルトの名無しさん mailto:sage [2011/12/17(土) 03:33:14.60 ]
>そもそも引数なんか必要ないんじゃないか?
申し訳ありません。
この例を見ると確かにそのとおりです。言われて気がつきました。
簡単に示そうとして、情報が欠落してしまいました。
Hogeのコンストラクタとして3つ、
 Hoge hoge;
 Hoge hoge(false);
 Hoge hoge = false;
 hoge.無効化メソッド(false);
のを許して、以下を許さない
 Hoge hoge(true);
 Hoge hoge = true;
 Hoge hoge(bool foo = false); 
ものを考えていました。
boost::optionalのintだけのようなものをライブラリなしでつかいたいな、と。
class Hoge{public: bool 有効化フラグ_; int hoge_};を使って。
おとなしくenumします。
右辺値参照初めて知りました。少し勉強します。

66 名前:デフォルトの名無しさん mailto:sage [2011/12/17(土) 03:34:10.36 ]
×hoge.無効化メソッド(false);
○hoge.無効化メソッド();

67 名前:デフォルトの名無しさん mailto:sage [2011/12/17(土) 04:09:31.81 ]
>>64
lhs < Left Hand Side (左辺)
rhs < Right Hand Side (右辺)

68 名前:デフォルトの名無しさん mailto:sage [2011/12/17(土) 09:39:11.49 ]
>>62
template<bool p> struct c_bool
{
static bool const value = p;
};

struct Hoge
{
void hoge(c_bool<false> const & p);
};

Hoge h;
bool p;
h.hoge(p); // error
h.hoge(c_bool<true>()); // error
h.hoge(c_bool<false>()); // ok

69 名前:デフォルトの名無しさん mailto:sage [2011/12/17(土) 16:51:49.67 ]
C++でコルーチンはどうやれば書けるの?

70 名前:デフォルトの名無しさん mailto:sage [2011/12/17(土) 17:01:17.89 ]
std::stringで数値を文字にする時に
int 123 →"00123"
int 1234→"01234"
みたいに0で桁数を揃えるフォーマットにするにはどうしたらいいですか?



71 名前:デフォルトの名無しさん mailto:sage [2011/12/17(土) 17:07:36.10 ]
>>70
#include <sstream>
#include <iomanip>
std::string to_str(int x, int d)
{
std::ostringstream oss;
oss << std::setw(d) << std::setfill('0') << x;
return oss.str();
}


72 名前:デフォルトの名無しさん mailto:sage [2011/12/17(土) 17:21:09.91 ]
>>71
ありがとうございます!

73 名前:デフォルトの名無しさん mailto:sage [2011/12/17(土) 17:26:44.94 ]
string str = "123";
std::cout << (boost::format("%05d") % str).c_str();
だったかな。(うろ覚え)

std::cout << boost::str(boost::format("%05d") % str);
とか。(うろ憶え)

74 名前:デフォルトの名無しさん mailto:sage [2011/12/17(土) 17:29:49.92 ]
>>73
%dとstd::stringは、激しくマズイ気がするが気のせいだったらすまない。

75 名前:デフォルトの名無しさん mailto:sage [2011/12/17(土) 17:41:39.80 ]
>>70
>みたいに0で桁数を揃えるフォーマットにするにはどうしたらいいですか?

絶対ないというならいいけど、int 123456 の時に "23456" か "123456" の
どっちになって欲しいか書いたほうがいいと思う。

76 名前:デフォルトの名無しさん mailto:sage [2011/12/17(土) 18:32:08.83 ]
class A
{
 enum B {aaa, bbb, ccc}
}
int main(){
 A::B b = A::aaa; // ※1
return 1;
}
「※1」の右辺に、凄い違和感があって、
「A::B.aaa」か「A::B::aaa」ってなるのが妥当に思えるのですけど、
何でcの仕様がこうなっていて、
何に私が悩んでいるのか解決できるようなエスパーがいたら、
助言をして欲しいです。よろしくお願いします。

77 名前:デフォルトの名無しさん mailto:sage [2011/12/17(土) 18:32:59.19 ]
禿がenum嫌いだから

78 名前:デフォルトの名無しさん mailto:sage [2011/12/17(土) 18:36:48.96 ]
64です。
>>67
ありがとうございます。スッキリ出来ました。

79 名前:デフォルトの名無しさん mailto:sage [2011/12/17(土) 18:46:53.65 ]
>>76
俺も初めは違和感だったな
それにC#ではA.B.aaaとなるし

考え方だがCでは整数に名前が付いてるだけ、
くらいの認識と考えれば、その言語仕様も少し納得しやすいかもしれない


80 名前:デフォルトの名無しさん mailto:sage [2011/12/17(土) 18:56:04.21 ]
Aのなかにデロ〜ンとaaa bbb cccが漏れてるからそうなるわけで



81 名前:デフォルトの名無しさん mailto:sage [2011/12/17(土) 19:02:47.35 ]
C++11でenum classが導入されてちゃんとクラススコープに入ったenumがつけるようになるんだったけか。

82 名前:デフォルトの名無しさん mailto:sage [2011/12/17(土) 19:20:08.60 ]
namespace ENUM{int aaa(){return 0;}int bbb(){return 1;}int ccc(){return 2;}}
typedef int(*ENUM)(); // これで全て解決だ!

83 名前:76 mailto:sage [2011/12/17(土) 19:22:39.05 ]
>Aのなかにデロ〜ンとaaa bbb cccが漏れてるからそうなるわけで
つまり、enum自体はc++的なものではなくてc的なものなので、グローバルに展開されてしまうってことですね。
ただし、c++なので、クラス内や名前空間内に限定することは可能になっている、と。

納得できました。
ありがとうございます、>>79,>>80,>>81


84 名前:76 mailto:sage [2011/12/17(土) 19:23:29.46 ]
>>83 もありがとうございます。

85 名前:76 mailto:sage [2011/12/17(土) 19:24:10.67 ]
×>>83
>>82
スレ汚し失礼しました。

86 名前:デフォルトの名無しさん mailto:sage [2011/12/17(土) 21:32:25.42 ]
質問
C++で、GLSLのnoise関数のような関数はありますか?
つまり、ある値を入に対し、決まった、予想の付かない値を返す関数なのですが

87 名前:デフォルトの名無しさん mailto:sage [2011/12/17(土) 22:33:45.66 ]
コピーコンストラクタ・operator=に関して一件教えてください。

コピーコンストラクタを用意する際には、
operator=も用意するように、
と教えていただいたので、そのようにしてました。あるとき、
そのoperator=の最後に記述する「return *this;」を忘れていました。
ところが、特に問題が出ていませんでした。
これは記述する必要がないのでしょうか?

88 名前: ◆QZaw55cn4c mailto:sage [2011/12/17(土) 22:36:15.47 ]
>>86
適当なhash関数はいかが?MD5/SHA-1/2(256) とか。

89 名前:デフォルトの名無しさん mailto:sage [2011/12/17(土) 22:47:36.22 ]
>>88
ありがとうございます
検索してみるとwww.studyinghttp.net/md5このページを見つけました
しばらく見て参りますが、他に良い解説サイトなどありましたらご紹介くださいませ

90 名前:デフォルトの名無しさん mailto:sage [2011/12/17(土) 23:13:57.89 ]
>>87
下に示すような記述をする為には、自身を返す必要があるから。
従って、代入した結果を必要としないのなら問題にならない。
--
YourClass foo, bar, baz;
foo = bar = baz;



91 名前:65 mailto:sage [2011/12/17(土) 23:25:10.40 ]
「codepad」でエラーになる理由を教えていただけませんか?
codepad.org/VybcCvXY
ideone.com/WA7TG

92 名前:65=91 mailto:sage [2011/12/17(土) 23:34:02.42 ]
ideone.com/WA7TG
ttp://www.geocities.jp/ky_webid/cpp/library/027.html

関数のプロトタイプ宣言で、throw(ココ)に書く内容でどのような変化があるのか調べています。
↑のページの「std::bad_exception」の説明に関して試しています。
178行目の「i2 = hoge5;」において、54行目の関数が呼ばれています。
このとき、
プロトタイプ宣言で、54,55,56のパターンや、
throwする例外オブジェクトで、60,61,62の内容を試すのですが、
「std::bad_exception」がthrowされません。
どこを修正すると説明の通り、「std::bad_exception」がthrowされるか教えていただけませんか?

よろしくお願いします。

93 名前:65=91 mailto:sage [2011/12/17(土) 23:49:52.60 ]
あと、
 「eclipseのc++」や「ideone.com」で試した際と、
 「Visual c++」で試した際と、
の間に挙動の違いがあって、205行目が、
 前者で実行されない
 後者で実行される
のですが、何故なのでしょうか?
 gccでは、宣言以外の例外発生の後に即terminate();
 visual c++では、プロトタイプ宣言のthrow()を無視している
のでしょうか?

ideone.com/qqqhp ※60行目、178行目、205行目

94 名前:65=91 mailto:sage [2011/12/17(土) 23:57:49.65 ]
最後に、(いろいろ問題出そうですが、)
158行目の
「hoge5」
とした場合に、問答無用で、
 「(int)hoge5」
 「int(hoge5)」
とした場合と同じにすることは可能でしょうか?
可能であれば教えてください。
(型の指定がない場合は、int(T)としたい。が、代入先がboolの場合はbool。「.」や「->」など他のoperatorも残したい。)

95 名前:デフォルトの名無しさん mailto:sage [2011/12/18(日) 00:02:42.24 ]
>>60
ありがとう

96 名前:デフォルトの名無しさん mailto:sage [2011/12/18(日) 01:41:15.51 ]
>>91
エラーの理由をみるにcodepadでは(その警告を出すなら)警告もエラー扱いする設定になってる。
そしてそのソースに対してはクラス定義でのメンバの宣言順とコンストラクタでのメンバ初期化子の順序が違うと警告がでてるからエラーになる。

97 名前:91 mailto:sage [2011/12/18(日) 02:53:35.67 ]
>>96
なるほど。理解できました。ありがとうございます。

エラーの内容が続くwarningで示されていたとは。
独立しているのだと勘違いして、warningは無視していました。

codepad.org/lTFa56Ar
動きました。

98 名前:87 mailto:sage [2011/12/18(日) 02:57:54.25 ]
>>90
>foo = bar = baz;
{
 bar = baz;
 foo = bar;
}
これと等価だと思っていました。わかりやすい説明ありがとうございます。

99 名前:デフォルトの名無しさん mailto:sage [2011/12/18(日) 03:16:04.70 ]
何度も失礼します。

codepad.org/OuxHRqHa
で、41行目にエラーがあり、その内容は、
「定義されていない変数(名)へのアクセスがある」
といったものなのですが、
Visual c++ 2010 Expressで試すと、素通りされてしまいました。

利用していないメソッドの場合も確認してくれるようにするには、どのような設定をすればよいのでしょうか?
Visual c++のスレは一週間くらい人大杉で書き込めませんでした。

100 名前:デフォルトの名無しさん mailto:sage [2011/12/18(日) 03:38:14.38 ]
>>99
そりゃ hoge_ が定義メンバにも無いし
継承もしてないからじゃないの?



101 名前:デフォルトの名無しさん mailto:sage [2011/12/18(日) 03:54:06.53 ]
もしかして、メモリリークって、Windowsだと、そのプロセスが終了すれば開放される?


102 名前:デフォルトの名無しさん mailto:sage [2011/12/18(日) 04:59:59.92 ]
Visual C++ でコンソールアプリケーションでプロジェクトを作成して、
コンソールの他に、
独立した子ウィンドウをつくって、そこでなにやら処理したいのですけど、
インスタンスハンドルやらウィンドウハンドルやら説明を読んでも読んでもさっぱりわかりません。

そんなソースを示してくれているページを知っていたら教えてください。
簡単であれば書いてくれると助かります。

103 名前:デフォルトの名無しさん mailto:sage [2011/12/18(日) 05:20:53.60 ]
開放される

104 名前:デフォルトの名無しさん mailto:sage [2011/12/18(日) 05:52:09.57 ]
>>102です。
変な質問して申し訳ありませんでした。自己解決しました。忘れてください。

105 名前:デフォルトの名無しさん mailto:sage [2011/12/18(日) 08:30:59.04 ]
c++のように、演算子をオーバーロード・オーバーライドできる言語って少ないんですか?
c++しか知らなくて、Javaをはじめてみたのですけど、不便で仕方がないかなぁ、なんて…、態度でかくてすみません。

106 名前:デフォルトの名無しさん mailto:sage [2011/12/18(日) 08:42:28.35 ]
C#とかScalaとかHaskellとかPythonとか


107 名前:デフォルトの名無しさん mailto:sage [2011/12/18(日) 09:48:10.70 ]
javaもoperatorみたいなもんが
あれば良かったのにね〜
文字列は+=できるのにね


108 名前:デフォルトの名無しさん mailto:sage [2011/12/18(日) 11:10:52.87 ]
operator定義なんて邪悪でしか無いだろ
いらんわこんなもん

109 名前:デフォルトの名無しさん mailto:sage [2011/12/18(日) 11:15:28.01 ]
forr.Add(bar) とかになるん?

110 名前:デフォルトの名無しさん mailto:sage [2011/12/18(日) 11:17:41.86 ]
C++で質問です。

クラスCHogeが構造体m_hoge[5]をメンバ変数として持つ場合、
まとめて初期化することは出来ますか?



111 名前:デフォルトの名無しさん mailto:sage [2011/12/18(日) 11:27:26.08 ]
C++11なら可能

112 名前:デフォルトの名無しさん mailto:sage [2011/12/18(日) 11:27:45.79 ]
PODなら配置new
そうでないならアラインドストレージの配列にして配置new

113 名前:デフォルトの名無しさん mailto:sage [2011/12/18(日) 11:28:44.51 ]
コンストラクタ

114 名前:デフォルトの名無しさん mailto:sage [2011/12/18(日) 11:32:56.34 ]
> いらんわこんなもん

自分に必要ないなら使わなきゃいいだけなのに、
必要もないのに使って「いらんわ」ってアホすぎ。

115 名前:デフォルトの名無しさん mailto:sage [2011/12/18(日) 11:37:36.67 ]
>>114
使ってないよ
なんで使ってると思ったの?

116 名前:デフォルトの名無しさん mailto:sage [2011/12/18(日) 11:48:11.32 ]
ああすまん、自分には必要ないけど、他人には必要ということが理解できないアホだったのね。

117 名前:デフォルトの名無しさん mailto:sage [2011/12/18(日) 12:14:10.87 ]
まあこんなもんに必要性感じてるアホよりマシだけどね

118 名前:デフォルトの名無しさん mailto:sage [2011/12/18(日) 12:20:16.97 ]
感じてないよ
なんで感じてるとおもったの? (w

119 名前:デフォルトの名無しさん mailto:sage [2011/12/18(日) 12:26:28.99 ]

7月の段階で民主党が2兆円の復興予算を組んだとき
自民党が要請した復興予算は累計17兆円

自民党の17兆が7月時点でに決定されていたのなら
今の日本はもう少し違って居た筈だ
ちなみに関東大震災のときは復興予算として現在の価値にして150兆円以上を組んでいた。
この事実を知れば、予算の規模の小ささ、ましてや増税なんて奇知涯にも程があると思わざる負えない。


120 名前: ◆QZaw55cn4c mailto:sage [2011/12/18(日) 12:38:33.64 ]
>>119
で、その17兆とやらの財源は?東電売却?



121 名前:デフォルトの名無しさん mailto:sage [2011/12/18(日) 12:40:02.40 ]
まー補正予算をチマチマ組むより、一気に金つぎこんだほうがいいんだろうな

122 名前:デフォルトの名無しさん mailto:sage [2011/12/18(日) 12:46:58.89 ]
>>118
誰がお前の事って言った?
日本語をちゃんと読んでレスしなよ

123 名前:デフォルトの名無しさん mailto:sage [2011/12/18(日) 13:11:02.53 ]
オペレーターのオーバーロードってなんかまずいの?
小規模なプログラミングやっててよく使うんだが

124 名前:デフォルトの名無しさん mailto:sage [2011/12/18(日) 13:15:39.99 ]
濫用すると分かりにくいコードができる。

125 名前:デフォルトの名無しさん mailto:sage [2011/12/18(日) 13:35:31.11 ]
C++の方でやってるね
可読性の問題かあ
自分一人でやる分には問題ないかな

126 名前:デフォルトの名無しさん mailto:sage [2011/12/18(日) 14:43:24.80 ]
>>122
自分のことなんて思ってないよ
なんで俺のことっておもったの? (w

127 名前:デフォルトの名無しさん mailto:sage [2011/12/18(日) 15:01:17.97 ]
俺、数学とか好きだから
例えば行列クラスとか作ったりした時(C#だけど)
やっぱ、operatorは欲しいよ。
いちいちC = A.Multiplicat(B)って記述より
C = A * B のほうがすっきりする
ようは、実装するときにちゃんとしたコードさえ
かけば、operatorは良いと思う。


128 名前:デフォルトの名無しさん mailto:sage [2011/12/18(日) 15:38:48.84 ]
C = Mul(A, B)
Mul(inA, inB, out)
普通こう書くだろ行列でメンバがprivateなんてまずありえないしメンバ関数である必要ない

129 名前:127 mailto:sage [2011/12/18(日) 16:25:16.01 ]
>>128
いいや、メンバは全部privateです。

130 名前:デフォルトの名無しさん mailto:sage [2011/12/18(日) 17:02:24.99 ]
C++さんも中置きにコだわらず
Lispさんのユニークな演算子を定義できると言っても過言ではありません(要は関数なんだけどね
みたいな書式を併用できればよかったのに



131 名前:デフォルトの名無しさん [2011/12/18(日) 17:35:46.82 ]
個別の要素ににアクセス出来ない行列とかワロス

132 名前:デフォルトの名無しさん [2011/12/18(日) 20:55:57.56 ]
わしは、晶子が好きじゃ!

133 名前:デフォルトの名無しさん mailto:sage [2011/12/18(日) 23:08:11.88 ]
>>128
>C = Mul(A, B)
ダサすぎてありえないw

134 名前:デフォルトの名無しさん mailto:sage [2011/12/19(月) 01:23:33.65 ]
イテレータやスマートポインタがポインタと同じように扱えるという
一点だけでも演算子オーバーロードの価値がある。

135 名前:デフォルトの名無しさん mailto:sage [2011/12/19(月) 08:26:00.25 ]
>>134
このへんはC++ならではだよなぁ
cout << なんかは賛否両論ありそうだけど

136 名前:デフォルトの名無しさん mailto:sage [2011/12/19(月) 15:16:33.62 ]
Visual c++の環境をEclipseから使うことってできるかな?
JavaやってみるためにEclipse使ってみたら、エディタタブの右のスクロールバーの右の
キーワードのハイライトがわかりやすくて感動した。

137 名前:デフォルトの名無しさん mailto:sage [2011/12/19(月) 15:21:54.95 ]
Productivity Power Tools入れれば同じようなの出るよ

138 名前:127 mailto:sage [2011/12/19(月) 16:43:55.72 ]
>>131
C#って書いたろ?
そんなもんインデクサや、行又は列の長さくらいは
public にしてるにきまってるだろ。


139 名前:デフォルトの名無しさん mailto:sage [2011/12/19(月) 17:23:14.54 ]
>>136
EcripseつかうならMinGWのが情報多いんでね?

140 名前:デフォルトの名無しさん mailto:sage [2011/12/19(月) 22:50:04.94 ]
operatorは初心者の俺には邪険な存在でしかない
1度目は適当に読み流してどんなもんか確認しただけだからかもしれなけど
ちゃんと実行確認しながら2度目で理解出来ればいいんだけど



141 名前:デフォルトの名無しさん mailto:sage [2011/12/20(火) 00:42:24.58 ]


朝日新聞は一時期300人のネット工作員をかかえ、反日工作していた。
捕まった編集者は49歳ですが、こんなカスでも1500万円の年収がもらえるんですよ。
>>866
14時以降に何が起きたんだ

>>866
Domain Information: [ドメイン情報]
a. [ドメイン名] ASAHI-NP.CO.JP
e. [そしきめい] かぶしきがいしゃ あさひしんぶんしゃ
f. [組織名] 株式会社 朝日新聞社

これが規制されたからじゃねw

−「朝日新聞社は、とある思想やパラダイムに日本の世論を誘導する見返りに、中国から大量の資金を貰っている。」−
これはおそらく週刊誌さえ書けない。
「失語症躁鬱ニートは氏ねよ」【ネット】朝日新聞社員(49)ネットで荒らし行為、会社ごとアクセス規制へ



142 名前:デフォルトの名無しさん mailto:sage [2011/12/20(火) 01:50:40.47 ]
>>140
Cのポインタなんかもそうだけど、最初は「そーゆーのがあるんだな」だけで良いと思うのだ
operatorなんて、一部以外はそんな多用するもんでもない気がするし。

143 名前:デフォルトの名無しさん mailto:sage [2011/12/20(火) 17:40:25.85 ]
>>140
operator、始めは何この意味不明、と思ってたけど、あると確かに便利なものはあるんだ。
例えば、
ポインタを要素に含んだ構造体を複製する際、ポインタの先まで複製するってのを
a = b
って出来る。
a.clone(b)
とかでいいんだけどね。
あと、他人が書いたコードのoperatorオーバライドは意味不明。確かに要らないと感じたりもする。

144 名前:デフォルトの名無しさん mailto:sage [2011/12/20(火) 17:57:08.78 ]
int型が何ビットになるか決めるのはコンパイラですよね?
オプションで指定したり、クロスプラットフォームだったりするから。

ja.wikipedia.org/wiki/64%E3%83%93%E3%83%83%E3%83%88
を見ると、OS単位で決まってるみたいな書き方があると感じているのだけど、
OSの層とコンパイラの層があるのかな?

145 名前:デフォルトの名無しさん [2011/12/20(火) 18:20:08.40 ]
VC10で以下のヘッダーファイルはコンパイルが通るのですが、プリコンパイル済みヘッダーにしようとすると二重定義だと怒られます
回避策はないでしょうか。あるいはどこが記述が間違っているのでしょうか
error LNK2005: "public: static void __cdecl Hoge<int>::FuncA(void)" (?FuncA@?$Hoge@H@@SAXXZ) は既に stdafx.obj で定義されています。
error LNK2005: "public: void __thiscall Hoge<int>::FuncB(void)" (?FuncB@?$Hoge@H@@QAEXXZ) は既に stdafx.obj で定義されています。

// Hoge.h
#pragma once

template<typename T> struct Hoge {
  static void FuncA();
  void FuncB();
};

template<> void Hoge<int>::FuncA(){}
template<> void Hoge<int>::FuncB(){}


146 名前:デフォルトの名無しさん mailto:sage [2011/12/20(火) 18:38:08.84 ]
>>145
template<> void Hoge<int>::FuncA(){}
template<> void Hoge<int>::FuncB(){}
これは実装ファイルに1箇所だけに書かなきゃだめ
リンクエラーになる


147 名前:デフォルトの名無しさん [2011/12/20(火) 19:22:16.84 ]
>>146
ありがとうございます
ただ、なんとなく inline つけたら問題なく動いちゃいました
インライン関数はプリコンパイルしないようになっているのだろうか

148 名前:デフォルトの名無しさん [2011/12/20(火) 21:11:08.53 ]
定数構造体配列の添字をenumとして定義するのは、どうするのがスマートでしょう?

typedef struct {
  BYTE value;
  const char* name;
} STRCT;

const STRCT const_array[] = {
  {1, "one"},
  {3, "three"},
  {5, "five"},
};


これらを一緒に定義したい(ONEと1と"one"を1行で定義したい)


enum {
  ONE,
  THREE,
  FIVE
};

マクロを駆使して、同じファイルを2回#includeとかしたら出来るんですが、もっといい方法は無いものかと。
Cで無理なら、C++でも可です。

149 名前:デフォルトの名無しさん mailto:sage [2011/12/20(火) 21:17:50.19 ]
struct S {
static unsigned int value;
std::string name;
S(unsigned int v, std::string n) : value(v), name(n) { }
};

typedef S const SC;

static SC
ONE(1, "one"),
THREE(3, "three"),
 FIVE(5, "five");


150 名前:デフォルトの名無しさん mailto:sage [2011/12/20(火) 21:18:44.16 ]
×
struct S {
static unsigned int value;


struct S {
unsigned int value;




151 名前:デフォルトの名無しさん mailto:sage [2011/12/20(火) 21:46:35.05 ]
>>144
整数型のサイズを決めるのはコンパイラのみ。
ただし、コンパイラの設計がターゲットOSのAPIなどに
影響を受ける場合があるということ。

152 名前:デフォルトの名無しさん [2011/12/20(火) 22:28:01.19 ]
>>149-150
ありがとうございます

>S(unsigned int v, std::string n) : value(v), name(n) { }
この文法、初めて見たんですが何という名前の機能になりますか?

定義してコンパイルは通ったんですが、要素にアクセスする方法が分からなくて…

153 名前:デフォルトの名無しさん mailto:sage [2011/12/20(火) 23:40:38.22 ]
>>152
ONE.value, ONE.name


154 名前:デフォルトの名無しさん mailto:sage [2011/12/21(水) 01:24:23.57 ]
>>147
inline 関数は定義がいっぱいあってもその内容が完全に同じならおk

155 名前:デフォルトの名無しさん mailto:sage [2011/12/21(水) 01:28:28.64 ]
>>148
こんな感じでがんばれ。
d.hatena.ne.jp/Cryolite/20110920#p1

156 名前:デフォルトの名無しさん [2011/12/21(水) 02:27:39.19 ]
おねがいします。
引数が SIZEの関数があったので
func(SIZE(CX,CY));
と記述したらエラーとなりました。
SIZE size={CX,CY};
func(size); とするとOKでした。
変数を作らずに関数に値を渡すにはどう記述すればいいのでしょうか。


157 名前:デフォルトの名無しさん mailto:sage [2011/12/21(水) 02:31:33.13 ]
>>156
コンパイラがC99またはC++11対応ならSIZE{CX,CY}でいけるんじゃないかな。

158 名前:デフォルトの名無しさん [2011/12/21(水) 03:42:27.32 ]
>>153
ありがとう。動作しました。
こんな文法があるとは。

ただ、これらを配列としてアクセスしたかったりします。
printf(const_array[ONE].name);
のように。

>>149の原理が分かってないので、応用できないというか…
なにか参考URLはないでしょうか
構造体でググっても見つかりません…

159 名前:2011新作展示 [2011/12/21(水) 03:44:15.42 ]
2011新作展示
N級最高等級時計大量入荷
新品種類がそろっています。
baidurl.cn/4ye
baidurl.cn/555
baidurl.cn/556
baidurl.cn/557
baidurl.cn/559


160 名前:144 mailto:sage [2011/12/21(水) 06:52:08.37 ]
>>151
ありがとう



161 名前:デフォルトの名無しさん mailto:sage [2011/12/21(水) 08:52:44.73 ]
>>158
bool operator < (S const & a, S const & b) {
return a.value < b.value;
}

std::map<S, S> make_array(void) {
std::map<S, S> array;
array.insert(ONE, ONE);
array.insert(THREE, THREE);
attay.insert(FIVE, FIVE);
return array;
}

static std::map<S, S> const const_array = make_array();

int main(void) {
std::cout << const_array[ONE].value << std::endl;
std::cout << const_array[ONE].name << std::endl;
}

162 名前:デフォルトの名無しさん mailto:sage [2011/12/21(水) 23:11:15.45 ]

解散コールは1:55から
12.19 街頭演説、国民の怒りと危機管理への不安
www.youtube.com/watch?v=6PQf9GvXWB0


国民に罵声を浴びせられ駅前交番に避難するテレビアカヒの取材班 12/19正午 新橋駅前 
blog-imgs-44.fc2.com/d/e/l/deliciousicecoffee/111219_124643_ed.jpg
        ,:'  .l .::;',. :::;/..://:: /,':/  ', l、 .i  ヽ
.          ,'  ..::| .::;',' :;:','フ'7フ''7/   ',.ト',_|, , ',.',
       ,'   .::::::!'''l/!:;'/ /'゙  /     '! ゙;:|:、.|、| 'l
.         ,'.  .:::::::{ l'.l/  、_  _,.      'l/',|.';|
       l  :::::::::::';、ヾ      ̄     `‐-‐'/! ';. '
.         ! :::::::::::/ `‐、        ゝ   |'゙ |
       | ::::::::/   \    、_, _.,.,_ ノ::: !  野田政権が早く終わりますように
       |::::/.     _rl`': 、_     ///;ト,゙;:::::./
..      `´      /\\  `i;┬:////゙l゙l ヾ/
                ,.:く::::::::`:、\ 〉l゙:l  / !.|
.            /:.:.:.:\:.:.:.:.`:、ソ/:.:|    | |   19日の報道ステーション
           /.:.:.:.:.:.:.:.:.:\:.:.:.:У:.:;l     livedoor.blogimg.jp/kingcurtis/imgs/e/d/ed2dbc66.jpg 

163 名前:デフォルトの名無しさん mailto:sage [2011/12/22(木) 06:29:56.60 ]
class A{
 int hoge(){}
}
と書いてもコンパイルエラーにならないが、
class A{
 int hoge();
}
int A::hoge(){}
と書くと、「値を返さなければいけません」のようなコンパイルエラーになるのは何故ですか?
両者は同じではないですか?

164 名前:デフォルトの名無しさん mailto:sage [2011/12/22(木) 06:37:16.94 ]
ttp://codepad.org/NM2qcsIg
文句言われるけど

165 名前:163 mailto:sage [2011/12/22(木) 07:40:15.39 ]
>>164
ありがとうございます。
気になったらとりあえずcodepadに行ってみるのがいい感じですね。

mingwだと良く見ると警告が出ていて、
ideon、Visual C++だと警告すら出ませんでした。

警告に対する設定の違い見たいですね。。。

166 名前:デフォルトの名無しさん mailto:sage [2011/12/22(木) 07:41:49.56 ]
前者は呼ばれない関数だからだろ。呼べばエラーになるよ。

167 名前:デフォルトの名無しさん mailto:sage [2011/12/22(木) 07:49:11.02 ]
#include <iostream>
class A{
private:
 int ababababa(void)
 {
  std::cout << "hoge";
  return 1;
 }
};
int main()
{
 A a;
 a.ababababa();
 std::cout << "foo";
}
単体試験をしたいのですが、ababababa(void)がprivateであるためアクセスできません。
クラスを変更せずに試験を行うことは出来ませんか?
クラスの内部にfriendを書く以外の方法があれば教えて欲しいです。

168 名前:デフォルトの名無しさん mailto:sage [2011/12/22(木) 07:50:39.96 ]
#define private public

169 名前:デフォルトの名無しさん mailto:sage [2011/12/22(木) 08:48:37.01 ]
名前の違う、自由に改変可能な、同じ内容のクラスを作って
対象のクラスのポインタをそのクラスのポインタにキャストする

170 名前:167 mailto:sage [2011/12/22(木) 09:41:48.72 ]
>#define private public
これは…。
恐ろしいものを知りました。

>名前の違う、自由に改変可能な、同じ内容のクラスを作って
ちょっと労力が大きいかも。

おふたかた、ありがとうございます。
因みに、プロの方ですか?現場でもこういったことをするのですか?




171 名前:デフォルトの名無しさん mailto:sage [2011/12/22(木) 09:43:46.66 ]
>前者は呼ばれない関数だからだろ。呼べばエラーになるよ。

呼ばれなければコンパイルされないのか…。
ありがとうございます。

172 名前:デフォルトの名無しさん mailto:sage [2011/12/22(木) 09:47:35.11 ]
呼ばれない関数でも普通はコンパイルされるよ。

173 名前:デフォルトの名無しさん mailto:sage [2011/12/22(木) 10:47:13.94 ]
>>168
背筋が凍った

174 名前:デフォルトの名無しさん mailto:sage [2011/12/22(木) 11:56:21.38 ]
実際>>168がまかり通ってるような現場ってあるの?

175 名前:デフォルトの名無しさん mailto:sage [2011/12/22(木) 12:18:10.65 ]
クラスにfriendを追加したりする変更権限のある人が
テストをした方が良いと思うんだが。

176 名前:デフォルトの名無しさん mailto:sage [2011/12/22(木) 14:39:19.81 ]
>>171-172
呼ばれないメンバ関数をコンパイルしない代表は、VC++。
他人が使うクラスを作るときは要注意。

177 名前:デフォルトの名無しさん mailto:sage [2011/12/22(木) 16:14:40.38 ]
>>176
実例よろ

178 名前:デフォルトの名無しさん mailto:sage [2011/12/22(木) 16:31:36.66 ]
>>163
前者はインライン関数。
インライン関数は一部は一部文法チェックされるようだけど、
呼ばれなければ、returnがなくても怒られないね。
バイナリには含まれないから問題ない。

後者はインライン関数ではないので
呼ばれなくてもバイナリに含まれるから
returnがなければ怒られる。

よって両者は異なる。

179 名前:デフォルトの名無しさん mailto:sage [2011/12/22(木) 22:37:11.15 ]
ひどいコンパイラだ…

180 名前:デフォルトの名無しさん mailto:sage [2011/12/22(木) 22:46:22.31 ]
当然の処置だと思うがね。
インライン関数のマージ作業に意味解析済みである必要は無いというかそもそも無駄なんだから



181 名前:デフォルトの名無しさん mailto:sage [2011/12/22(木) 22:54:10.81 ]
そうかなぁ…
リリースモードならともかく、デバッグモードではちゃんとコンパイルエラーを出して欲しい。
DEFCON^h^h^h^h^h^h警告レベル4でもでなのかしら? …実験してみるかな。

182 名前:デフォルトの名無しさん mailto:sage [2011/12/22(木) 23:02:13.29 ]
未使用だと言うなら警告してくれてもいいとすら思う。

183 名前:デフォルトの名無しさん mailto:sage [2011/12/22(木) 23:53:24.85 ]
>前者はインライン関数。
なんと!
クラス宣言の中に書いてしまうとインライン扱いになるということ?

警告してくれるようなオプションってないのかな?
後で邪魔になっても困る人もいるのでは?

184 名前:デフォルトの名無しさん mailto:sage [2011/12/23(金) 01:09:32.25 ]
震災前

     /::::::::::::::::::::::::::::::;;::ノ ヽ;::\
    /::::::::;;;;;;;;;,,,;;...-‐''"~    ヽ:;::l
     |:::::::::::|    岡田 異音    |ミ|
     |:::::::/     ,,,  ヽ,、   '|ミ|  
     '|:::::::l    '''""   ゙゙゙゙`   |ミ|
       |:::::|.  ,,r ‐、   ,, - 、  |/
     ,/⌒|  ノ ・ _), (. ・ `つ|
     | (   "''''"    |"'''''"  | 
      ヽ,,.        ヽ    |
       |       ^-^_,, -、   |   
         |    _,, --‐''~    ) |  マニフェストもう守れない。どうしよう・・・・ 
         'ヽ  (   ,r''''''‐-‐′ / 


震災後

     |:::::::::/            |ミ|
     |::::::::|   ,,,,,    ,,,,,   |ミ|
     |彡|.  '''"""''   ''"""'' |/
     /⌒|  -=・=‐,   =・=-  |
     | (    "''''"   | "''''"  |  
     .ヽ,,         ヽ    .|  キリッ
        |       ^-^    |
   .     |     ‐-===-   |   大震災が起こったのだからマニフェストの破綻も致し方ありません
         ,\.    "'''''''"   / 
朝鮮民主党
    解党

185 名前:デフォルトの名無しさん mailto:sage [2011/12/23(金) 08:52:29.38 ]
WIN32のAPIのwinsockの関数、「WSACleanup()」というのは、何をする関数なのでしょうか?

「WSAStartup()」と対になって、
初期化・開放 のようなものかと思っていたのですが、
調べてみると、
「WSAStartup()」はメモリを取得するが、
「WSACleanup()」をしても開放しないので、そのうちヒープか何かが無くなって落ちると知りました。

186 名前:デフォルトの名無しさん mailto:sage [2011/12/23(金) 09:00:06.22 ]
何をするのか知らなくてもいいようにそういう関数になってるんだけど

187 名前:デフォルトの名無しさん mailto:sage [2011/12/23(金) 12:32:56.69 ]
今独習C++やっているんですが、

std::ofstream out("test.txt", std::ios::out | std::ios::binary);
double num = 100.45;
out.write((char *) &num, sizeof(double));

の(char *) &numって何で&numなんですか?

188 名前:デフォルトの名無しさん mailto:sage [2011/12/23(金) 12:38:00.47 ]
numのアドレスでした
事故解決しました


189 名前:デフォルトの名無しさん mailto:sage [2011/12/23(金) 13:14:39.78 ]
>何をするのか知らなくてもいいようにそういう関数になってるんだけど
プロセス中で複数回呼ぶのはNGで、
プロセスが終了したら開放されるのであれば、
「WSACleanup()」しなくてもいいってことにならないのでしょうか?

もうひとつお願いします。
ソケットが使える常態かそうではないかはどのように確認できますか?
WSARecv()などで受信してみないとわからないでしょうか?

190 名前:デフォルトの名無しさん mailto:sage [2011/12/24(土) 07:15:28.99 ]
STLのstd::mapをprivateメンバとしてもつクラスをDLLの内部に持って、そのクラスをエクスポートすると、
Visual C++では、警告:C4251 が示されます。

privateとして利用している場合は、OKなのでしょうか、NGなのでしょうか。
インタフェースとして利用している場合は、std::mapの実装が異なる可能性があるのでNGというのは、なんとなくわかるのですが、
内部で利用するだけであれば問題がある理由がわからないです。
inlineを利用してアクセスするのがNGというのも良くわからないです。

この件では、ヘッダの内容を全てcpp側にコピーしても同じ警告が出ます。どうしてなのでしょうか?
コンパイラがインタフェースに利用されているか判断するのが困難だからでしょうか?

「class 'std::map<_Kty,_Ty>' は __export キーワードを使って class 'info::driver::InetPromiscuousDriver' にエクスポートしてください。」
とは、どこの何に対して、__exportを追記するとエクスポートできるのでしょうか?

エスパー出来れば、この辺りについて教えてください。



191 名前:デフォルトの名無しさん mailto:sage [2011/12/24(土) 08:48:18.60 ]
cat test.cpp | indent

で奇麗に整形されたソースになると思ったら
とんでもない壊れたものしか出力されない
何かオプションでもいるの?

192 名前:片山博文MZ ◆0lBZNi.Q7evd mailto:sage [2011/12/24(土) 10:22:48.99 ]
>>191
www.6809.net/tenk/html/lib/doc/astyle_j.htm

193 名前:デフォルトの名無しさん mailto:sage [2011/12/24(土) 17:43:03.67 ]
>>190
private メンバもクラスのサイズに影響する。
inline でアクセスしてたらDLL内外で実装の異なる map アクセスが展開される可能性がある。

194 名前:デフォルトの名無しさん mailto:sage [2011/12/24(土) 22:55:08.76 ]
int を全部doubleにおきかえたら不具合おきることなんてあるんだろうか
めんどくさくなってきたから全部doubleにしてしまいたい

195 名前:デフォルトの名無しさん mailto:sage [2011/12/24(土) 23:10:57.90 ]
>>194
>1/2*2
0
>1.0/2.0*2.0
1.000000

196 名前:デフォルトの名無しさん mailto:sage [2011/12/24(土) 23:20:24.96 ]
>>194
>めんどくさくなってきたから全部doubleにしてしまいたい

すれば?

余計面倒なことになると思うが。

197 名前:デフォルトの名無しさん mailto:sage [2011/12/25(日) 00:38:18.53 ]
インデックスがdoubleとかどこのうちの会社のソースだよ

198 名前:デフォルトの名無しさん mailto:sage [2011/12/25(日) 00:39:23.25 ]
Luaではよくある事

199 名前:デフォルトの名無しさん mailto:sage [2011/12/25(日) 00:44:23.33 ]
doubleででるかどうかはプログラム次第。
[]を小数点切り捨てとすると
[a/n + b/n]
[a/n] + [b/n]
は異なる。

200 名前:デフォルトの名無しさん mailto:sage [2011/12/25(日) 00:54:18.15 ]
>>199
世も末だなw



201 名前:デフォルトの名無しさん mailto:sage [2011/12/25(日) 02:57:13.99 ]
>>194
double i;
for(i=0;i<1;i+=0.01)printf("%f ",i);

int i;
for(i=0;i<100;i++)printf("%f ",(double)i/100.0);
とは違うことがある。



202 名前:デフォルトの名無しさん mailto:sage [2011/12/25(日) 03:48:17.30 ]
実数をループカウンタにすんなよ

203 名前:デフォルトの名無しさん mailto:sage [2011/12/25(日) 13:54:45.42 ]
intをdoubleに置き換えたので仕方がないです
実数でループできるように言語仕様を変えるべきでは?

204 名前:デフォルトの名無しさん mailto:sage [2011/12/25(日) 14:00:55.12 ]
実数でループできるが、計算の誤差が問題。

205 名前:デフォルトの名無しさん mailto:sage [2011/12/25(日) 14:06:30.24 ]
2進数で表記出来ないような数値を繰り返しで足し算したりするとどんどん誤差が増えるんだっけ

206 名前:デフォルトの名無しさん mailto:sage [2011/12/25(日) 14:24:16.46 ]
ループが一回多かったり少なくなったりする。
マシーンで計算精度が異なる。
整数型であればズレが出ない。

207 名前:デフォルトの名無しさん mailto:sage [2011/12/25(日) 15:16:35.68 ]
他の学問ならまだしもプログラミングって基本的に質問に向いてないよね

208 名前:デフォルトの名無しさん mailto:sage [2011/12/25(日) 18:36:46.52 ]
仕様上は数値である必要すらないけどな。

209 名前: ◆QZaw55cn4c mailto:sage [2011/12/25(日) 22:10:03.45 ]
>>207
コード・ソースを晒せば早いかもしれませんが、はじめのうちはなかなか勇気がでないかもしれません。

210 名前:デフォルトの名無しさん mailto:sage [2011/12/25(日) 23:20:09.77 ]
>>209
糞コードを晒す厚顔無恥さは勇気とは言わないけどな



211 名前: ◆QZaw55cn4c mailto:sage [2011/12/25(日) 23:23:41.70 ]
>>210
具体的に

212 名前:デフォルトの名無しさん mailto:sage [2011/12/25(日) 23:39:55.69 ]
自分で気付けない時点ですでに┐(´д`)┌ヤレヤレ

213 名前:デフォルトの名無しさん mailto:sage [2011/12/25(日) 23:44:05.64 ]
糞コードと馬鹿にするだけのカスは要らないのでスレから立ち去りなさい
糞コードを改善する答えやヒントを人に与えることができる人間以外は必要ありません

214 名前:デフォルトの名無しさん mailto:sage [2011/12/25(日) 23:56:37.99 ]
>>213はQがコテを外して書いた糞レス

215 名前:デフォルトの名無しさん mailto:sage [2011/12/26(月) 22:56:39.86 ]
7BITとか31BITみたいな中途半端な整数型って作れますか?

216 名前:デフォルトの名無しさん mailto:sage [2011/12/27(火) 00:10:20.44 ]
>>215
intと暗黙で相互変換可能なクラスを作ればそれですむ。
厳密な意味での整数型が作りたければコンパイラに手を入れる必要がある。

217 名前:デフォルトの名無しさん mailto:sage [2011/12/27(火) 00:59:27.39 ]
ビットフィールド

218 名前:デフォルトの名無しさん mailto:sage [2011/12/27(火) 11:09:05.80 ]
広いビット幅があれば制限すれば良い。
少ないビット幅しか使えないなら配列で多倍長数を表現する。
ハードウェアの対応でないから演算速度は落ちる。

219 名前:デフォルトの名無しさん mailto:sage [2011/12/27(火) 14:44:51.44 ]
// Hogeのインスタンスをたくさん作成
vector<auto_ptr<Hoge> > hoge_pointers(num, NULL);
for (int i = 0; i < num; i++) { hoge_pointers[i].reset(new Hoge); }

// pushするループで例外を投げたくないから、先行してhoge_userの内部にメモリを確保する
hoge_user.reserve(hoge_pointers.size());

// pushされた時点からポインタはhoge_userが管理する
for (int i = 0; i < num; i++) { hoge_user.push(hoge_pointers[i].release()); }

こんな感じで、hoge_userの外でHogeインスタンスをたくさん作成してから
hoge_userにポインタを渡したいんですが、どういう風にすればいいでしょうか

例外が起こった場合には、hoge_pointersがすべて解放されて、
hoge_userにpushされたポインタはすべてなかったことにしたいです

で、スマポを使おうと思ったのですが、auto_ptrはSTLのvectorに突っ込めなくて、
boost::shared_ptrはポインタを取り出すことができないのでやめました

try/catch 使えって話ですが、なにか他にいい解決策はありますか?

220 名前:デフォルトの名無しさん mailto:sage [2011/12/27(火) 15:20:55.13 ]
>>219
コンテナにauto_ptrを入れる行為はCOAPと呼ばれ厳禁

Effective STLを読め



221 名前:デフォルトの名無しさん mailto:sage [2011/12/27(火) 15:25:10.76 ]
その目的だとtry/catchで書くのが一番シンプルで楽だと思うよ

vector<Hoge *> v;
try {
 v.reserve(N);
 for(int i(0); i != N; ++i) {
  v.push_back(new Hoge);
 }

}
catch(...) {
 int n(v.size());
 for(int i(0); i != n; ++i) {
  delete v[i] ;
 }
throw ;
}

どうしてもtry/catchが嫌ならcatchブロックの部分をデストラクタで実行するクラスを作ってvのアドレスをもたせればいい

222 名前:デフォルトの名無しさん mailto:sage [2011/12/27(火) 15:59:34.02 ]
アドバイスありがとうございます
意地でもtry/catchを使いたくないので、そちらのコードを参考にしてクラスを自作したいと思います

223 名前:デフォルトの名無しさん mailto:sage [2011/12/27(火) 18:41:37.49 ]
構造体内で確保したリソースを削除するには?

public ref struct A {
array<int> a;
A() {
a = gcnew array<int>(10);
}
~A(){
delete a;
}
};


A^ s = gcnew A();
delete s;

で~A()が呼び出されて内部のリソースも削除される?

224 名前:デフォルトの名無しさん mailto:sage [2011/12/27(火) 19:09:14.58 ]
>>223
節子それC++やない、C++/CLIや

225 名前:デフォルトの名無しさん mailto:sage [2011/12/27(火) 19:32:32.67 ]
あ、ここc++/cliの質問は禁止?
すいません

226 名前:デフォルトの名無しさん mailto:sage [2011/12/27(火) 21:00:27.48 ]
別の言語だしな。C#の質問をするのと大して変わらんw
とりあえずスレ一覧をCLIで検索してみれ。

227 名前:デフォルトの名無しさん mailto:sage [2011/12/28(水) 00:12:20.49 ]
機種依存OKって事になってますので、こちらで質問させてもらいます。
プリミティブ型の値をvectorに大量に一括設定する際、vector::assign以上に高速に
設定する方法はないでしょうか?
VC++2010を使っています。

228 名前:227 mailto:sage [2011/12/28(水) 00:24:38.84 ]
すみません、もう1点。
vector等のSTLのコンテナを含む静的ライブラリ(型を限定してコンパイルした上で提供)を作成しているのですが、
Debug版の遅さに我慢できません(VC++2010)。
ライブラリのリリースでは内部実装がDebug版である必要はないため、
Debugビルド向けにもReleaseでビルドして提供したいと考えています。
しかし、イテレータデバッグレベルがどうのこうのっていうエラーが発生してしまいます。
なんとか回避する方法はないでしょうか?

229 名前:デフォルトの名無しさん mailto:sage [2011/12/28(水) 01:30:39.39 ]
>>227
たぶん無いね。あっても大差無いだろう。

>>228
_SECURE_SCL の設定で片付くんじゃないの?
msdn.microsoft.com/ja-jp/library/aa985965.aspx

あと、エラーメッセージは正確にね。

230 名前:227 mailto:sage [2011/12/28(水) 03:28:57.27 ]
>>229
ありがとうございます。

_SECURE_SCLについてはやってみましたが、プロジェクト全体で同じ値に設定しないとダメなようです。
Debugのプロジェクトは
 利用者側 ... デバッグ作業がしたいので_SECURE_SCL=1にしたい
 ライブラリ側 ... デバッグは済んでいて高速に処理したいので_SECURE_SCL=0にしたい
としたいのですが、下のLNK2038と同じエラーになってしいます。

> あと、エラーメッセージは正確にね。
申し訳ありません。
手元に環境がないため、ググッた結果になりますが、
 error LNK2038: '_ITERATOR_DEBUG_LEVEL' の不一致が検出されました。
だと思います。

自前のクラスを作って置き換えるか、より高速なSTLの実装があれば、それを使うというのもありなのかもしれませんが…。



231 名前:デフォルトの名無しさん mailto:sage [2011/12/28(水) 09:16:58.00 ]
リンク先を読んだならchecked_***はためしたんだろうか

232 名前:デフォルトの名無しさん mailto:sage [2011/12/28(水) 10:50:07.41 ]
デバッグ用はおそくていい。
速くしたければリリース使う。

233 名前:227 mailto:sage [2011/12/28(水) 21:10:53.96 ]
>>231
227に関しては早くなるかもしれませんね。
でも、今はなくなってしまったようです。
VC++2008のalgorithm
msdn.microsoft.com/en-us/library/chzkfc23%28v=VS.90%29.aspx
VC++2010のalgorithm
msdn.microsoft.com/en-us/library/chzkfc23%28v=VS.100%29.aspx
make_checked_iteratorは残っていますが、これを使ってstd::copyしても、内部で
 _DEBUG_RANGE
_DEBUG_POINTER
が呼ばれた後、ようやくコピー処理が走るようになってるようです。

>>232
それが、我慢出来ないくらい遅いんですよ。
ソースコードデバッグを開始すると数分反応が帰って来ませんし。

234 名前:デフォルトの名無しさん mailto:sage [2011/12/28(水) 21:15:11.47 ]
[]じゃなくてatを使っているとか
そういうのじゃないよね?

235 名前:デフォルトの名無しさん mailto:sage [2011/12/28(水) 21:27:54.73 ]
とりあえずreserve()してからだとどうなるか知りたいね

236 名前:デフォルトの名無しさん mailto:sage [2011/12/28(水) 21:29:53.57 ]
>>234
SECURE_SCLのせいでatも[]も変わらなくなってるよ
最初に気がついたときは怒りで発狂するかと思ったw

ありなしでDLLまたげないしね
ほんと面倒だわ

>>233
うちもけっこうでかいプログラム作ってるけどSECUrE_SCLをOFFにしてDebug版は素直に使ってる
ただ、デバッグ実行じゃなくてexeを直に叩いて立ち上げてからアタッチしたほうが
結構速い気がするのでそっちを使ってる


237 名前:227 mailto:sage [2011/12/28(水) 21:30:32.33 ]
>>234
atは使ってませんね。[]です。

238 名前:227 mailto:sage [2011/12/28(水) 21:45:42.75 ]
>>235
reserveして設定も試しています。
[]で設定する他、生ポインタに変換して設定したり、OpenMPを使ってみたりしてみましたが…、
assignの方が早かったです。
どうも、reserveも要素ごとに配置newが発生したり、_DEBUG_RANGEなどが走ったりしているようで、
値の設定分、遅くなってしまうようです。

>>236
立ち上がってアタッチってのはたしかに有用かもしれませんね。
ありがとうございます。


239 名前:デフォルトの名無しさん mailto:sage [2011/12/28(水) 21:52:35.70 ]
どんな操作なのかソース出したほうがいいんじゃないかと思う

240 名前:227 mailto:sage [2011/12/28(水) 23:13:13.60 ]
>>239
ソースは手元に無いので、覚えている範囲で似たようなコードを書きました。
あと、うちにあるのはExpressなので、OpenMPが動くかどうかは不明です。
codepad.org/kqZndGzg
ちなみに >>238 はreserveではなくて、resizeでした。
申し訳ありません。
reserveも試してはいますが、assignの方が早かったと思います。




241 名前:デフォルトの名無しさん mailto:sage [2011/12/29(木) 01:07:24.97 ]
forじゃなくてfor_eachを使うと少しはましになるかもしれないなあとか
この際だからmemcpyでいいんじゃねというくらいしかまともな方法は思いつかない

boost::container::vectorとか使って望む結果になるかどうかも試したことないからわからないな

242 名前:デフォルトの名無しさん mailto:sage [2011/12/29(木) 04:03:07.90 ]
void function (char *arg);
という関数に渡された引数が &hoge[1]だった場合、
関数の中ではhoge[0]はarg[-1]という表現でいいんですか?

243 名前:227 mailto:sage [2011/12/29(木) 06:52:19.95 ]
>>241
へえ、boostにもvectorがあるんですね。
これは、試してみたいですね。
ありがとうございます。

244 名前:デフォルトの名無しさん mailto:sage [2011/12/29(木) 08:20:41.31 ]
boostには変なコンテナがたくさんあるよ

Header <boost/container/container_fwd.hpp>
Header <boost/container/deque.hpp>
Header <boost/container/flat_map.hpp>
Header <boost/container/flat_set.hpp>
Header <boost/container/list.hpp>
Header <boost/container/map.hpp>
Header <boost/container/set.hpp>
Header <boost/container/slist.hpp>
Header <boost/container/stable_vector.hpp>
Header <boost/container/string.hpp>
Header <boost/container/vector.hpp>

ひと通りどんな内容なのか目を通しておくとよい
boostは今や膨大な内容になっていてとても全部目を通すのは不可能に
近くなってきたから興味のある所だけでも見ておこう

245 名前:デフォルトの名無しさん mailto:sage [2011/12/29(木) 08:29:02.28 ]
boostはいらん。
これ使うやつはアホウだ。

246 名前:デフォルトの名無しさん mailto:sage [2011/12/29(木) 08:31:19.60 ]
timerとか正規表現とかスマートポインタあたりで使うやつがいるが。
有名なライブラリがあったりtimerなど3行程度で自作できるだろ。
バージョン違いで動作が変わる可能性あるし、インクルードするやつはアホウ。

247 名前:デフォルトの名無しさん mailto:sage [2011/12/29(木) 08:37:09.53 ]
バイナリの配布で中身にboost使うなら良い。boostのバージョンに依存しないからな。
ソースコードを張ったり公開するところでboostはダメだな。

248 名前:デフォルトの名無しさん mailto:sage [2011/12/29(木) 11:24:02.76 ]
0xが普及したらboostとか要らなくなる

249 名前:デフォルトの名無しさん mailto:sage [2011/12/29(木) 13:11:43.53 ]
スマートポインタなんて使う必要ないと思うんだが。
STLを使っとけばスコープ外れたら自動で解放するだろ。
どうやってnewの使用が回避出来なかったら手動で開放しろよ。
もしくはデストラクタに組み込めよ。そしたらいらん。

250 名前:デフォルトの名無しさん mailto:sage [2011/12/29(木) 13:59:55.29 ]
>>245-246はアホウ
使ってもみないでただ批判ばかりしてる



251 名前:デフォルトの名無しさん mailto:sage [2011/12/29(木) 14:33:10.27 ]
>>249
>デストラクタに組み込めよ
これを毎回書くのがだるいからスマポ使うんだろ

252 名前:デフォルトの名無しさん mailto:sage [2011/12/29(木) 14:33:12.78 ]
つかってみて言ってるんだ。
boostが優れている所なんてないだろ。
使う意味なし。

253 名前:デフォルトの名無しさん mailto:sage [2011/12/29(木) 14:37:06.06 ]
釣りにしても露骨すぎる
真性なのだろうか

254 名前:デフォルトの名無しさん mailto:sage [2011/12/29(木) 14:46:40.93 ]
そうだな
標準の std::unique_ptr と std::shared_ptr で十分だよな

255 名前:デフォルトの名無しさん mailto:sage [2011/12/29(木) 14:51:34.14 ]
それもいらないが。速度低下するし。
スマートポイント使うんだったら、C#とかPHPとかBASICとか自動で開放するやつつかえよ。

256 名前:デフォルトの名無しさん mailto:sage [2011/12/29(木) 15:03:08.22 ]
一理ある
パフォーマンス犠牲にして楽したいなら他の言語だよな

257 名前:デフォルトの名無しさん mailto:sage [2011/12/29(木) 15:08:46.98 ]
649 デフォルトの名無しさん [sage] 2011/12/29(木) 14:50:37.28 ID: Be:
学生プログラマ日本一決定戦(予選は社会人も参加可)
ttp://codevs.jp/howto.html
現在予選開催中
応募締切 2012.1.6 12:00

おもしろいことやっているじゃん。誰か今から参加しろよ。

258 名前:デフォルトの名無しさん mailto:sage [2011/12/29(木) 16:04:27.15 ]
>>255
unique_ptr は速度低下しないだろ。

259 名前:デフォルトの名無しさん mailto:sage [2011/12/29(木) 16:08:33.62 ]
ユニポはクールだよねぇ
右辺値最高やわ

260 名前:デフォルトの名無しさん mailto:sage [2011/12/29(木) 18:39:50.46 ]
>>258
C++スレで他言語持ち出すバカなんだから察してあげなよ



261 名前:デフォルトの名無しさん mailto:sage [2011/12/29(木) 23:29:53.46 ]
境界チェックつきの配列を使いたく、オリジナルで
detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1111063861

の回答のようなクラスを作ろうと思うのですが、

このクラスで作る配列を静的に初期化したいのですが、できますか?

static int hoge[] = {0,2,4,5,};みたいな感じで扱いたいです。

262 名前:デフォルトの名無しさん mailto:sage [2011/12/29(木) 23:45:38.95 ]
boost::array使えば?

263 名前:デフォルトの名無しさん mailto:sage [2011/12/29(木) 23:49:28.42 ]
template <class T, unsigned int N> struct Array {
T elements[N];
// コンストラクタデストラクタは書かない
T & operator [] (unsigned int n) {
if(n < N) return elements[n] else throw out_of_range("out_of_range");
}
// 以下略
} ;

たぶんこれでいけると思うよ

264 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 00:15:22.35 ]
boostは使えませんので、類似のものを作るか・・・

>>263

operator[]はメンバー関数である必要があります っていわれました。
環境は、VC2010です

265 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 01:09:07.12 ]
すいません。そのままでコンパイルできました。
size N を明示的に書かなくても使えますか?

266 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 01:42:55.10 ]
無理
でもVC10なら自分で書かずともstd::arrayで範囲チェックできるだろ

267 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 01:58:25.77 ]
平松サイド  vs   橋下サイド

民主党         大阪市民
自民党          ν速民
共産党
財界
関西電力
連合
自治労
日教組
公務員
毎日新聞
MBS
解同
極左

大阪の敵が濃縮されてわかりやすくなったな


268 名前:265 [2011/12/30(金) 12:04:10.90 ]
サイズを省略するのはあきらめます。


template <class T, unsigned int N> struct Array {
T elements[N];
// コンストラクタデストラクタは書かない
T & operator [] (unsigned int n) {
if(n < N) return elements[n] else throw out_of_range("out_of_range");
}
// 以下略
} ;

int main()
{
Array<int,5> test = {1,2,3,4,5};


}
みたいにすると、
コンパイルされたクラスの テンプレート のインスタンス化 の参照を確認してください

といわれコンパイル通らないのはなぜでしょうか?

269 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 12:16:50.18 ]
MSVC2010 / C++

□使用可能なライブラリ
stl / boost / zlib / ライセンスがうるさくないものであればその他もOK

□やりたいこと
zipファイルの中身(主にファイル名)を列挙したいです。
その時に、なるべくwchar_tベースでの書庫ファイル指定や、ファイル名取得をしたいです。
zlib + minizip だと、char文字列でのやり取りしかできないように思います。

□質問
どんなライブラリをどういう感じで使うと実現できますでしょうか。

よろしくお願いいたします。

270 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 12:23:41.34 ]
charで格納された物は、ユニコードにならないんだよ。
ユニコードで格納された物はユニコードで取り出せる。
取り出しかたの問題ではないから工夫しても無理。



271 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 12:28:04.94 ]
shift+JISの方が好き

272 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 13:03:50.87 ]
EUCやSJISで格納された名前をwhar_tに変換して格納すれば良い。
zip読み取りルーチンとは関係なし。
UTF-16LEで格納されていればそのまま格納すれば良い。
格納時のエンコードの問題。

273 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 13:13:05.57 ]
VC++であるクラスを継承してメンバ変数を追加し=operatorをオーバーロードした時に
基底クラスのメンバーをコピーするのはどうやって記述すればいいんでしょうか?

class NewClass : public OldClass
{
public
int mNewMenber;
...
NewClass operator=(NewClass &nc){
/* 基底クラスのメンバーをコピー */
????????????????
mNewMember = nc.mNewMember;
return *this;
}


274 名前:273 mailto:sage [2011/12/30(金) 13:15:57.84 ]
ああ、基底クラスにも自身の=operatorが定義してあります。

275 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 13:27:13.08 ]
NewClass & NewClass::operator = (NewClass const & other) {
OldClass::operator = (other);
mNewMember = other.mNewMember;
return *this;
}

276 名前:デフォルトの名無しさん [2011/12/30(金) 13:41:19.18 ]
Visual C++ 2010 EEです。
std::swapのclass Cスペシャルを適用したまま、このエラーを消す方法はありますか?

template< typename A0, typename A1, typename A2 > class C;

// std::swapのclass Cスペシャル。※実際はもっと細かく特殊化をしているのでこの形式は崩せません。
namespace std{
template< typename A0, typename A1, typename A2 >
void swap ( C< A0, A1, A2 >& v0, C< A0, A1, A2 >& v1 ){ 略 }
};// namespace std

void func(){
typedef C< int, int, int > C_t;
std::vector< C_t > x;
std::vector< C_t > y( x.begin(), x.end() ); // error C2668: 'std::swap' : オーバーロード関数の呼び出しを解決することができません。
};

277 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 14:15:17.84 ]
>>268
> みたいにすると、
> コンパイルされたクラスの テンプレート のインスタンス化 の参照を確認してください
>
> といわれコンパイル通らないのはなぜでしょうか?
初期化子の書き方。
テンプレートを使っててもユーザー定義のコンストラクタをもたないクラスの初期化のやり方はかわらない。

struct S1 {
int a, b, c;
};

struct S2 {
int a, b[3], c;
};

struct S3 {
int a[3];
};

int main()
{
S1 s1 = {1, 2, 3};
S2 s2 = {1, {2, 3, 4}, 5};
S3 s3 = {{1, 2, 3}};
return 0;
}

278 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 14:23:28.26 ]
下のwhile文でbool_isがfalseなら以下行を読まずにwhileの先頭に戻りたいのですが、
簡単な方法はありませんか?
ifで括るとかだとちょっと長いんで・・・



while(i<max)
{
bool bool_is =hogehoge();

if(!bool)
{
i++;
以下の行を読まずにwhileの先頭に戻りたい。
}

etcetra....
i++;
}



279 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 14:26:08.90 ]
continue

280 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 14:41:22.84 ]
>>277
なるほど。では実際にこの配列を初期化して使うにはどうしたらよいのでしょう?



281 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 15:13:29.19 ]
>>280
新しめのコンパイラを使うといい
g++なら-std=c++0x



282 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 15:25:39.65 ]
>>280
ヒント
>>268でテンプレートArrayはArray<int,5>で

struct Array<int,5> {
int elements[5];
// コンストラクタデストラクタは書かない
int & operator [] (unsigned int n) {
if(n < 5) return elements[n] else throw out_of_range("out_of_range");
}
// 以下略
};

というクラスを定義する。メンバ関数を無視してみると…。

struct Array<int,5> {
int elements[5];
};

283 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 15:28:06.42 ]
>>276
class Cスペシャルのswapをstdでなくclass Cと同じ名前空間(だけ)に置く。

284 名前:281 mailto:sage [2011/12/30(金) 16:18:11.57 ]
>>280
すまん、よく読んだらバージョン関係ないな

>if(n < N) return elements[n] else throw out_of_range("out_of_range");
if(n < N) return elements[n]; else throw out_of_range("out_of_range");

セミコロンが抜けてるだけかと。

285 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 16:59:46.80 ]
openglで戦車のアニメーションを作っています
動きは前進、後退、その場での方向転換をキー操作で行いたいです

戦車自体が方向転換しても次に前進しようとした時に、ワールド座標系のX軸の向きに進むため
戦車が横滑りしてる感じになってしまいます
うまく移動→方向転換→移動をを実現するにはどうしたらいいでしょうか


286 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 17:07:56.55 ]
実物の戦車は横滑りするよ

287 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 17:08:15.37 ]
3Dプログラムできるのに方向転換すらできないとは。

288 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 17:10:33.85 ]
戦車ローカル座標でみた前方への移動ベクトルをワード座標に直すんだよ

289 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 17:12:28.23 ]
向いてる向きから進む距離を割り出せよ。北へ進むのがY+1で、北西ならX-1/√2 Y+1/√2 とかだろ。
cosθ、sinθであらわせるはずだろ。

290 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 17:16:10.66 ]
openglが扱えてここに書き込む時間があれば自己解決すると思うんだが。
難解な物理法則や、戦車特有の挙動などが関与してるのか?



291 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 17:22:54.86 ]
>>288,289
あー、戦車のローカル座標のX軸に進めることしか考えてなかったです
現在の向きから計算してやればいいのか
ありがとうございます、やってみます

292 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 18:39:35.50 ]
>>285です
やっぱりわかりません

glTranslatef(go*cos(Turn * PI / 180.0), 0.0,-go*sin(Turn * PI / 180.0) );// 平行移動
glRotatef( turn, 0, 1, 0 ); // Y軸回転

turnは回転の角度、goは前進した距離、Turnはgoが更新されたときに現在の回転の角度が入ります
原点から 方向転回→前進→方向転換 までできるんですけど
その後前進しようとすると、再び原点から方向転換した方向へ進み始めてしまいます
現在の位置を考慮しないといけないと思うのですが、うまく実装できません…

293 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 19:05:03.70 ]
>>292
戦車のモデルが +z を向いていて、Y軸回転がθだとすると、
戦車の方向ベクトルは(sinθ, 0, cosθ)となり
方向ベクトル*速度 * 経過時間 = 移動ベクトル

別な考え方では
戦車の向きベクトル = 戦車のワールド行列 * ベクトル(0, 0, 1)
あとは同様
戦車の位置+移動ベクトル=新しい位置

294 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 19:31:07.28 ]

朝日新聞は一時期300人のネット工作員をかかえ、反日工作していた。
捕まった編集者は49歳ですが、こんなカスでも1500万円の年収がもらえるんですよ。

Domain Information: [ドメイン情報]
a. [ドメイン名] ASAHI-NP.CO.JP
e. [そしきめい] かぶしきがいしゃ あさひしんぶんしゃ
f. [組織名] 株式会社 朝日新聞社

−「朝日新聞社は、とある思想やパラダイムに日本の世論を誘導する見返りに、中国から大量の資金を貰っている。」−
これはおそらく週刊誌さえ書けない。
「失語症躁鬱ニートは氏ねよ」【ネット】朝日新聞社員(49)ネットで荒らし行為、会社ごとアクセス規制へ 09.3



295 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 20:16:30.63 ]
>>285
戦車の頭のある位置 - 戦車の中心 = 戦車を中心を0とした時の方位ベクトル
方位ベクトルを正規化して x+y+z=1.0になるようにする
何故なら最大推力が1.0だから
そしたら今度は移動速度をそのベクトルに掛けて
戦車の中心座標に結果を加算する


296 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 21:36:15.20 ]
てんさいです

【東京都渋谷区】 12/31(土) 年忘れしてはならない!紅白さくら祭 みんなで「韓流紅白」をぶっ飛ばせ!
年忘れしてはならない!紅白さくら祭 みんなで「韓流紅白」をぶっ飛ばせ!

12時00分 渋谷駅ハチ公前広場 「街頭演説」(〜13時30分)
13時30分 移動
14時00分 渋谷公会堂前 「街頭演説」(〜14時45分)
15時00分 代々木公園・NHK横「イベント広場」
「年忘れしてはならない!紅白桜祭」
抗議集会・コンサート・炊き出し等々
盛りだくさんでお送りします!(〜21時00分)

297 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 23:25:43.79 ]
初歩的かもしれませんが
入力文字列const char* inputを文字コードの文字列として格納したいのですが
unsigned int len = strlen(input);
char* str = (char*)malloc(2*len + 1);
if(str){
for(unsigned int c = 0 ; c < len ; c++){
sprintf_s(&str[2*c],2,"%x",(char)input[c]);
}
str[2*len] = 0;
}
このようなコードだとsprintf_s関数でバッファが足りないと言われてしまいます
charを16進数で表示すると2Byteになると思うのですがなにか思い違いをしてるのでしょうか

298 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 23:31:16.40 ]
はい

299 名前:297 mailto:sage [2011/12/30(金) 23:34:57.26 ]
書き込んだ後に解決する法則
ヌル文字も数えろとのことですか、ぐぬぬ

300 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 23:51:08.09 ]
%02x



301 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 23:53:11.73 ]
%x も %02x も int になっちゃうから
引数キャスト (char) してもだめ


302 名前:デフォルトの名無しさん mailto:sage [2011/12/31(土) 00:10:22.70 ]
>>283
それも試しましたが、やはり名前の衝突は避けられず・・
結局自前のswapの名前を変えることで対応しました
なんかC++の限界を感じた・・どうもありがとうございました

303 名前:デフォルトの名無しさん mailto:sage [2011/12/31(土) 00:26:47.11 ]
まあ自分の限界を知るのは悪いことじゃないよ

304 名前:297 mailto:sage [2011/12/31(土) 00:31:45.74 ]
もしかして>>297のコードはinput[c]をunsigned charにキャストしないとマイナスの値に対してエラーになる?
とかなんとなく思った

305 名前:デフォルトの名無しさん mailto:sage [2011/12/31(土) 00:54:14.97 ]
正解おぬでとう

306 名前:297 mailto:sage [2011/12/31(土) 00:57:19.48 ]
やったね!
エラーが出なくなった時、人は優しくなれる

307 名前:デフォルトの名無しさん mailto:sage [2011/12/31(土) 09:25:35.25 ]
>302
これで VC++10 でコンパイル通るよ。っちゅうか std に置いたままでも通ってる。
まずはエラーが起こる最小コードから確認してみれば?

#include <vector>

namespace mine {

template<typename A0, typename A1, typename A2>
class C {};

template<typename A0, typename A1, typename A2>
void swap(C<A0,A1,A2> &c1, C<A0,A1,A2> &c2) {}

}

int main(void)
{
  typedef mine::C<int, int, int> C_t;
  std::vector<C_t> x;
  std::vector<C_t> y(x.begin(), x.end());
  return 0;
}


308 名前:デフォルトの名無しさん mailto:sage [2011/12/31(土) 17:24:15.70 ]

cp2.uh-oh.jp/read_img/index/ab83e09400ff17d99f45ceee15a37e09.jpg
cp2.uh-oh.jp/read_img/index/a58c2ddc9cdbe45529ef0d58c95cc232.jpg

テレビに騙されるな(自称街の人-台本読んでるだけの業者)


309 名前:デフォルトの名無しさん mailto:sage [2012/01/01(日) 02:44:43.53 ]
class Hoge
{
public:
int *count;
};

Hoge hoge =new Hoge[x];

こういう配列を作るとxの値によっては作った瞬間にエラーになってしまう場合があるのは何故ですか?
回避策はありませんか?

310 名前:デフォルトの名無しさん mailto:sage [2012/01/01(日) 02:45:47.14 ]
Hoge *hoge =new Hoge[x];
の書き間違いです。



311 名前:デフォルトの名無しさん mailto:sage [2012/01/01(日) 02:56:43.17 ]
> エラーになってしまう

なんで、エラーの内容を書こうと思わないんだろう…

お前がバカだからという回答でも期待してるのか?

312 名前:デフォルトの名無しさん mailto:sage [2012/01/01(日) 02:57:28.18 ]
try {
Hoge *hoge = new Hoge[x];
} catch (std::bad_alloc &e) {
std::cerr << e.what() << std::endl;
}

313 名前:デフォルトの名無しさん mailto:sage [2012/01/01(日) 04:22:28.69 ]
馬鹿には無理

314 名前:デフォルトの名無しさん mailto:sage [2012/01/01(日) 10:47:15.57 ]

K-POPの真実
89 名前:名無しさん@12周年[sage] 投稿日:2011/12/27(火) 18:42:50.71 ID:oPBf/MSP0
12月23日、東京国際フォーラムホールAで大国男児、X−5 、C-REAL、チェ・スジョンらが出演した『K-POP LIVE for X'mas 2011』が開催された。
しかし、ふたを開けてみれば2階はすべてクローズド、1階も後列は空席だらけと、さんざんな結果に終わった。

news.infoseek.co.jp/article/cyzowoman_27Dec2011_17759
    ↓    ↓    ↓

395 名前:山師さん@トレード中[] 投稿日:2011/12/27(火) 15:21:13.95 ID:E5FNgBRR0
K-POP LIVE for X'mas 2011
公演日:2011年12月23日(金)
会場:東京国際フォーラムホールA(収容人数5000人)
出演:大国男児 / X−5 / C-REAL / Yoonji

開演前
cdn-ak.f.st-hatena.com/images/fotolife/u/ukiukineko/20111224/20111224221655.jpg
cdn-ak.f.st-hatena.com/images/fotolife/u/ukiukineko/20111224/20111224221654.jpg

開演中
cdn-ak.f.st-hatena.com/images/fotolife/u/ukiukineko/20111224/20111224222054.jpg
補助金が尽きてガラガーラ テレビは捏造演出装置


315 名前:デフォルトの名無しさん mailto:sage [2012/01/01(日) 22:06:09.92 ]
std::unique_ptrの使い方を勉強してるのですが、単純にauto_ptrから書き換えていて躓きました。
引数として渡すときはわざわざ呼び出し側で f(std::move(p)) とするのが普通なのでしょうか?

それとも、

void f(std::unique_ptr<Hoge>& p)
{
 std::unique_ptr<Hoge> p_ = std::move(p);
}

とした方がいいのでしょうか?
この場合はどっちでもいいような気がするのですが、p_をクラスのメンバとするときに
呼び出し側にstd::moveを意識させた方がいいのかそれは冗長なのか教えてください。

316 名前:デフォルトの名無しさん mailto:sage [2012/01/01(日) 22:10:02.98 ]
pの所有権が誰にあるかによるだろ

317 名前:デフォルトの名無しさん mailto:sage [2012/01/01(日) 22:20:56.43 ]
もちろん、呼び出された側にあります。
想定しているのは、

class Hage
{
public:
 std::unique_ptr<Hoge> p_;
 Hage(std::unique_ptr<Hoge> p) : p_(std::move(p)) { }
};

class Mage
public:
 std::unique_ptr<Hoge> p_;
 Mage(std::unique_ptr<Hoge>& p) : p_(std::move(p)) { }
};


new Hage(std::move(p1));
new Mage(p2);


HageとMageどちらがいいのかなと思いまして。
auto_ptrの使い方を踏襲するのなら、Mageですが呼び出し側に移譲を意識させるのならHageの方が
いいような気もしています。

318 名前:デフォルトの名無しさん mailto:sage [2012/01/01(日) 22:24:27.04 ]
class Hage
{
public:
 std::unique_ptr<Hoge> p_;
 Hage(std::unique_ptr<Hoge>&& p) : p_(std::move(p)) { }
};
所有権を移動させるなら
俺ならこうする

319 名前:デフォルトの名無しさん mailto:sage [2012/01/01(日) 22:44:57.90 ]
まあ普通に考えたらそれしかない

320 名前:デフォルトの名無しさん mailto:sage [2012/01/02(月) 03:12:05.20 ]
Hage(std::unique_ptr<Hoge>& p) : p_(p.release()) { }

auto_ptrを踏襲するならこれでもいいだろうが
どちらにしろ>>317はないな



321 名前:デフォルトの名無しさん mailto:sage [2012/01/02(月) 17:15:58.39 ]
みんな健康でいいね。

322 名前:デフォルトの名無しさん mailto:sage [2012/01/03(火) 00:30:28.40 ]
hoge.h内

extern int hoge[];


hoge.cpp内

int hoge[] = {0,1,2,3,4};

として、
main.cpp内で
int size = sizeof(hoge)/sizeof(hoge[0]);として配列の要素数を求めたいのですが、
これが使えません。
初期時に要素数を指定しないのはそのままにmain.cppで配列の要素数を求める方法を
教えてください、



323 名前:デフォルトの名無しさん mailto:sage [2012/01/03(火) 00:32:39.73 ]
無理です

324 名前:デフォルトの名無しさん mailto:sage [2012/01/03(火) 00:36:00.92 ]
無理なのですかあ。残念

325 名前:デフォルトの名無しさん mailto:sage [2012/01/03(火) 00:39:55.69 ]
sizeof(hoge)/sizeof(int)

326 名前:デフォルトの名無しさん mailto:sage [2012/01/03(火) 00:51:40.59 ]
それコンパイルとおらんやろ

327 名前:デフォルトの名無しさん mailto:sage [2012/01/03(火) 01:04:17.85 ]
>>325
要素数求めるなら、分母はhoge[0]の方がよくね?

328 名前:デフォルトの名無しさん mailto:sage [2012/01/03(火) 01:06:51.78 ]
PS2のゲームなのにPS1並のグラだろ
察しろよ

329 名前:デフォルトの名無しさん mailto:sage [2012/01/03(火) 18:12:10.00 ]
>>322
// hoge.h
extern int const yousosuu;

// hoge.cpp
extern int const yousosuu = sizeof(...

330 名前:デフォルトの名無しさん mailto:sage [2012/01/04(水) 23:54:07.38 ]
DXライブラリ(DirectX)やGLUT(OpenGL)って、グローバルな環境変数的な何かを使っているからか、
ウィンドウを一つしか用意できない「っぽい」んですよね。

今回の例に限らず(というかこの例はイケてないかな)、
『グローバル変数を利用するスレッドセーフではない』ライブラリを、
複数箇所から安全に利用する方法として、
使いたい人がサンドボックス的な他に影響を及ぼさない場所を用意して、
その中にライブラリを展開して、
サンドボックス名.普通の使い方、とか、サンドボックス名::普通の使い方、みたいなことって出来ませんか?

今現在あるネーム空間を無理やり他のネーム空間に突っ込む、ということが出来れば解決なのですけど。
接頭を付加できるって聞いたことないし、試してみてもうまくいかないっぽい。

言いたいことを書けているかな…。日本語が不自由で申し訳ない。



331 名前:デフォルトの名無しさん mailto:sage [2012/01/05(木) 02:11:48.57 ]
ttp://toro.2ch.net/test/read.cgi/tech/1324704285/381
Javaスレでも質問したのですけど、↑についてお願いできますか?
C++の場合はどうなのでしょうか?

332 名前:デフォルトの名無しさん mailto:sage [2012/01/05(木) 02:41:57.09 ]
Objectの実装にもよるし
コンパイラにもよる

333 名前:デフォルトの名無しさん mailto:sage [2012/01/05(木) 09:04:05.51 ]
>>330
ライブラリをDLLでビルドして適当なnamespace内の関数ポインタに各種関数をロード

334 名前:331 mailto:sage [2012/01/05(木) 13:12:32.62 ]
>>332
ありがとうございます。

もう一件、Javaも知っている方とかに聞きたいのですけど、
C++の名前空間とJavaのパッケージとの違いですが、
・名前空間には直接変数を宣言できる
・protectedについて、Javaは同一パッケージでpublic、C++は同一名前空間でも継承が無いとprivate
みたいな感じで、ほとんど同じと考えていいのでしょうか?
C++もJavaもあまりわかってないのですが…。

335 名前:デフォルトの名無しさん mailto:sage [2012/01/05(木) 15:10:56.67 ]
>>331
Javaの場合は同じなんじゃないの。
C++はデストラクタの挙動がちがってくると思うけど。

336 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 06:45:15.80 ]
>>331
javac 1.6.0_26 で確認したら全く同じになった
C++の方も一応説明すると

Object hoge;
引数無しのコンストラクタ呼び出し

hoge = ...;
代入演算子の呼び出し

Object hoge = ...;
... を引数としたコンストラクタ呼び出し

になるから、実装による

337 名前:デフォルトの名無しさん [2012/01/07(土) 17:37:13.94 ]
C/C++を一通り勉強してそれなりのWindowsの
アプリも作成できるようになり、今はC#で色々
作ったりしてるんですが、あらためて疑問に思うのは
C++のstd::endlってどういう利便性があるのでしょうか?
いっつも、"\n"で終わらしてたんですが
end lineの略なんだろうけど、いまだにわかりません。
教えてください。

338 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 18:11:55.44 ]
一応出力バッファのフラッシュも兼ねる
が、たいていの環境は行バッファリングなんで改行すればフラッシュされるので違いが見えなくなる

339 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 19:51:12.89 ]
B* b = new C();
最近Javaを学んでいたので、ついうっかり↑の書き方をしたら特に問題なく動きました。
C++的にこの書き方はありでOKですか?
B* b = new C;って書くのが筋で、止めた方がいいとかあります?むしろ()付がいい?
過去に、C c()って書くと関数の宣言にされるのを知らずに凄く悩んで、引数なしの場合は()をつけないものと思ってたのですが。
new C と書こうが、new C() と書こうが、Cの文法には触れないのでどっちでもいいのかな。
むしろ、C c()が無理なのは、Cを引きずってるからなのかな。
日本語に出来てるか心配ですが、エスパーしてもらってもいいですか?

340 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 19:54:16.61 ]
ふつうnewを使わないんじゃ。。



341 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 19:56:29.29 ]
どっちでも同じ

342 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 19:57:08.47 ]
しかもアスタつけないでそ

343 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 20:04:28.62 ]
=を使うな
B * p(new B());
と書くのが唯一の正解だ

344 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 20:05:18.80 ]
>>343
どっちでも一緒じゃん

345 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 20:18:02.66 ]
違う

346 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 20:21:11.18 ]
>>343はいちいち全部
int a(1);とか書いてるのか
バカなやつだ

347 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 20:30:30.13 ]
>>346
普通そう書くよ
hoge h(aaa);
int i = 999;
こういうふうに混在してたら見た目悪いだろ

348 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 22:22:31.10 ]
じゃあ、あったまいいお前らにきく

Hogeクラスのオブジェクトkusohogeを初期化値1で生成するとき、

Hoge kusohoge(1);

以外に書き方があるのか?

349 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 22:25:00.24 ]
Hoge kusohoge{1};

350 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 22:26:53.08 ]
Hoge hoge;
hoge.Init(1);



351 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 22:36:05.61 ]
意外にあるんだな。。

>>349
言語使用上、(と{が区別なく使えるってことか?
それとも、
Hoge kusohoge(1);
Hoge kusohoge{1};

は、言語仕様上も違い意味になるのだが、この場合に限っては
結果が同じになるという意味?

>>350
たしかに、これはあるな
むしろ、順当な書き方と言えるな

オブジェクト変数名に、あたかも関数のように()が
つく表記の方が、はじめ見たときは違和感を感じた

352 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 23:15:38.73 ]
>>348
Hoge hoge = 1;

353 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 23:17:58.59 ]
>>337
CRLF、Multibyte-charの緩衝とか

354 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 23:22:40.91 ]
CRLFは関係なくないか

355 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 23:26:51.23 ]
endlはついでにフラッシュすんだよ

356 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 23:27:58.95 ]
crc32を計算したいのですが、ネット上に落ちているコードを比べてみても、
2パターンあるみたいで、どれが正しいのか分かりません。

データ: "a" (1バイト

boostとか、あとは動的にテーブルを生成しているタイプのコード
(テーブルは 0x00000000, 0x77073096, で始まるようです)
crc32: 0xe8b7be43

0x00000000, 0x04C11DB7 で始まるテーブルを持つコード
crc32: 0x19939b6b

ttp://blog.goo.ne.jp/masaki_goo_2006/e/69c68a18c872338e8c2751d662706f46

これらは何が違うのでしょうか?

357 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 23:29:38.63 ]
アルゴリズムスレへどうぞ

358 名前:デフォルトの名無しさん mailto:sage [2012/01/08(日) 01:58:12.32 ]
アルゴリズムスレ落ちたままなんだな
まあwikipediaでもみればいいんじゃないか

359 名前:デフォルトの名無しさん [2012/01/08(日) 07:55:56.97 ]

int get_int()
{
  int i = 1;
  return i;
}

void func_int(const int* p)
{
  int i = *p;
  std::cout << "i: " << i << std::endl;
}

void main()
{
   func_int( &get_int() ); // error C2102: '&' に左辺値がありません。
}

  get_int() の返す int の一時オブジェクトのポインタを func_int() に渡したいのですが,
どうやれば良いでしょうか?


360 名前:デフォルトの名無しさん mailto:sage [2012/01/08(日) 07:59:49.48 ]
関数が返すのは「値」であって、「変数」を返すわけではない。



361 名前:デフォルトの名無しさん mailto:sage [2012/01/08(日) 10:11:39.78 ]
>>359
> get_int() の返す int の一時オブジェクトのポインタを func_int() に渡したいのですが,

そもそもなんでそんなことしたいのさ。

int の一時オブジェクトとやらがあるのかどうかは知らんけど、仮にあったとしても func_int( ) に
渡った時点でそのオブジェクトは消えてるかもしれないよ。

「一時」オブジェクトなんだし。

362 名前:デフォルトの名無しさん mailto:sage [2012/01/08(日) 10:52:02.73 ]
>一時オブジェクトのポインタ

そんな邪悪なものは封印すべきだ

363 名前:デフォルトの名無しさん mailto:sage [2012/01/08(日) 10:58:58.24 ]
一次オブジェクトへのポインタ(あるいは参照)は普通に使うでしょ
無理やりmoveっぽいことを書きたい時とかに使う

364 名前:デフォルトの名無しさん mailto:sage [2012/01/08(日) 11:01:58.72 ]
>>359
この例だと、わざわざポインタ渡しするメリットが全くない。
多分、実際のコードではもっと大きなオブジェクトを渡していて
コピーのコストが心配なんだろうけど、最近のコンパイラは
こんな単純なケースでいちいちコピーなんかしないから値を返しても問題ない。
これでも読んどけ。
cpp-next.com/archive/2009/08/want-speed-pass-by-value/

365 名前:デフォルトの名無しさん mailto:sage [2012/01/08(日) 11:05:52.26 ]
>>363
>無理やりmoveっぽいことを書きたい
そんなことはコンパイラが勝手にやる。

366 名前:デフォルトの名無しさん mailto:sage [2012/01/08(日) 12:10:12.15 ]
>>363
参照とポインタを一緒にされてもなぁ

367 名前:デフォルトの名無しさん mailto:sage [2012/01/08(日) 12:23:48.54 ]
>>365
返り値に関してはコンパイラ任せでいいだろうけど
それじゃテンポラリを関数の引数に渡せないじゃん
hoge.swap(MakeHoge());
みたいなことをするにはコンパイラの力だけじゃできない
hoge.swap(MakeHoge().GetRef());
こういうふうに明示的に参照を返さないとね

368 名前:デフォルトの名無しさん mailto:sage [2012/01/08(日) 12:33:24.07 ]
int& get_int( int i = 0 )
{
  i = 1;
  return i;
}


369 名前:デフォルトの名無しさん mailto:sage [2012/01/08(日) 12:50:41.24 ]
自動変数の参照返してどうすんだ

370 名前:デフォルトの名無しさん mailto:sage [2012/01/08(日) 12:54:52.93 ]
一次オブジェクトのアドレスワラタ
それを仮に取ったとして、直後に大抵解体されてしまうから
無意味で危険なアドレスになっちまうよな

constの参照は一次オブジェクトを束縛出来るんだっけ



371 名前:デフォルトの名無しさん mailto:sage [2012/01/08(日) 13:11:14.91 ]
できる

372 名前:デフォルトの名無しさん mailto:sage [2012/01/08(日) 13:35:58.42 ]
皆さんレスありがとうございます.

 すいません.質問用に単純化したので,実際には get_int() は _strtoui64() で ulonglong を返します.
func_int() は自作の,set_datas() という値をclassのメンバに設定する関数で,ポインタ引数を複数持ち,
NULLが設定されていない引数をメンバに設定します.

//member func
void set_data(const POINT* ppoint, const FILETIME* ptime, const ULONGLONG* pID)
{
  if( ppoint ) m_point = *ppoint;
  if( ptime  ) m_time = *ptime;
  if( pID   ) m_point = *pID;
}

 例えば POINT get_point() や FILETIME get_time() のような構造体を返す場合は,一見すると問題なくできたのに,
ulonglong を返す場合にエラーとなってしまったので質問させて頂きました.

set_data( &get_point(), &get_time(), &_strtoui64("1",NULL, 10 ) );

 この場合,get_point(), get_time() の返す一時オブジェクトは, set_data() が終了するまで生きていると考えたのですが,
認識が間違っていたでしょうか?

template<typename T>
inline const T* GetPtr(const T& in)
{
  return ∈
}

set_data( &get_point(), &get_time(), GetPtr( _strtoui64("1",NULL, 10 ) ) );

↑また,先ほど思いついたのですが,この方法は問題がありますか?

373 名前:デフォルトの名無しさん mailto:sage [2012/01/08(日) 13:51:16.73 ]
構造体を返す関数は実装上は呼び出し側で一時オブジェクトを用意してそのアドレスを関数に渡すということをやってるから
そんな実装依存オブジェクトの生存期間なんか知ったこっちゃない

374 名前:デフォルトの名無しさん mailto:sage [2012/01/08(日) 14:13:46.62 ]
>>372
言語仕様上、get_point()内で確保された一時オブジェクトは、
get_point()終了時に破棄される。
現実にはメモリ内には一時オブジェクトがそのまま残っていて
利用できることがあるが、あくまで偶然。

375 名前:デフォルトの名無しさん mailto:sage [2012/01/08(日) 14:46:47.67 ]
どうしてもポインタで渡すしかないならconst参照で引っ張ってみるトカ
const POINT& p = get_point();
const FILETIME& f = get_time();
const ULONGLONG& n = _strtoui64("1",NULL, 10 );
set_data( &p, &f, &n );

376 名前:デフォルトの名無しさん mailto:sage [2012/01/08(日) 14:49:41.65 ]
変数作るなら普通に受け取れよ
VC++でもgccでも警告だぞそれは

377 名前:デフォルトの名無しさん mailto:sage [2012/01/08(日) 15:30:47.58 ]
なんかもう、C言語で書かれた関数を無理やりC++で流用してるせいで
参照の意味で使われている(C言語の)ポインタ渡しをただただ勘違いしてるという気がしないでもない。

378 名前:359 mailto:sage [2012/01/08(日) 17:48:54.81 ]
皆さん有難う御座います.

指摘の通り const 参照の時の寿命と同じようになるものだと勘違いしていたようです.

VisualC++ 2010 Express でやっていたのですが,warning level 4 にしたら
&get_point(), &get_time() の部分でも warning C4238 が出るようになりました.
Microsoft の独自拡張で問題なく動いたように見えたのでしょうか?

>>375 さんのやり方も参考にしながら,仕様変更も含めてもう一度考えたいと思います.

今回は勉強になりました.ありがとう.

379 名前:デフォルトの名無しさん mailto:sage [2012/01/09(月) 10:22:44.32 ]
Visual Studio 2010 です
C++では、クラスのメンバ変数に文字列の定数は宣言できない仕様、ですが
自分は、良くない仕様だと思うのですが、みなさんはどう思われますか?
また。文字列の定数をクラスのメンバ変数で宣言する、裏技はありませんか?

380 名前:デフォルトの名無しさん mailto:sage [2012/01/09(月) 10:36:28.86 ]
const char* str;とか宣言しといてコンストラクタで : str("aaa")とかすればいいんじゃないの?



381 名前:デフォルトの名無しさん mailto:sage [2012/01/09(月) 11:31:27.24 ]
>>380
ありがとう。コンストラクタでは、宣言できるんですね。

382 名前:デフォルトの名無しさん mailto:sage [2012/01/09(月) 11:37:15.29 ]
static char const str[]; でいけるでしょ。定義はクラス外に分けないといけないけど。

383 名前:デフォルトの名無しさん mailto:sage [2012/01/10(火) 12:27:22.64 ]
const char * str() const {return "foo";}

384 名前:デフォルトの名無しさん [2012/01/10(火) 15:38:40.14 ]
std::listで後ろの方の要素を前に持ってきたいときはどうすればいいですか?
例えばこんな感じです。

std::list<int> ls;
ls.push_back(1);
ls.push_back(2);
ls.push_back(3);
ls.push_back(4);
ls.push_back(5); 先頭(1)-(2)-(3)-(4)-(5)終わり
となってるところで、先頭(1)-(4)-(2)-(3)-(5)終わり、とやりたいです。
単純にリンクの張替えで出来ると思ったのですが、やり方がわかりません。



385 名前:デフォルトの名無しさん mailto:sage [2012/01/10(火) 15:49:05.46 ]
std::list<int>::iterator pos2 = std::find(ls.begin(), ls.end(), 2);
std::list<int>::iterator pos4 = std::find(ls.begin(), ls.end(), 4);
assert(pos4 != ls.end());
ls.splice(pos2, ls, pos4);

386 名前:デフォルトの名無しさん [2012/01/10(火) 15:55:28.13 ]
すげえ。。
ありがとうございました。


387 名前:デフォルトの名無しさん [2012/01/10(火) 23:39:37.95 ]
リンクの付け替えとはとても思えないインターフェイス
これは洗練されているというべきなのか。

388 名前:デフォルトの名無しさん mailto:sage [2012/01/11(水) 03:53:25.45 ]
corutineの実装がいろいろあるけど
(Hamigakiとか)
GPUを使うOpenCVとかと混ぜたらうまく動かないってことでいいのでしょうか


389 名前:デフォルトの名無しさん mailto:sage [2012/01/11(水) 06:58:34.14 ]
コルーチンってC#のyield returnみたいな構文が必要じゃね

390 名前:デフォルトの名無しさん mailto:sage [2012/01/12(木) 09:26:37.71 ]
非同期のMessageBoxを作って、タイムアウトしたら自動で閉じるなどの機能を実装しようと思っています。
自分で作ったウィンドウではなく、MessageBox関数を利用します。

そこでMessageBoxのウィンドウハンドルを取得したいのですが

1 CreateThreadで別スレッドを作成
2 別スレッドがMessageBox呼び出し
3 メインスレッドがEnumThreadWindowsで別スレッドのウィンドウを列挙
4 GetWindowTextでタイトル照合
 タイトルが一致するウィンドウがなければ3に戻る
5 取得したウィンドウハンドルは、タイムアウトしたらWM_CLOSEを送るなどに使用

CreateThreadで作成されたスレッドは
IMEが作ったウィンドウや、タイトルのないウィンドウが
あらかじめ作られているようで
タイトルによってはそれらと一致してしまうので
この手段が不確実です。

ウィンドウを列挙したり、文字列を比較するというのも
かなり無駄が多いです。

このような原始的な方法しか思いつかないのですが
他になにか良い方法はないでしょうか。



391 名前:デフォルトの名無しさん mailto:sage [2012/01/12(木) 09:42:36.84 ]
タイトルを比較するのではなくウィンドウクラス名を調べればいい
メッセージボックスのウィンドウクラス名は #32770 になってるから1発でわかる
クラス名はGetClassNameで取れる

392 名前:デフォルトの名無しさん mailto:sage [2012/01/12(木) 09:47:09.02 ]
MessageBoxTimeoutというUndocumented APIが存在するから困る

393 名前:デフォルトの名無しさん mailto:sage [2012/01/12(木) 09:50:24.76 ]
MessageBoxを使うタイムアウト付きメッセージボックスのコードはMSが公開していたりする
support.microsoft.com/kb/181934

394 名前:デフォルトの名無しさん mailto:sage [2012/01/12(木) 10:33:38.43 ]
void *に変換したら配置されてるメモリの先頭アドレスになるって保証ある?

395 名前:デフォルトの名無しさん mailto:sage [2012/01/12(木) 10:38:49.79 ]
>>394
何を言っているのかわからない。
int*をvoid*に変換したとき、intの2バイト目や3バイト目じゃなく
先頭を指すアドレスが得られるのか?ということか?

396 名前:390 mailto:sage [2012/01/12(木) 12:02:26.01 ]
>>391 この方法を試してみたいと思います
>>392 MessageBoxTimeoutはどのような動作をするのですか?
>>393 この方法では非同期が実現できなそうです

397 名前:デフォルトの名無しさん mailto:sage [2012/01/12(木) 12:10:32.89 ]
CSub* sub = new CSub;
CBase* base = sub;
void* p = (void*)base;
としたときに sub == pになるかってことじゃね

398 名前:デフォルトの名無しさん mailto:sage [2012/01/12(木) 12:13:01.75 ]
>>396
MessageBox を非同期化するのと同じ手法が使えないの?

399 名前:390 mailto:sage [2012/01/12(木) 12:39:24.61 ]
>>398 393とCreateThreadを組み合わせるということですか?
とりあえず、393は制限時間が未定の場合に対応できなそうです。

例えば次のような状況です。

1 ファイルのコピーを開始
2 ユーザーがキャンセルを押す
3 キャンセルしますか? の非同期メッセージボックスを表示
4 ユーザーが押す前にコピーが終わってしまった
5 キャンセルしますか? を自動で閉じて、コピーが終了しましたと表示

400 名前:デフォルトの名無しさん mailto:sage [2012/01/12(木) 12:51:46.50 ]
>>399
タイムアウト型 (開く前に時間を決めておいて 経過時間が過ぎたら勝手に閉じる)
と別イベント型 (入力操作とは別になんらかのイベントを受けて閉じる)

両方が機能できるような MessageBox が欲しいということですかい?



401 名前:390 mailto:sage [2012/01/12(木) 13:15:06.61 ]
まずはメッセージボックスを閉じるclose()というようなメソッドを実装しようとしています。
タイムアウト型もイベント型もこれを呼び出すことで実装したいです。

402 名前:390 mailto:sage [2012/01/12(木) 13:38:21.79 ]
>>391 この方法で、ウィンドウの判別ができました。
自分が作成したスレッドで、他にメッセージボックスがないことは確実なので
誤認することはなさそうです。
ありがとうございました。

しかし、依然としてウィンドウの列挙と文字列比較には変わりありません。

問題を整理してみます。

A 非同期でメッセージボックスを表示する
→CreateThreadで作成したスレッドからMessageBoxを呼ぶ

B タイムアウト、外部イベント、またはプログラム内から能動的にMessageBoxを閉じる
→MessageBoxを閉じるメソッドの実装

C MessageBoxを閉じるメソッドの実装
→ハンドルを取得して、WM_CLOSEを送る

D ハンドルの取得方法
→スレッドウィンドウを列挙して、クラス名を比較する

Aに問題はなさそうです。

BとC自体に問題はないと思いますが、Dに無駄が多いので、
ハンドルを取得せずに、MessageBoxをメインスレッド閉じる方法があれば知りたいです。

または、Dのハンドル取得方法でもっとスマートなものがあればと思います。

403 名前:デフォルトの名無しさん mailto:sage [2012/01/12(木) 14:04:01.96 ]
SetWindowsHookEx(WH_CALLWNDPROCRET, CallWndRetProc,
でフック仕掛けて
CallWndRetProcでWM_INITDIALOGを監視する

404 名前:デフォルトの名無しさん mailto:sage [2012/01/12(木) 14:50:20.44 ]
Cのsscanfって、大文字小文字を無視する設定ってできないんでしたっけ?
sscanf(str, "ID%d", &id");
などとするとき、"ID100"からも"Id100"からも100を取り出したいのですが。

405 名前:デフォルトの名無しさん mailto:sage [2012/01/12(木) 15:09:48.77 ]
id = atoi(&str[2]);

406 名前:デフォルトの名無しさん mailto:sage [2012/01/12(木) 15:20:32.89 ]
条件分枝構文って
if else
swich
しかないのでしょうか
boostやstlでもっと複雑なことのできる条件分枝はないのでしょうか

407 名前:デフォルトの名無しさん mailto:sage [2012/01/12(木) 15:25:24.11 ]
どんな複雑なことがやりたいんだ

408 名前:デフォルトの名無しさん mailto:sage [2012/01/12(木) 15:26:08.52 ]
あるよ
関数のオーバーロードやtemplate特化も条件分岐構文の一種
boostはこれらの条件分岐を駆使してとても複雑

409 名前:デフォルトの名無しさん [2012/01/12(木) 16:11:47.59 ]


2chやニコニコ動画に民主党から反日工作費が流れていることが知られるようになってきた。
民主党が用意した資金で工作員が2chを荒らしていることもだんだんと知られるようになってきた


410 名前:デフォルトの名無しさん mailto:sage [2012/01/12(木) 20:26:40.40 ]
質問です。
同じ名前で引数が異なるローカル関数って作れますか?

hoge(enum hoge);
hoge(int hoge);



411 名前:デフォルトの名無しさん mailto:sage [2012/01/12(木) 20:38:01.35 ]
ローカル関数とは何のことを指しているのか
Cでの話なのかC++での話なのか
はっきりしてくれ

412 名前:デフォルトの名無しさん mailto:sage [2012/01/12(木) 20:38:54.87 ]
そこで出てくるのがintとenumとか、分かってて聞いてる気がしてならない

413 名前:デフォルトの名無しさん mailto:sage [2012/01/12(木) 22:11:17.80 ]
ローカル関数てなんだ?
関数のオーバーロードなら
C++で普通に出来ます。

414 名前:デフォルトの名無しさん mailto:sage [2012/01/13(金) 06:53:45.81 ]
ローカル関数:関数内関数のこと。C++では作れない。

c-production.com/contents/c/sec08.html
プロトタイプ宣言:
グローバル領域で宣言すればグローバル関数となりどこからも呼出し可能
ほかの関数内で宣言すればローカル関数となりその関数内でのみ呼出しができる

↑みたいに書いてあるサイトがあるけど規格票にそんなことかいてあったっけ?

415 名前:デフォルトの名無しさん mailto:sage [2012/01/13(金) 08:25:23.68 ]
gcc拡張切ってから喋れボケ

416 名前:デフォルトの名無しさん mailto:sage [2012/01/13(金) 08:39:22.53 ]
void func(void) {
struct { void operator () (void) {} } local ;
local();
}

417 名前:デフォルトの名無しさん mailto:sage [2012/01/13(金) 10:05:20.06 ]
うげ gcc拡張だったとわ。
知らんかった。

418 名前:デフォルトの名無しさん mailto:sage [2012/01/13(金) 11:37:09.75 ]
>>414
グローバルな宣言がなくローカルに宣言した関数は、その関数からしか
#ifdef __cplusplus
呼べない。
#else
プロトタイプの適用が行なわれない。
#endif

419 名前:デフォルトの名無しさん mailto:sage [2012/01/13(金) 11:56:02.25 ]
C++はもともとローカル関数は作れないし
C言語はプロトタイプ宣言不要だよ?
ローカル関数なんて言葉もなかったような…

420 名前:デフォルトの名無しさん mailto:sage [2012/01/13(金) 12:15:05.78 ]
完全にnothrowでSTLの代替になって著作権にうるさくないC++ライブラリってありますか?



421 名前:デフォルトの名無しさん mailto:sage [2012/01/13(金) 13:36:42.82 ]
>>419
規格には記載ないな
きっと local function definitions are illegal を ローカル関数の定義が正しくありません。 と訳したVC++の所為

422 名前:デフォルトの名無しさん mailto:sage [2012/01/13(金) 19:25:41.78 ]
どうしたらこのスレに書かれてることを理解できるレベルに到達できますか?
初心者向けの本は勉強したけど、全然わかりません。
やさしいC++をひと通りコード書いて理解しました。

int main(void)

とか、int main の中に何か入ってるものは何を意味してるのか分からないし
operator関数も難しいです。

423 名前:デフォルトの名無しさん mailto:sage [2012/01/13(金) 19:48:10.47 ]
他人が書いたソースを読むことだな
とりあえず自分が興味ある分野のソースを見てみたらいい

424 名前:デフォルトの名無しさん mailto:sage [2012/01/13(金) 21:01:01.85 ]
>>423
いや、voidの意味から分からん言ってるなら、ロベールが先だろ


425 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 00:13:21.94 ]
>>420
g++ で -fno-exceptions をつけるとかじゃダメなの?

426 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 01:06:12.81 ]
野田改造内閣に早速疑惑浮上

@aritayoshifu 有田芳生
捜査当局が内偵を続けている農水疑惑。詳細な怪文書まで出回っている。3億円の
行方はどこに?

@minorucchu ジャーナリスト 田中稔
野田改造内閣を揺るがす、農水省3億円スキャンダルの怪文書。二人の議員名が浮上。
34分前 webから
https://twitter.com/#!/minorucchu/status/157687110562881537

鹿野と筒井らしい
自公は問責も視野に調査開始だって

427 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 01:08:50.29 ]
std::cout << "ほげ";
std::wcout << L"ほげ";
JavaからJNI(Java Native Interface)でc++のコードを使っていて、
デバッグ用にcoutを使ったら文字化けしてしまいました。

もしかしてコーディングが違うのでは?とか思いました。
調べてもよくわからないのですけど、おそらくJavaが用意したコンソールは、UTF16のビッグエンディアンなんじゃないかなと思いました。
なので、L"ほげ"というのをBigエンディアンに出来ないでしょうか?

LってのがLittleだったら、神がかってるなと思って、B"ほげ"にしてみたらやっぱだめでした。
Localeなのかな。
std::wcout.imbue()付近で調べればわかりますかね?

428 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 01:22:56.59 ]
>>427
エスパースレで聞いたほうがいい

429 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 03:08:09.92 ]
LはLongだろ

430 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 14:00:04.10 ]
どこのC++かは知らんが、VC++を使っているなら、
ShiftJIS(を独自拡張したCP932)しか使えないから。
文字列としてUTF16LEを受け入れたり内部で取り扱ったりすることはできるけど
localeを経由すると必ずCP932になる。wchar_tに格納していてもCP932になる。
なぜならlocaleがunicode出力を受け付けないから(仕様)。ハゲワラ。



431 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 14:01:54.22 ]
ごめん、UTF16LEじゃなくてUTF-16BEだったなw ま、これがUTF-32でもUTF-8でもいっしょだ。
localeを経由しないAPIかcharを使ってバイナリでごりごり出力するかどっちかだ。
あと、コンソールもUnicodeモードにしないとだめだぞ。

432 名前:デフォルトの名無しさん [2012/01/14(土) 14:05:30.65 ]
windowsの問題というよりwindows日本語版の問題な。


433 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 14:13:22.67 ]
>ShiftJIS(を独自拡張したCP932)しか使えないから。

馬鹿は休み休み言え

434 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 14:14:23.39 ]
>>427
L は Letteral

435 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 14:32:16.79 ]
休み 休み 言って見ましたw

436 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 14:35:08.33 ]
>>432
Windows日本語版の問題?
うんにゃ。localeライブラリを自力で記述すればちゃんと動くよ。
VC++のlocaleがUnicodeを受け付けないのが問題なだけ

437 名前:デフォルトの名無しさん [2012/01/14(土) 16:03:26.59 ]
>>423
他人が書いたソースが読めない場合は…
まだ基礎力が足りていないんだと思うけど、一応初心者用の本をひと通り勉強したから
ここからステップアップするには何が必要なんだろうかなと
他人が書いた"易しめ”のソースが、どこかで見られたら良いなと思うんですけど
そういう場所や参考書は無いですか?

438 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 16:22:39.21 ]
まずはアンカーの付け方とsage方を勉強しなさい

439 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 17:25:57.60 ]
>>437
初心者用の本を読み終われば、他人のコードも読めるようになっているはず。
まだならば、読み切れていない。

知らない単語・関数があるのならば、リファレンス本(or Web)を使え。

440 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 17:42:18.61 ]
>>439
リファレンス読んでみます。
オススメの初心者用の本を教えて下さい




441 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 18:48:59.22 ]
codepad.org/N8er8eMm
8行目が4,3,2,1,0,になって欲しいんだけどなんでこうなっちゃうか教えて欲しい
コピーコンストラクタが悪いんだろうけど何がおかしいのかわからなくて困ってる

442 名前:441 mailto:sage [2012/01/14(土) 19:00:36.48 ]
>>441は解決しました
スレ汚しすみませんでした

443 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 20:32:10.91 ]
class Interface {
public:
virtual void Release(void) = 0;
};

class Hoge : public Interface {
public:
void Release(void) { delete this; }
};

extern "C" __declspec(dllexport) IHoge * __stdcall Create(void) {
return new (std::nothrow) IHoge;
}

---------------

extern "C" __declspec(dllimport) IHoge * __stdcall Create(void) ;


これってDLLとEXEでvtableの構成が変わっちゃうかも、とか気にしなくていいの?

444 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 20:32:43.86 ]
×Interface
○IHoge


445 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 21:31:49.20 ]
>>443
vtblのレイアウトはWindowsでは決まっている(そうじゃないとCOMが動かない)

446 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 21:49:50.45 ]
>>445
なるほど
VC++やOSのバージョンは特に気にしなくていいということですかね
安心しました

447 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 23:20:13.66 ]
#ifdef HAVE_CPP11
とか
#ifdef HAVE_CPP0X
みたいなことってできないの?

448 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 23:26:58.33 ]
www.google.co.jp/search?q=__cplusplus+%92%E8%8B%60%8D%CF%82%DD%8E%AF%95%CA%8Eq+%22c%2B%2B0x%22
かな

449 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 01:25:48.99 ]
VisualStudio2010みたいな中途半端なc++11の為に
HAVE_LAMBDAとかHAVE_DECLETYPEとかほしいな

450 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 02:02:08.21 ]
コンパイルエラーを捕まえて処理できる構文とかあればいいのにね

template <class X> void my_swap(X & a, X & b) {
STATIC_TRY { a.swap(b); }
STATIC_CATCH { std::swap(a, b); }
}
// a.swap(b)がコンパイルエラーならstd::swap(a, b)でも試す

こんな感じで
めんどくさいメタプログラミング、とかマクロで実装状況を調べて、とか正直めんどくさい



451 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 03:31:12.67 ]
一応SFINAEがそういうものなんだけど実装状態がいまいち

452 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 14:45:54.75 ]
intrusive_weak_ptrはなぜないんだろう
なんか作るのに難しい所があるのかな

453 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 15:33:08.96 ]
簡単だと思うんならやってみればいいんじゃね?

454 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 16:36:26.76 ]
クラスの静的メンバ関数って静的メンバ以外を引数にするのはNGですか?

455 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 16:41:25.59 ]
>>454
問題無いですよ。


456 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 17:50:14.19 ]
>>452
weak_ptr機能を導入すると実行コストがshared_ptrと大差なくなると思われ

457 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 19:49:04.54 ]
VTableのサイズをするにはどうすれば?

458 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 21:12:22.34 ]
サイズをする?

459 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 21:15:33.66 ]
知るですすいません

460 名前:デフォルトの名無しさん [2012/01/15(日) 22:39:15.44 ]
2ちゃんとかでよくみるAAをprintfで表示したいのですがどうすればいいでしょうか?
メールで提出するので何かをダウンロードしたりしないでプログラムの中だけでやりたいです。



461 名前:デフォルトの名無しさん [2012/01/15(日) 22:40:25.34 ]
>>460
すみません、フォントをMS Pゴシックに変える方法が知りたいです。

462 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 22:43:00.46 ]
windows コンソール フォント

463 名前:デフォルトの名無しさん [2012/01/16(月) 00:35:53.28 ]
vba用のdllをつくっています。C初心者です。
値をdllに渡して処理したあと、グローバル変数に値を入れておいて、
vbaから読み込みのフラグが立ったらその変数を戻すようにしているのですが、
グローバル変数は呼び出し速度が遅い等ネットで見かけます。

グローバル変数を回避して、ローカル変数のみで同様のことをするには
ざっくりどんなことをすればいいのでしょうか


464 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 00:38:14.88 ]
グローバル変数が遅いなんて初めて聞いたぞ
どこだその糞サイトは

465 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 01:50:55.97 ]
>>463
> グローバル変数は呼び出し速度が遅い等ネットで見かけます。

どういう理由で何の処理が遅くなるのかがあやふやなので、
まずはそのことがどこに書かれているか教えてください。

466 名前:デフォルトの名無しさん [2012/01/16(月) 02:05:19.02 ]
class window
{

467 名前:デフォルトの名無しさん [2012/01/16(月) 02:05:50.03 ]
すいません誤爆しました

468 名前:デフォルトの名無しさん [2012/01/16(月) 02:08:26.73 ]
class window
{

469 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 02:12:55.51 ]
};};

class window’ has the same name as the class in which it is declared


470 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 10:44:06.68 ]
>>464
排他処理のこと言ってるんじゃね?



471 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 11:25:02.57 ]
テンプレート関数について教えてください。
テンプレート関数に部分特殊化はないと思っていたのですが
以下のように書いたらよくわからなくなってきました。

//上になにもテンプレート宣言がないときは<>が構文エラー
//template<typename T, typename U, typename V> void f<>(T, U, V){}

//通常のテンプレート関数
template<typename T, typename U> void f(T, U){}

//テンプレートの特殊化は問題なし?
template<> void f<>(int, int){}

//この構文は何? 既に本体を持っています。上のがなければok
//void f<>(int, int){}

//同じ引数の別のオーバーロードは問題なし?
void f(int, int){}

//テンプレートの部分特殊化のつもりの文
template<typename T, typename U> void f<>(T*, U){}

//同じ引数の別のオーバーロードのつもりの文。関数テンプレートは既に定義されています
//template<typename T, typename U> void f(T*, U){}

//別のオーバーロードなのにtemplateの部分特殊化のように書ける?
template<typename T> void f<>(T*){}

上の文のおかしなところをご指摘いただけないでしょうか。
VC2010です。

472 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 11:25:36.02 ]
そもそもそのグローバル変数は何のために使っているんだろう。

473 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 11:47:37.53 ]
>>471
> //テンプレートの部分特殊化のつもりの文
> template<typename T, typename U> void f<>(T*, U){}

いいえ、それは部分特殊化ではありません。


474 名前:471 mailto:sage [2012/01/16(月) 12:30:28.34 ]
やはりそうですか。
だとすると<>があるとないとでは、どのように違うのですか?

475 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 13:05:46.91 ]
>>474
無意味で違いがない

476 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 13:35:20.11 ]
ありがとうございました。

477 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 16:00:34.59 ]
math.hのsin()を使う場合と、
float fsin = 0;
_asm{FLD DWORD PTR DS:[fsin]
FSIN
FSTP DWORD PTR DS:[fsin]}
を使う場合では、どちらが高速ですか?

478 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 17:18:33.69 ]
レスを待つ時間あるなら、自分で計測すりゃいいだろ

479 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 18:46:29.15 ]
自分で計測したとして
その結果は他の環境でも
当てはまりますか?

480 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 18:48:54.93 ]
>>477
ライブラリのバージョンだとかCPUやチップセットの種類だとか様々な環境の違いで変わること。



481 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 18:49:12.23 ]
そういう速度議論なんかはlibc開発者達の間でとっくに終わってる事なんだよね
一人の浅知恵が勝てるわけがない

482 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 18:54:55.30 ]
>>481
いや、勝てる。
libcはいかなる環境のいかなる使い方でも最悪の速度が悪化しないことが求められる。
自作は勝手に条件絞ってその条件の範囲内でのベンチマーク最速を目指せる。

483 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 18:55:58.80 ]
だからといってfsinでは勝てんがな

484 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 18:58:18.15 ]
>>482
こういうことを言う奴に限ってクソみたいなもんを作る

485 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 19:01:54.85 ]
数学関数の作り直しで勝つとしたら、周辺処理との絡み方を良くして
ループ展開、call削減、分岐削減、キャッシュヒット向上とか

486 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 19:04:20.74 ]
>>484
ベンチマーク最速を目指すために書きまくる人vs理論で必死に否定する人

487 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 19:08:00.77 ]
複数の方法を用意してベンチマークを比べて速い方を選ぶ。それを幾度も繰り返し。
速度問題で勝ちたきゃそれしかねーよ。

488 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 21:18:11.99 ]
>>477
これはsqrtの例だけど、こんな感じで検証して、できれば記事を投稿しろ。
www.codeproject.com/KB/cpp/Sqrt_Prec_VS_Speed.aspx

489 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 21:19:55.69 ]
あと、SSEが使える環境なら、FPU命令を使うよりSSEで関数を組んだほうが速い。
gruntthepeon.free.fr/ssemath/

490 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 00:25:56.78 ]
zebra, john, gmpのソースを見て思った。
最高の速度を追求するときは標準関数には頼らない。



491 名前:デフォルトの名無しさん mailto:sage [2012/01/18(水) 23:14:30.29 ]
class Hoge
{
int mHoge;
virtual void hoge(void) = 0;

void test(int Num) {
mHoge = Num;

}
};

みたいな抽象クラスを継承するHugaというクラスのインスタンスを作った時、

関数testの実体はインスタンスの数だけ存在するのでしょうか?

492 名前:デフォルトの名無しさん mailto:sage [2012/01/18(水) 23:16:15.94 ]
しません

493 名前:デフォルトの名無しさん mailto:sage [2012/01/18(水) 23:19:11.75 ]
しない

494 名前:デフォルトの名無しさん mailto:sage [2012/01/18(水) 23:20:15.86 ]
そうなんですね。意外ですmHogeはインスタンスの数だけあるのでしょうか?

495 名前:デフォルトの名無しさん mailto:sage [2012/01/18(水) 23:20:17.72 ]
関数は常に一つ!

496 名前:デフォルトの名無しさん mailto:sage [2012/01/18(水) 23:24:32.80 ]
クラスってそういうもんなんですね。

497 名前:デフォルトの名無しさん mailto:sage [2012/01/18(水) 23:24:33.44 ]
491さんではないですが、知らなかった
一つにするときはstaticを使うもんだと思ってました

498 名前:デフォルトの名無しさん mailto:sage [2012/01/18(水) 23:24:33.96 ]
>>494
なかったら困るだろ

499 名前:デフォルトの名無しさん mailto:sage [2012/01/19(木) 13:42:53.62 ]
IEのインターネット一時ファイルを弄ろうとしているのですが、
普通の方法(↓)ではアクセスできないみたいなんです。
fopen( "C:/.../Temporary Internet Files/sample.jpg", "r" )
戻り値:null
何か特別な処理が必要なんでしょうか?

500 名前:デフォルトの名無しさん mailto:sage [2012/01/19(木) 13:52:28.98 ]
馬鹿には無理



501 名前:デフォルトの名無しさん mailto:sage [2012/01/19(木) 14:07:00.59 ]
IEのキャッシュを扱うには専用のAPIを使う必要がある。
GetUrlCacheEntryInfoEx とか。

502 名前:499 mailto:sage [2012/01/19(木) 14:17:04.90 ]
すみません。自己解決しました。
IEのインターネット一時ファイルの実体(?)って
"/Temporary Internet Files/Content.IE5/"の更に下にあるんですね。
エクスプローラーではTemporary Internet Filesの直下にファイルがあるように見えたんですが、
コマンドプロンプトで見て気づきました。

503 名前:499 mailto:sage [2012/01/19(木) 14:19:27.28 ]
>>501さん
情報ありがとうございます。
GetUrlCacheEntryInfoExで調べてみます!

504 名前:デフォルトの名無しさん mailto:sage [2012/01/20(金) 01:56:49.32 ]
char hoge[10];
int len = strlen(hoge);
これってlenに9が返ってくるとは思わないほうがいいですか?
帰ってこないとしたらどう初期化すべきですか?

505 名前:デフォルトの名無しさん mailto:sage [2012/01/20(金) 02:00:01.82 ]
int len = (sizeof(hoge) / sizeof(hoge[0])) - 1;

506 名前:デフォルトの名無しさん mailto:sage [2012/01/20(金) 02:40:25.88 ]
9がほしいなら
char hoge[10];
int len = sizeof(hoge)-1;
でおk

507 名前:デフォルトの名無しさん mailto:sage [2012/01/20(金) 02:50:14.66 ]
特に決まった初期化の方法はない感じですかね?
ともあれレスありがとうございます

508 名前:デフォルトの名無しさん mailto:sage [2012/01/20(金) 07:56:40.51 ]
>>504
初期化したいのなら、hoge[0] = '\0';で。

509 名前:デフォルトの名無しさん mailto:sage [2012/01/20(金) 08:09:46.09 ]
>>504
char hoge[10] = {}; で。

510 名前:デフォルトの名無しさん mailto:sage [2012/01/20(金) 09:55:24.58 ]
hoge[0] = '\0'ってヌル文字でしたっけ
するとstrlen(hoge) で0になっちゃいませんか?

>>509
これはどういう動作になるんでしょうか?
strlen(hoge)が9に約束されます?



511 名前:デフォルトの名無しさん mailto:sage [2012/01/20(金) 10:12:30.97 ]

template <unsigned int N> void init(char (&)[N]) {
for(unsigned int i = 0 ; i < N - 1 ; ++i) a[i] = 1;
a[N - 1] = 0 ;
}

char a[10] ;
init(a) ;

cout << strlen(a) << endl ;

512 名前:デフォルトの名無しさん mailto:sage [2012/01/20(金) 10:24:30.57 ]
>>510
???
hogeに何が入っているかに因るから
strlen(hoge)が保証される分けない。

strcpy(hoge, "a");
ってやった後に
strlen(hoge);
ってすればstrlen(hoge);は1であることが保証されるけど、

strcpy(hoge, "abcdefghi");
の後に
strlen(hoge);ならstrlen(hoge);が9であることが保証される。

hogeの定義により確保したmemoryの大きさを保証したいのなら
>>506の言うとおりsizeof(hoge)とする以外にないよ。

513 名前:デフォルトの名無しさん mailto:sage [2012/01/20(金) 10:53:05.54 ]
やはりそういういうことですよね
>>511参考にさせて頂きます

514 名前:デフォルトの名無しさん mailto:sage [2012/01/20(金) 12:07:59.47 ]
配列の長さと文字列の長さを混同しないようにな。
strlenはたんに'\0'の前までの数を数えているだけなのだから。

515 名前:デフォルトの名無しさん mailto:sage [2012/01/20(金) 12:09:49.37 ]
配列に格納できる最大長が欲しいのか。
それならそうと最初からそう言えと。

516 名前:デフォルトの名無しさん mailto:sage [2012/01/20(金) 12:10:16.96 ]
char hoge[] = "123456789";

517 名前:デフォルトの名無しさん mailto:sage [2012/01/20(金) 13:00:26.21 ]
コンパイル時に決定される配列の大きさを実行時に求めたいという要求が理解出来ない

518 名前:デフォルトの名無しさん mailto:sage [2012/01/21(土) 10:41:15.47 ]
コンパイル時に決定されるかどうかは関係なく、
ポインタから配列の大きさを求めることは出来るのか?という疑問です
もっと言えば、関数にポインタだけ渡しておけば、あとは勝手にサイズも見てもらって処理するような処理は可能か?ということです
上では一応sizeof使えとのことでしたが、ポインタの渡し方によっては
ポインタそのもののサイズを返したりするので、結局素直に初期化する関数を作るべきかなあ

519 名前:デフォルトの名無しさん mailto:sage [2012/01/21(土) 11:05:15.29 ]
>>518
vector使えでFA

520 名前:デフォルトの名無しさん mailto:sage [2012/01/21(土) 11:05:33.02 ]
vector渡せばいい



521 名前:デフォルトの名無しさん mailto:sage [2012/01/21(土) 11:10:22.47 ]
サイズ付きの構造体、クラスでPK

522 名前:デフォルトの名無しさん mailto:sage [2012/01/21(土) 11:42:01.82 ]
> ポインタから配列の大きさを求めることは出来るのか?という疑問です
これを書こうよ。。。
答え:できない

523 名前:デフォルトの名無しさん mailto:sage [2012/01/21(土) 11:45:38.89 ]
すいません、疑問がうまく文章になるまで時間がかかりまして。
vector考えてみます

524 名前:デフォルトの名無しさん mailto:sage [2012/01/21(土) 12:59:38.80 ]
// func.cpp
namespace {
template <unsigned int R> inline BigInt Factor(BigInt const & n) { return n == 0 ? 1 : n * Factor<R - 1>(n - 1); }
template <> inline BigInt Factor<0>(BigInt const & n) { return n == 0 ? 1 : n * Factor<256>(n - 1); }
}
BigInt factor(BigInt const & n) { return Factor<256>(n) ; }

// func.hpp
BigInt factor(BigInt const & n);


こんな感じのコードを見かけたんですけどこのテンプレートになにか意味あるんですか?

525 名前:デフォルトの名無しさん mailto:sage [2012/01/21(土) 13:14:48.03 ]
>>524
どこら辺を意味がないと思ったの。

526 名前:デフォルトの名無しさん mailto:sage [2012/01/21(土) 13:49:19.71 ]
>>525
なんで普通に再帰しないのかなーって

527 名前:デフォルトの名無しさん mailto:sage [2012/01/21(土) 13:51:40.62 ]
>>526
再帰の限界の数の回避とかなのかね。

528 名前:デフォルトの名無しさん mailto:sage [2012/01/23(月) 12:18:57.37 ]
こんなならループのほうがよさそうに思えるが

529 名前:デフォルトの名無しさん mailto:sage [2012/01/23(月) 12:49:56.34 ]
test

530 名前:デフォルトの名無しさん mailto:sage [2012/01/23(月) 16:48:29.11 ]
>>528
テンプレートでコンパイル時に計算させようとすると再起しかないんじゃないの。




531 名前:デフォルトの名無しさん mailto:sage [2012/01/23(月) 17:21:33.84 ]
>>530
そういう意味じゃないとおもう

532 名前:デフォルトの名無しさん mailto:sage [2012/01/23(月) 17:53:13.43 ]
テンプレート関数を特殊化したり、
テンプレート引数の代わりに関数引数で再帰している
よくわからないコード

533 名前:デフォルトの名無しさん mailto:sage [2012/01/23(月) 17:53:29.35 ]
>>528
コンパイル時定数として階乗の結果が欲しいのをループじゃ対応できないのでは?

534 名前:デフォルトの名無しさん mailto:sage [2012/01/23(月) 18:03:02.90 ]
問題は、100やそこらの再帰じゃ済まない階乗の値をBigIntで持つ必要が本当にあるのかどうか。

535 名前:デフォルトの名無しさん mailto:sage [2012/01/23(月) 18:26:06.14 ]
inline展開されてオーバーヘッドが無くなるというメリットはありそうだがこのサンプルでは無意味だろうな

536 名前:デフォルトの名無しさん mailto:sage [2012/01/23(月) 20:12:08.33 ]
>>535
コンパイル時に計算されるからインラインに展開してオーバーヘッドがなくなるとか関係ないのでは?

537 名前:デフォルトの名無しさん mailto:sage [2012/01/23(月) 21:30:45.28 ]
>>530,533,536

それはもしかしてこんなコードじゃないのかい
ttp://codepad.org/t8ejWQ2g

538 名前:デフォルトの名無しさん mailto:sage [2012/01/24(火) 10:01:51.79 ]
質問です。

template <typename T = char>
class Hoge
{
};


void test(void)
{
  Hoge h;
}

テンプレート引数 T に対して char を与えてやってるので、
Hoge を使用する際、テンプレート引数を与えなくてもよさそうなのに、

error C2955: 'Hoge' : クラス テンプレート を使用するには テンプレート 引数リストが必要です

となります。どうしてですか?

どうぞよろしくお願いします。


VS2008 pro
Win7 pro x64


539 名前:デフォルトの名無しさん mailto:sage [2012/01/24(火) 10:03:11.96 ]
Hoge<> hoge;

540 名前:デフォルトの名無しさん mailto:sage [2012/01/24(火) 11:31:02.17 ]
つまり、class Hogeとtemplate<>class Hogeの区別がつかないんだな。



541 名前:デフォルトの名無しさん mailto:sage [2012/01/24(火) 11:49:44.40 ]
GPU計算に興味が有るんだけど、C++だとOpenCLってやつが一般的?
C++で使えて入門に向いてるのって何があるかな?

542 名前:デフォルトの名無しさん mailto:sage [2012/01/24(火) 11:53:37.64 ]
下記関数は5ms周期で実行されています。
CTMAXが200を超えたとき、例えば201に
なったとき、10ms周期の処理が5ms後に実行
されるという現象がおきます。
下記のように毎回実行される5msの処理は仕方
ありませんが、10ms以降の処理は実行タイミング
がかぶらないようになっています。この状態でさ
らに実行タイミングがずれないような処理を作りた
いのですが、思いつきません。できるものでしょうか?
void time(void){ #define CTMAX 200 static int ct;
if(++ct > CTMAX) ct = 0;
func5ms();/* 5ms処理 */
if(ct & 0x01) == 0)
func10ms();
else{ if(ct & 0x02) != 0) func20ms();
else{ switch (ct){
case 1: case 21: case 41: case 61: case 81:
case 101: case 121: case 141: case 161: case 181:
func100ms(); break;
case 13: case 53: case 93: case 133: case 173:
func200ms(); break;
case 5: case 105:
func500ms(); break;
case 9:
func1s(); break;
}}}}

543 名前:デフォルトの名無しさん mailto:sage [2012/01/24(火) 12:12:36.72 ]
よく分からんけど、

s = milisecond();
do_something();
e = milisecond();

if(e-s<200))
sleep_milisecond(200-(e-s));

ぐらい?

544 名前:デフォルトの名無しさん mailto:sage [2012/01/24(火) 12:24:07.29 ]
とりあえずこういうこと?
ctって0〜200までの値、つまり
201個の値を取ることになっていたんだけど、
そこがまず問題だよね。
1005ms が 1000ms と等しいよ。

本当ならば、>= としなければならないよね?
// if(++ct >= CTMAX) ct = 0;
or
ct++;
ct %= CTMAX;


545 名前:デフォルトの名無しさん mailto:sage [2012/01/24(火) 12:34:49.47 ]
void time(void)
{
#define CTMAX 200
static int ct = 0;

// 0 <= ct <= 199
ct %= CTMAX;

mod_10 = ct % 10;
mod_100 = ct % 100;
mod_200 = ct % 200;
mod_500 = ct % 500;

if(!mod_500)
func500ms();
if(!mod_200)
func200ms();
if(!mod_100)
func100ms();
if(!mod_10)
func10ms();

ct++;
}


546 名前:デフォルトの名無しさん mailto:sage [2012/01/24(火) 13:52:36.91 ]
素直に書いた方がoptimize有利なんだから
ct = (ct + 1) % CT_MAX;


547 名前:デフォルトの名無しさん mailto:sage [2012/01/24(火) 14:01:39.16 ]
time()を初めて実行した時に困るでしょ。
ct = 1;で実行することになって起動後9ms, 19ms, 29ms, ...
で実行することになるよ。
人が書いたコードにbug入れる奴っているんだよな
迷惑なんだよな

548 名前:デフォルトの名無しさん mailto:sage [2012/01/24(火) 14:06:09.81 ]
そもそも標準関数と同じ名前の関数を作るな間抜け。

549 名前:デフォルトの名無しさん mailto:sage [2012/01/24(火) 14:10:55.35 ]
これって組み込みだから問題ないと思って特に指摘しなかったよ。
time.hなんて高尚なヘッダは存在しないんじゃないの?

550 名前:538 mailto:sage [2012/01/24(火) 16:33:33.09 ]
>>539
ありがとうございます。助かりました。



551 名前:デフォルトの名無しさん mailto:sage [2012/01/25(水) 07:51:50.37 ]
結局>>542はどうなった?
自分は解決したから後はシーラないってか?

552 名前:デフォルトの名無しさん mailto:sage [2012/01/25(水) 09:36:12.44 ]
>>544
さんのいうとおり++ct >= CTMAXとしただけでとりあえず
自分の作ったやつでも正常に動くっぽいですね。

ちなみに関数名にtimeなんて使ってません。書き込むとき
面倒なんで簡単な名前に変更しただけです。

>>545
のプログラムはわかりやすいですが、0のとき全部実行され
てしまうのが難ですね。
それからmod_10で考えると10回に1回しか起動しないので、
それだと10msじゃなくて50ms周期になってしまいます。

553 名前:デフォルトの名無しさん mailto:sage [2012/01/25(水) 09:43:21.64 ]
>>552
> ちなみに関数名にtimeなんて使ってません。書き込むとき
> 面倒なんで簡単な名前に変更しただけです。

それにしても標準関数と名前がかぶるってねーだろ

554 名前:デフォルトの名無しさん mailto:sage [2012/01/25(水) 09:51:57.71 ]
まぁ549さんの言うとおり、組み込みなんでtime.hなんて
使いませんし。

555 名前:デフォルトの名無しさん mailto:sage [2012/01/25(水) 10:14:03.52 ]
>>552
bug指摘されちゃった。
static int ct = 0;
if(ct == 0){
ct = 1;
return;
}
投稿した後に、これでうまくいくって気づいてはいたんだけどね。。。
この後はctが0になることはなくて、
0と等価な200がctの値としてくるから問題ないよね。
これくらい思いついてよ。。。

> それからmod_10で考えると10回に1回しか起動しないので、
> それだと10msじゃなくて50ms周期になってしまいます。

こっちは気づかなかった。きちんとdebugしてうまい具合にしてよ。

556 名前:デフォルトの名無しさん mailto:sage [2012/01/25(水) 10:19:00.51 ]
実際に問題になるかどうかじゃなくて、そういう紛らわしいことはするなってこった。

557 名前:デフォルトの名無しさん mailto:sage [2012/01/25(水) 10:24:21.70 ]
ct += 5とするか、
time()を1ms毎に実行するようにするかして修正すれば良さそうだね。
後は任せた。

void time(void)
{
#define CTMAX 200
#define POLLING 5
static int ct = 0;
if(ct == 0){
ct = POLLING;
return;
}
// 0 <= ct <= 199
ct %= CTMAX;

mod_10 = ct % 10;
mod_100 = ct % 100;
mod_200 = ct % 200;
mod_500 = ct % 500;

if(!mod_500)
func500ms();
if(!mod_200)
func200ms();
if(!mod_100)
func100ms();
if(!mod_10)
func10ms();

ct += POLLING;
}

558 名前:549 mailto:sage [2012/01/25(水) 10:29:57.73 ]
自分で実装する時はtime.hがないからっていって、
time()やらtime.hに含む関数名を使ったりしないよ。
本当は、time()なんて関数を自作するのはまずいし、
他人に披露する時に借りの名前とするのも、
あらぬ誤解を招きかねないのでまずいんだけど、
でも、2chに書き込まれるような関数名に意見するのも面倒だし、
組み込みで使っている関数だって事は一見して明らかだったので、
time.hを使うことはまずないだろうって事であえて指摘しなかったんです。

まあ、本当は>>549がおかしいんだよ。
一々指摘するのも嫌だから指摘しなかっただけでさ。

私が名付けるとすれば、polling()かなぁ

559 名前:549 mailto:sage [2012/01/25(水) 10:31:25.79 ]
>>558
まあ、本当は>>549がおかしいんだよ。
は間違いで、
まあ、本当は>>542がおかしいんだよ。
が正しい。

560 名前:デフォルトの名無しさん mailto:sage [2012/01/25(水) 10:47:03.80 ]
>>542
コードを書く前にまずは何をしたいのかを正しい日本語で人に説明する訓練をしなさい



561 名前:デフォルトの名無しさん mailto:sage [2012/01/26(木) 21:39:52.68 ]
てすと

562 名前:デフォルトの名無しさん mailto:sage [2012/01/27(金) 13:12:52.00 ]
class Hogeを事前に宣言しておいて、
あとから定義したいと思うのですが、うまくできません。
何か解決方法はありますか?


// 宣言
class Hoge;
Hoge func( );


int main( )
{
Hoge h = func( );

return 0;
}


// 定義
class Hoge
{
public:
};

Hoge func( ){ return Hoge(); }

563 名前:デフォルトの名無しさん mailto:sage [2012/01/27(金) 13:19:17.13 ]
//hoge.h///////////////
// 宣言
class Hoge;
Hoge func( );
///////////////////////

//hoge.cpp/////////////
#include "hoge.h"

int main( )
{
Hoge h = func( );

return 0;
}


// hoge定義
class Hoge
{
public:
};

Hoge func( ){ return Hoge(); }
/////////////////////////////
ってことなら無理
Hoge h = func( );この時点でHogeの定義が見えてないとダメ
int main()の前に hoge定義を持ってこないと

564 名前:デフォルトの名無しさん mailto:sage [2012/01/27(金) 13:21:27.99 ]
func()がHogeではなくHoge*(またはスマートポインタ)を返すようにすれば大丈夫なはずだが、
設計を見直したほうがいいような気がする。

565 名前:デフォルトの名無しさん mailto:sage [2012/01/28(土) 00:37:44.02 ]
std::map<boost::shared_ptr<Hoge>, value_t>から要素を生ポインタで検索したいという状況に陥ったのだけど、何かいい手はないですか?
とりあえず動くコードとして、
mapの要素を巡回してshared_ptr<Hoge>::getの返り値と検索キーを比較
一致していたらそのイテレーターの指す要素をmから削除
としているのですが、これではO(N)になってしまいmapの利点を生かせません


566 名前:デフォルトの名無しさん mailto:sage [2012/01/28(土) 00:44:01.91 ]
生ポインタをキーにする。

567 名前:デフォルトの名無しさん mailto:sage [2012/01/28(土) 01:03:22.81 ]
スマポをキーにしようという発想が理解できない

568 名前:デフォルトの名無しさん mailto:sage [2012/01/28(土) 01:44:20.83 ]
検索キーになるポインタをshared_ptrに放り込む。
カスタムデリータに何もしない関数を指定してdeleteを防ぐ。
でも危険度は生ポインタをキーにするのとかわらないな。

569 名前:デフォルトの名無しさん mailto:sage [2012/01/28(土) 09:47:26.46 ]
>>568
それって別ポインタとみなされて比較うまくいかないと思うけど

570 名前:デフォルトの名無しさん mailto:sage [2012/01/28(土) 14:08:13.74 ]
コードが長くなってきたので、クラスの宣言と定義を、hとcppに分けたいのですが
下記のような場合、どう分ければいいでしょうか?

class Hoge {
private:
 const int m_x;
public:
 Hoge(int x = 3) throw() : m_x(x) {
  //do something 1
 }
 void func(int a = 5) {
  //do something 2
 }
};



571 名前:デフォルトの名無しさん mailto:sage [2012/01/28(土) 14:31:36.35 ]
// Hoge.h
struct Hoge {
Hoge(int x = 3);
void func(int a = 5);
private:
const int m_x ;
};

//Hoge.cpp
#include "Hoge.h"
Hoge(int x) : m_x(x) { do_something_1(); }
void Hoge::func(int a) { do_something_2(); }


572 名前:デフォルトの名無しさん mailto:sage [2012/01/28(土) 14:46:52.59 ]
>>571
ありがとうございます
理解できました

573 名前:デフォルトの名無しさん mailto:sage [2012/01/29(日) 16:27:31.12 ]
Cを独学で学んでいる入門者です
コンパイル→実行について教えてください

PCは富士通のノートパソコンで
OSはvista home premium
エディタはemacs
コンパイラはMinGW
です

ソースファイルをコンパイルして実行する際、
M-x compile
だと上手くいかないので、

M-x shell
から
>gcc -std=c99 ファイル.c
でコンパイルしています

ただ、毎回gcc -std=c99を書き込むのは煩わしいし、複数のソースファイルをコンパイルして実行する方法がわかりません。

Emacsで複数のソースファイルをC99で?コンパイルして、実行する効率的なやり方が知りたいです

574 名前:デフォルトの名無しさん mailto:sage [2012/01/29(日) 16:40:29.72 ]
IDE(統合開発環境) vs emacs(テキストエディタ)
kohada.2ch.net/test/read.cgi/prog/1244310984/

575 名前:デフォルトの名無しさん mailto:sage [2012/01/30(月) 07:41:57.55 ]
>>573
make
もしくはbatかシェルスクリプト

576 名前:デフォルトの名無しさん mailto:sage [2012/01/30(月) 07:46:48.53 ]
ふつうmakeだろ

577 名前:デフォルトの名無しさん mailto:sage [2012/01/30(月) 08:57:23.22 ]
GetOpenFileName/GetSaveFileNameで
lpstrFileに確保するバッファの大きさを決めるにあたって
あらかじめ受け取るファイル名の長さを取得できないでしょうか。

長さが足りない場合再起不能だし、かといって使われないのに数キロも確保したくないし
それでも足りない場合だってあるだろうし。

GetWindowTextに対するGetWindowTextLengthのような
関数があればよいのですが、この場合ユーザーからの入力なので
どうしたものやら。

578 名前:573 mailto:sage [2012/01/30(月) 09:04:33.22 ]
ありがとうございます。

Makeの使い方を調べてみます。

579 名前:デフォルトの名無しさん mailto:sage [2012/01/30(月) 10:32:00.09 ]
>>577
MAX_PATH分確保しとけばいいだろ

580 名前:デフォルトの名無しさん mailto:sage [2012/01/30(月) 10:36:18.61 ]
大きなバッファを用意しても、260文字以上は格納されないんですか?



581 名前:デフォルトの名無しさん mailto:sage [2012/01/30(月) 11:04:06.02 ]
WinAPIならファイル名読むタイプのAPIは大抵バッファに読み込んだ文字数返るから
その文字数とバッファ長比べてバッファが足りてないと判断したら失敗とみなしてバッファを伸ばしてリトライすればいいよ

582 名前:デフォルトの名無しさん mailto:sage [2012/01/30(月) 11:12:39.59 ]
つーか、そもそもCommonDialogで256文字以上返せるのか?
そうでないなら260どころか、257で充分だ。

583 名前:デフォルトの名無しさん mailto:sage [2012/01/30(月) 11:22:41.08 ]
ttp://msdn.microsoft.com/en-us/library/ms646839(VS.85).aspx

584 名前:デフォルトの名無しさん mailto:sage [2012/01/30(月) 21:01:42.03 ]
仮想関数の戻り値が、継承先の型でもOK、っていうルールの名前を何ていったっけ?

585 名前:デフォルトの名無しさん mailto:sage [2012/01/30(月) 21:11:23.37 ]
共変性かな

586 名前:584 mailto:sage [2012/01/31(火) 07:55:25.34 ]
>>585
それだ!ありがとー!

587 名前:577 mailto:sage [2012/01/31(火) 16:47:56.33 ]
おお、ディレクトリ含めて260文字とかいれたら、無効ですって言われた・・・
ってことは、260文字以上入れたかったら、自分でダイアログ作れってことか・・・

588 名前:デフォルトの名無しさん mailto:sage [2012/01/31(火) 17:03:36.11 ]
32ビットWindowsなんだけど
アクセスして良いポインタかどうかを判定しようとしていて

ぬるぽ 0
初期化されてない有効なヒープ 0xcdcdcdcd
解放されたヒープ 0xfeeefeee

この他に、一見してアクセスできなそうなポインタって何かあるかな。

589 名前:デフォルトの名無しさん mailto:sage [2012/01/31(火) 17:06:29.89 ]
そんなんで判断するなよ

590 名前:デフォルトの名無しさん mailto:sage [2012/01/31(火) 17:07:41.88 ]
0xdeafbeef
0xdeaddead
0xbeaffeed



591 名前:デフォルトの名無しさん mailto:sage [2012/01/31(火) 18:05:29.85 ]
自分で確保してない領域にアクセスすんな。

592 名前:デフォルトの名無しさん mailto:sage [2012/01/31(火) 19:51:41.31 ]
外部から渡される未知のポインタなんよ

593 名前:デフォルトの名無しさん mailto:sage [2012/01/31(火) 20:47:10.19 ]
なにそれ怖い

594 名前:デフォルトの名無しさん mailto:sage [2012/01/31(火) 20:50:48.03 ]
悪魔召喚ポインタ

595 名前:デフォルトの名無しさん mailto:sage [2012/01/31(火) 21:17:34.81 ]
絶対に逆参照してはいけな

596 名前:デフォルトの名無しさん mailto:sage [2012/01/31(火) 21:23:31.08 ]
書き込んだ名前の人間は必ず死ぬという死神のポインタ


597 名前:デフォルトの名無しさん mailto:sage [2012/01/31(火) 21:26:01.82 ]
C系列って恐ろしい言語だったんだな

598 名前:デフォルトの名無しさん mailto:sage [2012/01/31(火) 21:29:14.36 ]
しょうもないネタには食いついてやがんの






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<155KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef