トップページ⇒tech
1002コメント338KB

【初心者歓迎】C/C++室 Ver.97【環境依存OK】 [転載禁止]©5ch.io

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん2015/08/18(火) 07:10:18.03ID:47QFVOwL
エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。

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

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

前スレ
【初心者歓迎】C/C++室 Ver.96【環境依存OK】
http://peace.2ch.net/test/read.cgi/tech/1433514467/
0002前スレ9892015/08/18(火) 08:55:41.03ID:o7p+NB2T
>>前スレ993
> でも使う側で代入しなきゃいけないってめんどくさくない?
> >>985のほうはfuncAとかを呼び出すようにすれば関数ポインタがどうこうというのは気にせずに使えるし

funcA で代入まで済ませればそこも変わらないと思うんだけど?
0003デフォルトの名無しさん2015/08/18(火) 09:25:05.71ID:+rFwHajx
そもそも面倒臭いかどうかは関係ないんじゃないかな?
0004デフォルトの名無しさん2015/08/18(火) 11:25:41.05ID:YoPJdOWG
関数内部で更新してその値を参照する場合かな
0005デフォルトの名無しさん2015/08/18(火) 13:50:39.51ID:PdOCffiM
説明テキトー態度も最悪
ほっとけばいいんじゃない?
0006デフォルトの名無しさん2015/08/20(木) 21:33:13.99ID:OPjxJt6u
http://codepad.org/Wj5jd0Eo
出力が5にならない理由と5にする方法教えてください
0007デフォルトの名無しさん2015/08/20(木) 21:54:44.00ID:qqtrjDLq
>>6
http://codepad.org/PNrRY4Li
0008デフォルトの名無しさん2015/08/20(木) 22:19:41.01ID:OPjxJt6u
有り難うございます
0009デフォルトの名無しさん2015/08/24(月) 11:12:55.99ID:HAmfbFZ3
#include<iostream>
using namespace std;

class A{
public:
int a;
A(int a0){a=a0;}
void inc(){a+=1;}
};

class B{
private:
int n;
public:
B(int n0){n=n0;}
void ainc(A A0){
for(int i=0;i<n;i++){ A0.inc();}
cout<<A0.a<<endl; //わはは Javaな人だとはまりそ?
}
};
int main(){
A A0(3);
B B0(2); B0.ainc(A0);
cout<<A0.a<<endl;
}
0010デフォルトの名無しさん2015/09/03(木) 23:09:20.83ID:6bOZtC0j
標準ライブラリの開発コンセプトとか載っている本ってありますか?
以前に見つけた憶えがあるんだけどタイトルを失念してしまったので
何か良い本を紹介して下さい
0011デフォルトの名無しさん2015/09/25(金) 14:33:54.91ID:cJmaZWu4
>>9
5
3
あってる?
いや違うか?
メンバ関数の引数に参照(&)が入ってないから……
ん〜でも……
あぁ〜最近Andoroidアプリでjavaばっかだから
でも、まぁ、そんなコード書くこと無いわな〜

って言っても、Oracle java SE programmer Silver
の試験受けた時、そんなコードばっかだったよ
ちなみに、試験でムカついたのは
int i=0;
while(0<++i)
が、答えが無限ループってところ
javaでunsignedはcharだけだろ
いつかは止まるっつーの
0012デフォルトの名無しさん2015/09/25(金) 14:53:50.11ID:cJmaZWu4
>>10
C?それともC++?
って言っても、Cはアセンブリに近い低級言語で
C++は、誰が設計したのか分かんないけど
間口を広げすぎたオブジェクト指向だね〜
Cは置いといて、C++を語ると必ず
オブジェクト指向とはって、色んな例え話が出る

俺の例え話
ブロックくずしのゲームあるよね
で、当てるブロックと跳ね返すボードは
同じ跳ね返すという動作をするので
ボードとブロックは同じ跳ね返す機能のクラスを継承
しかし、ブロックに当てるとアイテムが落ちてきたりする
これはブロック側の独自実装
で、アイテムを取ったらボールが増えたりする
でも、跳ね返すという観点では変わらない

はい、ややこしくなってまいりました。失礼!!
0013ホリエモン×見城徹×酒鬼薔薇2015/10/03(土) 23:06:01.08ID:IwRG46Mp
「生きるのに向いていないから」健康な24歳女性の安楽死が認められる!!=ベルギー

http://tocana.jp/2015/06/post_6713_entry.html
0014もう俺たちは奴隷じゃない!2015/10/31(土) 20:09:56.80ID:xHpU59d3
安楽死旅行企画が大人気|竹田恒泰チャンネル

https://www.youtube.com/watch?v=XmP1TRsAe88
0015デフォルトの名無しさん2015/11/03(火) 10:35:53.36ID:VplAS7nf
シリアル通信を使ってLinuxを操作、表示するアプリを作りたいのですが、
Ctrl+C(中断指示)やCtrl+D(EOF送信)といった特殊な操作は、
何を送れば良いのでしょうか?

また、これらは各OSで共通だったりするのでしょうか?
0016デフォルトの名無しさん2015/11/03(火) 10:40:23.64ID:bkeJBg3D
Ctrl+Space = 0x00, Ctrl+A = 0x01, ...
0017152015/11/03(火) 11:13:47.48ID:VplAS7nf
>>16
それは私宛てでいいのですよね?
それらの一覧ってないでしょうか?
(もしくはそのコマンド群の名称)
0018デフォルトの名無しさん2015/11/03(火) 11:20:30.35ID:bkeJBg3D
A以降が1ずつ増えることくらい類推しろや
0019デフォルトの名無しさん2015/11/03(火) 11:23:31.31ID:bkeJBg3D
http://www.routrek.co.jp/product/varaterm/controlcode.html
0020デフォルトの名無しさん2015/11/04(水) 09:43:28.19ID:+IbiBxzw
>>17
制御コードと呼ぶことが多い
C言語入門にはちらっと紹介されてると思うが
ちなみに改行・タブ文字も制御コードの一つ
0021デフォルトの名無しさん2015/11/04(水) 10:19:46.10ID:bo5L4q85
Ctrl+Insはの制御コードはなんですか?
0022デフォルトの名無しさん2015/11/04(水) 13:11:24.50ID:f7QS+eFK
linux側で受信文字を表示して調べろ
0023デフォルトの名無しさん2015/11/22(日) 08:25:38.42ID:qediMbGX
>>15
いいえ、「コード」はともかく「操作」は共通ではありません
例えばWindowsはデータ終了にCtrl+DでなくCtrl+Zを使用します
0024デフォルトの名無しさん2015/11/28(土) 02:40:50.14ID:jVemdVDV
質問なのですが,プログラム作成中に
"コンパイラの制限 : プログラム内のブロックの入れ子のレベルが深すぎます。"
というエラーがでてコンパイルできません.
VS2010 c++下では入れ子は128層が限界とあったのですが,この層の数え方は,例えば
for(){if(){if(){if(){}}}}の場合,4層という認識であってるのでしょうか?
0025デフォルトの名無しさん2015/11/28(土) 02:47:55.73ID:JsGV9DmL
>>24
それプラス、if-else ifがたくさん並んでるとそのエラーが出るみたいよ
0026デフォルトの名無しさん2015/11/28(土) 03:42:43.97ID:jVemdVDV
>>25
main関数内で,for文等で書かれたブロックが違っていてもif-else ifを多用していると
128層でなくてもこのエラーがでてきてしまうとうことでしょうか?

コードも載せたほうが状況も説明しやすいのですが量が多いので,文章だけになってしまい
すいません.
0027デフォルトの名無しさん2015/11/28(土) 08:53:46.29ID:mxbt4S4C
質問ですが、C++内で永続データ(文字列50文字程度×200万件程度)を扱わなくてはいけなくなったのですが、
とりあえずMySQLに突っ込んだら1週間たってもInsertが終わらないです。
他にC++で大量のデータを保管し、後から簡単に部分一致検索できるような方法はありませんか?
0028デフォルトの名無しさん2015/11/28(土) 09:11:25.80ID:3k32N2dX
「mysql insert 遅い」で検索してそれでも不満なら、また来なさい。
0029デフォルトの名無しさん2015/11/28(土) 10:20:47.03ID:hdYDv4+a
>>24
別のコンパイラも試しなよ
0030デフォルトの名無しさん2015/11/28(土) 10:32:03.28ID:tW/rjk30
>>27
部分一致検索をするには大きく分けて
・検索される側の文字列を変換して検索に特化させる
・検索する側の文字列を変換して検索に特化させる
・検索される側・する側どちらも何ら変換しない
の3通りの方法がある。

最初のはは例えば接尾辞配列を作ってそれを保持するって方法で、
これは検索される側の文字列長をnとした時にO(n log n)償却時間で変換する方法や
O(n log^2 n)最悪時間で変換する方法なんかが知られている。
検索時間は検索する側の文字列の長さに依らずO(log n)平均時間

次のは例えば正規表現を有限状態オートマトンに変換する方法で、
その正規表現の長さをm、検索される側の文字列の長さをnとする時にO(m^3)平均時間、
O(m^2 * 2^m)最悪時間で構築してO(n)時間で検索できる方法が知られている。

データベースに何でもかんでもぶち込むだけが方法じゃない。
データの総量が増えないなら前者の方法で準線形時間掛けて初期化しておけば対数時間で検索できるし、
データが追加されうるならとりあえず何らかのファイルに1行につき1エントリの形式で書き込んでおいて
後者の方法を使えば線形時間で検索できる。
特に、後者の場合は(1行につき1エントリという形式にしておけば)Unixのgrepコマンドが使える。
0031デフォルトの名無しさん2015/11/28(土) 10:41:03.68ID:tW/rjk30
ごめん
> 検索時間は検索する側の文字列の長さに依らずO(log n)平均時間
って書いたけどより正確にはO(m + log n)とかそんな感じ
0032デフォルトの名無しさん2015/11/28(土) 14:03:22.69ID:mxbt4S4C
>>30
なるほど。
アリ本読みながら頑張ってみる。
ありがとう。
0033デフォルトの名無しさん2015/11/29(日) 11:39:46.44ID:fhjopYJV
たった200万件が1週間たってもINSERTできないのは
朝マック頼んで番号札もらって席について、閉店まで待ってるようなもの
何かおかしいと思わない人間には無理
0034デフォルトの名無しさん2015/11/29(日) 12:36:23.19ID:4pi0A2Al
>>33
> 1週間たってもINSERTできないのは

ネタだろ、いちいち構うなよ
0035デフォルトの名無しさん2015/11/29(日) 21:36:36.46ID:ZUBJcHMd
>>25 >>29
ありがとうございます!
おそらく解決できました.
0036デフォルトの名無しさん2015/11/29(日) 22:44:30.05ID:RglVntwV
>>27
文字列50文字は、100byte程度。
100byte * 200万件 = 200MB

1分以内には書き込める
0037デフォルトの名無しさん2015/11/29(日) 22:49:51.69ID:tNTBXjHt
>>36どうしようもない馬鹿
0038デフォルトの名無しさん2015/11/29(日) 23:04:33.40ID:vKs8E2om
char *argv[]をintに変換したいのですが、どうすればいいですか?
0039デフォルトの名無しさん2015/11/29(日) 23:08:40.17ID:RQ97x6ZU
atoi(argv[1])
0040デフォルトの名無しさん2015/11/29(日) 23:10:50.62ID:vKs8E2om
>>39
ありがとうございます。
検索の方法が悪いのか、リアルで1時間ほど検索しても見つからず
困ってました。
0041デフォルトの名無しさん2015/11/29(日) 23:40:37.63ID:zeO3ugsW
>>40
Googleで
c言語 文字列 数値 変換
って検索したら一番上に出たけどなんて検索してたん?
0042デフォルトの名無しさん2015/11/30(月) 15:03:48.66ID:jNXFF+da
>>41
"char *argv[]" 変換
等ですね。
0043デフォルトの名無しさん2015/11/30(月) 15:56:59.92ID:7BdzR/6V
何に変換するかも書いてないのに出るわけ
0044デフォルトの名無しさん2015/11/30(月) 16:18:14.72ID:R91D20Ot
argvが何かが解ってないからそうなるんだろうね
0045デフォルトの名無しさん2015/12/04(金) 00:26:49.79ID:wpzjFC8X
Visual Studio 2015 (Visual C++ 14)

char32_t unko = U'A';
printf("%04X", unko);

warning C4477: 'printf' : format string '%04X' requires an argument of type 'unsigned int',
but variadic argument 1 has type 'char32_t'

なんで?
(キャストしろ、というのは無しでおながいします)
0046デフォルトの名無しさん2015/12/04(金) 01:23:52.57ID:lNfIPK42
>>45
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4296.pdf
Types char16_t and char32_t denote distinct types with the same size, signedness, and alignment as
uint_least16_t and uint_least32_t, respectively, in <cstdint>, called the underlying types.

つまりchar32_tは同じサイズ・同じ符号の有無でも別の型として見做されてる。
0047デフォルトの名無しさん2015/12/04(金) 01:46:15.44ID:ezzwHQH9
>>45
そのメッセージの何がわからないの?
0048デフォルトの名無しさん2015/12/04(金) 04:55:59.58ID:wpzjFC8X
Warningが出ないようにすにはどうしたらいいのか、聞きたいのです。

たとえば HANDLE なら "%p" で表示できますよね。
HANDLE chnko.;
printf("%p", chnko);
size_t なら "%Iu"

じゃぁ char32_t な変数は、いったいどうやって16進数表示すればいいか知りたいんです。
0049デフォルトの名無しさん2015/12/04(金) 04:57:07.63ID:wpzjFC8X
>>46
市ね
0050デフォルトの名無しさん2015/12/04(金) 04:58:58.14ID:wpzjFC8X
くれぐれも pragma で disable するとか反則技は無しにしてください
0051デフォルトの名無しさん2015/12/04(金) 08:05:37.51ID:eJgp+Ap7
それはエラーではく警告なので既に表示できてる
0052デフォルトの名無しさん2015/12/04(金) 08:24:02.11ID:uoWB06OP
もう付き合う必要ないだろ
0053462015/12/04(金) 08:37:07.91ID:lNfIPK42
>>49
何故警告が出るか?の問いに正確に答えたのになぜ殺たし
0054デフォルトの名無しさん2015/12/04(金) 09:44:49.42ID:ezzwHQH9
>>48
char32_t に直接対応する書式指定は定義されていない。 C なら int_least32_t の
typedef ってことになってるから PRIdLEAST32 でいけるんだろうけど、エラーメッセージを
見る限りは C++ っぽいな。 C との移植性を考慮してる処理系なら C++ でも
PRIdLEAST32 でいけるかもしれない。

普通に考えれば確実に 32 ビットある unsigned long あたりにキャストして %08lX で表示
すれば移植性含めて確実なんだろうけど、それがダメってことなら・・・
unsigned long x = unko をはさむんならいいの?

%p で HANDLE が表示できるのは、たまたま typedef の定義が void* か、ポインタの
表現形式が同じなだけ。移植性は無い。

size_t のフォーマットは C99 でようやく %zu が定義されてる。 C99 未対応の環境を含めて
移植性を持たせようと思ったら、やっぱりキャストすることになるんだろうな。
0055デフォルトの名無しさん2015/12/04(金) 12:41:53.04ID:eOr3TAvt
>>53
一見すると警告が出ている理由を聞いているように見えるが
事前に回答に対して付けてる注文が、警告されない方法を要求された場合に得られるものに対しての注文になっている点を見逃していたな
0056デフォルトの名無しさん2015/12/04(金) 12:58:29.43ID:GzeAUkqU
printfでsize_tをポータブルに扱うにはzを使う。16進だったら%zx
MSVCではそのままでは使えず、手順を踏めば使えるようになるが、
>>49のようなアホには教えてやらない。
yahoo知恵袋とかに知ってる奴がいるかも知れないからそっちで聞け。二度と来るな。
0057デフォルトの名無しさん2015/12/04(金) 13:20:37.25ID:cTLbcsjq
char32_t を受けるフォーマット文字列が
→ ある
 そのフォーマット指示教えて
→ ない
 キャストしたうえでそれを正しく受けれるフォーマット文字列を当てろ
0058デフォルトの名無しさん2015/12/04(金) 13:31:24.33ID:yphLFvrP
みんな親切だな
こんな無礼な奴に教えてるとか
0059デフォルトの名無しさん2015/12/04(金) 18:25:08.71ID:tMlpAt0c
>MSVCではそのままでは使えず

へー、俺はそのまま使えてるけど
0060デフォルトの名無しさん2015/12/05(土) 01:25:48.24ID:XrhXlWwy
>>45
printf の書式に関してはキャストが正しいやり方だと思うけど…
0061デフォルトの名無しさん2015/12/05(土) 14:44:28.99ID:8o6AWzwu
そういや
printf("%04x", unsigned(unko))
みたいなキャストの書き方する人をめっきり見かけなくなったな
0062デフォルトの名無しさん2015/12/06(日) 16:56:31.72ID:w0JG1OnY
>>61
C++で追加された書き方だっけ。わざわざCと非互換な書き方するのもな
0063デフォルトの名無しさん2015/12/07(月) 10:24:26.90ID:kLiwVdVP
コンストラクタで変換するイメージだから割りと使うなぁ。
0064デフォルトの名無しさん2015/12/07(月) 12:35:07.38ID:EdmvAvM2
普通に使うよね
大体Cスタイルキャストみたいな強いキャストしてほしくないけど
static_castみたいな長ったらしいのは打ちたくない時とか
0065デフォルトの名無しさん2015/12/07(月) 12:43:32.10ID:OioPlMJu
>>64
>>61の危険性はCスタイルキャストと同じだろ。
0066デフォルトの名無しさん2015/12/07(月) 12:50:44.53ID:MCOGyvev
前in64_tとuint64_tを変換しようとして
n = static_cast<unsigned>(m);
って書いて嵌ったなぁ。

unsignedはunsigned intとして評価されて、その環境でのunsigned intが32bitしか無かったのが原因なんだけど。
0067デフォルトの名無しさん2015/12/07(月) 13:29:16.51ID:Hqr6JCCE
intは2〜4バイトだかんね
0068デフォルトの名無しさん2015/12/07(月) 14:03:46.21ID:JxHjK4i3
>>65
61みたいなケースに限った話だったの?
0069デフォルトの名無しさん2015/12/07(月) 15:14:45.21ID:6rSJBSiX
unsigned(i)
と
(unsigned)i
って、どちらもreinterpret_cast相当で同じなんじゃないの?
危険性も同じでは?
カッコで囲う分、unsigned(i)の方がプログラマのミスを防げそうってのはあるが
(unsigned)(i)って書けば同じことだし
0070デフォルトの名無しさん2015/12/07(月) 16:52:08.66ID:FMrKVVi9
static_castを使わないと駄目なんかなぁ
0071デフォルトの名無しさん2015/12/07(月) 20:40:29.05ID:PFJ6xruc
そもそもキャストなんて限られたところでしか使わないから

>>64
> static_castみたいな長ったらしいのは打ちたくない時とか

みたいな理由はすごく違和感ある
xxx_cast< > の方が grep し易いし
0072デフォルトの名無しさん2015/12/07(月) 20:46:33.27ID:YI9JvcYw
>>69
おまえがreinterpret_castを理解していないことはわかった
0073デフォルトの名無しさん2015/12/07(月) 20:59:38.29ID:vSptre4r
Cスタイルキャストをサーチしてくれるツール知らない?
GCCだとワーニング出せるんだけどVC++にはないんだよなあ
0074デフォルトの名無しさん2015/12/07(月) 21:19:35.71ID:MCOGyvev
>>73
cpplintで出来なかったっけ?
0075デフォルトの名無しさん2015/12/07(月) 21:39:05.15ID:vSptre4r
>>74
ありがと
cpplintのソース見るとやってるみたいだね試してみるわ
0076デフォルトの名無しさん2015/12/07(月) 22:16:48.23ID:YS1sGdfb
プログラムの経験はあまりないのでなるべく詳しく教えてほしいです

printfによってSegmentation faultが出てしまいました

貰ったプログラムを見ていると関数の初めと終わりにprintf文が書かれてあり、
#ifdef DEBUGで消されてありました。デバッグ用だろうと思いdefine DEBUGを書いて実行したのですが、
あるpthread_createで呼び出された関数を通るとsegmentation faultになってしまいました。。。
調べてみるとどうやらpthread_createで呼び出された関数のprintfが有るか無いかだけでsegmentation faultになるかならないかということが分かりました。

printfがあるかないかのsegmentation faultということが凄く不思議です。
printfが領域を壊しているということでよいのですよね?

ちなみに確か、printf("\tchar xxxxxxxxxxx(www = %d,yyy = %d, zzz = %d); {\n",int www, int yyy、int zzz); とprintf("xxxxxxx end\n")こんな感じでした。


・このpthreadで生まれる関数のprintfの中身をいったん入れるデータ領域などは、pthread_createの時に新たに作られるのでしょうか?
それとも元々のプログラムを実行したときに作られる領域を共有しているのですか?
 ・↑だとしたらpthread_createの時に領域をどれだけ確保しているかとか、わかるのでしょうか?その領域を広げれば解決できるのでしょうか?

・というか、そもそも前提はあっていますか?

・こんな可笑しなエラー、ほかにもありましたら教えてください。

コンパイルはwindows版eclipseのgcc crosscompilerです
実行環境はFreeBSD、ハードウェアのスペックはよくわかりませんが組み込み系です

よろしくお願いします〜!
0077デフォルトの名無しさん2015/12/08(火) 00:06:06.37ID:YwewJazw
>>76
前提が違っている

バグは問題の個所以前に存在する。printfも含むがそことは限らない。
0078デフォルトの名無しさん2015/12/08(火) 00:14:31.96ID:y9imTVGc
#ifあたりで構造が崩れてるとか・・・
0079デフォルトの名無しさん2015/12/08(火) 00:47:51.17ID:EGf1sWrT
printfの有無、最適化オプションで結果が変わる、
なにか変数の初期化忘れを疑う
0080652015/12/08(火) 01:07:46.79ID:xTQHW/dy
>>68
別に>>61に限ったつもりは無かったけど、あの形のキャストをどう呼ぶかわかんなかったんだ。
規格上はキャスト式のひとつで function notation と言うらしい。

で、>>64が言うには「Cスタイルキャストみたいな強いキャストしてほしくない」ときに
function notation を使うらしいんだけど、単一の式に対する function notation でのキャストの効果は
Cスタイルキャストと同じで依然として「強いキャスト」が実行されてしまうことになるから、
何かおかしなことを言ってると思ってる。

>>69
reinterpret_cast と const_cast の効果が両方発動したりもするよ。

>>73
GCC の -Wold-style-cast だよね。
でもなぜか同じ危険性でも function notation だと検出されないんだ・・・。
0081デフォルトの名無しさん2015/12/08(火) 02:03:07.89ID:R0PV8G/t
>>80
意味解って言ってんのか?
せめて試してから言ってるんだよな?
0082デフォルトの名無しさん2015/12/08(火) 02:57:32.43ID:Uz/uPJvZ
>>69
>>80
static_castが抜けてるよ
0083デフォルトの名無しさん2015/12/08(火) 03:02:51.98ID:R0PV8G/t
> reinterpret_cast と const_cast の効果が両方発動したりもするよ。
試して言ってるならこの例頼むよ。忘れんなよ。
0084デフォルトの名無しさん2015/12/08(火) 03:05:30.26ID:xTQHW/dy
>>81
何を試せって話なのかよくわかんなかったけど、>>83と合わせて、これでいいの?
http://melpon.org/wandbox/permlink/fktKKlGO95s7IKEx

typedef int* intptr;
intptr x;
void f(double const* p)
{
x = (intptr)p; // ok
x = intptr(p); // ok
x = static_cast<intptr>(p); // error
}

prog.cc: In function 'void f(const double*)':
prog.cc:7:30: error: invalid static_cast from type 'const double*' to type 'intptr {aka int*}'
x = static_cast<intptr>(p); // error
0085デフォルトの名無しさん2015/12/08(火) 05:01:43.22ID:RVFMry3L
>>80
>でもなぜか同じ危険性でも function notation だと検出されないんだ・・・。
これ初めて知ったよ
確かにold-styleじゃないけどさ
0086デフォルトの名無しさん2015/12/08(火) 05:23:07.34ID:RVFMry3L
細かいが初心者スレなので一応訂正しておく
function notationじゃなくてfunctional notationな
0087デフォルトの名無しさん2015/12/08(火) 08:24:16.94ID:1IXf9fjC
【 オンラインTCGエディター 】 >>1

デュエル・マスターズ的な非電源TCGの 《 オンライン化ツクール系ソフト 》 制作の企画。

例えば、ガチンコ・ジャッジを直ぐにでも導入できる機能を持っておりながら、
当面それを扱わず単純化させておいて、事後的に導入拡張する際に当該システムを
ブロック構造の組み合わせで後付け挿入できるように予めシステム化してあるソフト(エディター)。
既存の非電源TCGを劣らずに再現できるならば大概のニーズに応えられる筈。
バトスピ、ヴァンガ、ウィクロス、ポケカ、デジモン、ゼクス、モンコレ、ガンダム・ウォー、ライブオン、ディメンション・ゼロ、カードヒーロー、シャーマン・キングなど
のシステムを完全再現できるように設計するけど、他に此のTCGの此のシステムは再現希望とか有ったら書いて。
マジック:ザ・ギャザリングの全システムを完全に再現するのは無理だから、此れだけは必用だ!って部分のみリクエストして。
WEB通信での対戦は、個vs個、多数乱戦、チームvsチーム、個vsチームを可能な仕様とする方針。

設計思想は 《 RPGツクール 》 が良いかな?  他に、優れたエディター有ったら挙げてみて。

個人や企業などのベンダーが提示する開発費(見積もり)で折り合えば、発注する。
↓
エディター群から基本コンセプトを絞り込む(もちろんオリジナルで優れた新ネタが有れば導入する)。
↓
遊戯王OCGに関しては、タッグフォース、ADS、デュエルオンラインを発注先ベンダーに研究させる。
なるべく前述3つで可能な再現は全て実装させる方向を目指す。 まぁ努力する・・・
バトスピ、ヴァンガ、バディ、デュエマなど発売済みゲームソフトが存在してるケースはベンダーに研究させる。
↓
各社TCGを再現するテストプレイ ⇒ 更に改良や修正。
↓
機能制限した下位版を5万円以上で発売 + デュエリ−グ用に改造した上位版でサーバー稼動=営業開始。
↑
下位版の改造および商用利用には、別途で当社との契約が必要。

さ〜て、製作ベンダー見つけよっと!ww(クス
http://wc2014.2ch.net/test/read.cgi/entrance2/1449039272/-18
0088デフォルトの名無しさん2015/12/08(火) 10:56:45.80ID:mthiYc/w
>>80
> function notation だと検出されないんだ・・・
コンパイラに検出してほしいよね
これってlintじゃ検出難しいだろうから
そもそもfunctional notationなんてものが何故導入されたんだ?
こんなもん無い方が良いだろ
0089デフォルトの名無しさん2015/12/08(火) 12:12:33.81ID:xTQHW/dy
>>86
ごめん。流し読みして見落としてた。ありがとう。

>>88
クラス型の一時オブジェクトを作る書式としてはしっくりくるんだけどな。
単一式の場合の特別扱い無しで常に T t(expr...) と同じ動作として定義してくれればよかったのに。
C++98 時点の話だから、たぶんただの設計ミスなんじゃないかと。
0090デフォルトの名無しさん2015/12/08(火) 13:14:18.38ID:9OJSSokt
開発環境 XP SP3 VC++2008EE
Win32 コンソール アプリケーション
MFC=標準Windowsライブラリを使用
ATL=使用しない
文字セット=マルチバイト

実行環境 Windows NT系OS

この環境で以下のような改造したファイルオープンダイアログを
実装しようと思ってるのですが、
http://i.imgur.com/lgk1ApU.jpg

どのようにしたらいいのでしょうか?
検索してもうまく探せませんでした。
0091デフォルトの名無しさん2015/12/08(火) 15:25:04.26ID:lAFQRlE9
ファイルダイアログのカスタマイズでググれ
でもEEなら MFC/ATL もリソースエディタもなしでキツイんじゃないか

あと誘導
http://peace.2ch.net/test/read.cgi/tech/1438695290/l50
0092デフォルトの名無しさん2015/12/08(火) 16:27:08.06ID:zjJIjn6V
ところで結局
(unsigned)(i)
と
unsigned(i)
は何が違うの?
危険度は同じでは?
0093デフォルトの名無しさん2015/12/08(火) 19:25:14.13ID:kigfa6aB
俺C++知らんのだけど、unsigned char にしたいときはどうするの?
0094デフォルトの名無しさん2015/12/08(火) 19:56:36.38ID:9OJSSokt
>>91
ありがとうございます。
0095デフォルトの名無しさん2015/12/11(金) 08:07:52.26ID:YV4fREMK
using baka = unsigned char;
baka(v)
0096デフォルトの名無しさん2015/12/12(土) 11:02:24.16ID:J0zYjx2j
設定ファイル上のIDとコード上のIDをうまく記述する方法ありますでしょうか

xxx.iniファイルに"HOGE=100"とあり、コード上にenum ID { HOGE };として
mapでid[ HOGE ] = (ここにiniファイルのHOGEの中身 )と記述してるのですが

iniファイル、コード上で2重に書くのがなんか変な感じがしまして
なにか別の方法があればとおもいまして
0097デフォルトの名無しさん2015/12/12(土) 11:08:14.60ID:e2VDlW7v
設定ファイルを実行時に読みとる
0098デフォルトの名無しさん2015/12/12(土) 11:25:49.88ID:7G0ybzbE
enumの具体的な値に影響するようなコードを書いちゃだめ
0099デフォルトの名無しさん2015/12/12(土) 11:29:38.04ID:msfZv23a
書いてることがよくわからんな。
コードに同じ内容を書いているんなら、そのiniファイルは何のために存在しているの?
0100デフォルトの名無しさん2015/12/12(土) 11:41:35.92ID:fT/m1Hfb
>>99
俺もよくわからんが
低脳にレスしてもらいたくないから、低脳にはかいていることが理解できないようにしている
ってことだけは分かる
0101デフォルトの名無しさん2015/12/12(土) 12:31:39.74ID:/H210tb+
ハッシュにすれば
0102デフォルトの名無しさん2015/12/12(土) 12:55:59.15ID:Gz2IfgKr
enum使うの諦めて、文字列で指定するようにして
id["キー"]=値ってやればいいんじゃ

iniファイルはキーの取得もできたはず、少し面倒だけど
0103デフォルトの名無しさん2015/12/12(土) 13:12:36.30ID:6mDCyx9e
C#だと文字列をenum値に変換できるんだけどな
C/C++じゃうまい方法がないね
0104デフォルトの名無しさん2015/12/12(土) 14:17:52.83ID:Tlws6VKy
>>96
enum と ID との結びつきを配列やテーブルで持つのはどうですか?
0105デフォルトの名無しさん2015/12/12(土) 14:34:08.98ID:zzgKuIEv
iniファイル読んで
id[ HOGE ] = ....
を生成するスクリプト書く
0106デフォルトの名無しさん2015/12/12(土) 14:41:14.90ID:/H210tb+
>>105
iniファイルいじっただけでコンパイルし直しかよ
0107デフォルトの名無しさん2015/12/12(土) 14:47:10.22ID:FWugws3z
どうせ後でIdに紐付いたHoge永続オブジェクトをどっかから読み込むんだろ
最初からclass HogeRepositoryで良いじゃん
リスク買ってまでIdを丸出しにしなくて良いよ
0108デフォルトの名無しさん2015/12/12(土) 14:49:53.45ID:zzgKuIEv
>>106
HOGE=100が変更されたら再コンパイル必須だろ
つーか、再コンパイルおそれるって、昭和のジイさんですか?
0109デフォルトの名無しさん2015/12/12(土) 15:32:05.55ID:Gz2IfgKr
>>108
id[HOGE]=100をやりたいって話だろ
0110デフォルトの名無しさん2015/12/12(土) 15:46:21.63ID:tVgJgcBS
enumとini同時に使う意味がないから片方消す
どっちかは要件による
それ以外まともな解決策なんてないと思うが
0111デフォルトの名無しさん2015/12/12(土) 15:48:09.53ID:tVgJgcBS
代替えとしては「名前=値」を「enum数値=値」に変換ツールを作って
メインの方では後者を読み込むというのはあるが、はっきり言って無駄だな
0112デフォルトの名無しさん2015/12/12(土) 21:45:39.70ID:7G0ybzbE
実行時に読み込めよ
何のための設定ファイルだかわかんねえよ
ビルド時に確定させたいならiniにするのが間違い
ヘッダに書けば良い
0113デフォルトの名無しさん2015/12/13(日) 02:33:53.99ID:qbposeEZ
HOGE=0の時、iniファイルに"HOGE=100"って書いてあったら
id[0]に100をいれたいが、HOGEと"HOGE"が必要になるって話じゃないのか
0114デフォルトの名無しさん2015/12/13(日) 03:31:17.37ID:wqYJ5l85
>>112
実行時に読み込む話に決まってるだろボケ
0115デフォルトの名無しさん2015/12/13(日) 08:23:30.44ID:hMJMcrF3
struct{
char *name (HOGE)
int value (100)
}
if(strcmp(name, "HOGE") == 0) {
value = (iniのHOGEの値)
}
じゃあかんのか
0116デフォルトの名無しさん2015/12/13(日) 08:38:10.26ID:2dKkDW/6
>>113
enum の識別子 HOGE と iniファイルや key探索での "HOGE" か

id[HOGE] = FormIniFile("HOGE")
のような記述ならマクロでごまかすかな
#define IMP(arg) id[arg] = FormIniFile(#arg)
0117デフォルトの名無しさん2015/12/13(日) 08:51:55.16ID:GP8wOhjz
iniファイルで値のカンマ区切りを許可する
それ以外を書き込まない
***hoge.ini
HOGE = 100,
FUGA = 101,
PIYO = 102,

*** .hファイル
enum{
#include "hoge.ini"
}
0118デフォルトの名無しさん2015/12/13(日) 09:17:56.38ID:qbposeEZ
>>116
enum増やすたび1行書かなきゃいけないのがネックだよね

enumの定義をマクロにしてカンマ区切りの長い文字列作って…ってのもやってみたが無理矢理感が拭えない
0119デフォルトの名無しさん2015/12/13(日) 09:29:44.34ID:2dKkDW/6
>>118
あまりよいやり方じゃないけど、列挙する箇所を ファイルにしておいて
hoge.inl
 IMP(HOGE1)
 IMP(HOGE2)

enum 定義は
 #define IMP(arg) arg,
 enum {
  #include "hoge.inl"
 };
 #undef IMP

初期化するところで
 #define IMP(arg) id[arg] = FormIniFile(#arg);
 #include "hoge.inl"

無理やり感満載w
0120デフォルトの名無しさん2015/12/13(日) 09:34:03.10ID:kwkQZ1G0
シンボルのHOGEは必須なのか?keyに対応したindexがあればいいならこんなのでいいんだが。

static const char * s_keys[] = {
"HOGE",
"HAGE",
"FUGE",
};
で、iniファイルから読み込んだkeyをs_keysからサーチしてindexを求める。

enum必要ならマクロと#includeでなんとかなるだろ。
0121デフォルトの名無しさん2015/12/13(日) 09:56:45.90ID:+vfdgVrV
class Id { private: int value; // 以下略

class IdCollection : Singleton<IdCollection> {
public: Id get(string const & s) { /* 略 */ }
public: Id hoge() { return get("HOGE"); }
private: void initialize() { loadFromIniFile("ids.ini"); }
private: void loadFromIniFile(string p) { // 以下略

int main() {
DoSomething(IdCollection.instance().hoge());
0122デフォルトの名無しさん2015/12/13(日) 11:11:00.44ID:kwgRFe9P
IDが実質的に2つある時点で簡単な方法は無いだろ
これ以上荒らしてんじゃねえよ
0123デフォルトの名無しさん2015/12/13(日) 12:32:13.41ID:OeYxj6fv
マクロを駆使すれば可能
でも質問者不在でアレコレするのは面倒なのだ
保留
0124デフォルトの名無しさん2015/12/13(日) 14:43:20.17ID:pXef0Z5L
closeしますね
0125デフォルトの名無しさん2015/12/13(日) 18:52:13.38ID:NZTqhglG
>>39
argv[]が64bit整数を使わないといけないような非常に大きな整数の場合、例えば
long long a = foo(argv[1]);
と書けるようなfoo()って標準関数にありますか?
0126デフォルトの名無しさん2015/12/13(日) 19:02:24.12ID:lukQoPhs
#include <stdlib.h>
long int strtol(const char *nptr, char **endptr, int base);
long long int strtoll(const char *nptr, char **endptr, int base);
0127デフォルトの名無しさん2015/12/13(日) 20:45:56.44ID:vZabZWT7
//a.h
typedef struct aaa_t aaa;
aaa *aaa_0 ();
void aaa_1 (aaa *);
void aaa_2 (aaa *);
void aaa_3 (aaa *);
aaa *aaa_4 (aaa *);
-----------------------------------------
//a.c
struct aaa_t {
int a;
char *b;
void *c;
int d;
int e;
int f;
};
aaa_0 とかの定義
-----------------------------------------
//b.c
#include "a.h"
void f () {
aaa *p = aaa_0 ();
aaa_1 (p);
aaa_2 (p);
aaa_3 (p);
}
今現在Cでこんな感じになってるプログラムをC++にして
struct aaa_t をclass aaaにしてaaa_1とかをaaaのメンバ関数にしようとしたら
ヘッダファイルa.hのほうにclass aaaの定義を書いてその中にint aとかchar *bとかも
書くことになると思うんですけど、そうするとCのときよりも情報が見えるようになってしまうんですが
それを隠したままにできる方法ありますか?
0128デフォルトの名無しさん2015/12/13(日) 20:49:28.59ID:4HT+vwrK
pimplでぐぐる
0129デフォルトの名無しさん2015/12/13(日) 21:28:27.41ID:vZabZWT7
ありがとうございました
ヘッダファイルの方でクラスを抽象クラスにするしかないのかとか思ってました
01301252015/12/13(日) 21:32:46.95ID:NZTqhglG
>>126
回答ありがとうございました。
0131デフォルトの名無しさん2015/12/13(日) 22:51:14.40ID:EpxG0SJy
>>129
抽象クラスで何か不満でもあるの?それが pimpl で解消される?
0132デフォルトの名無しさん2015/12/13(日) 23:00:33.98ID:vZabZWT7
継承させるのは不満は大有りだった
今教えてもらったものでもCに比べたらポインタの分サイズは大きくなるけど
0133デフォルトの名無しさん2015/12/13(日) 23:13:17.80ID:EpxG0SJy
>>132
そのサイズの増加を受け入れるほどに継承に何か実害がある?
実装隠蔽の手法としてどうも pimpl のほうが人気がある理由がよくわからん。
委譲コード書くのもめんどいし。
0134デフォルトの名無しさん2015/12/13(日) 23:18:54.26ID:pXef0Z5L
継承は基底クラスの実装への依存が発生する悪手なんだよね
0135デフォルトの名無しさん2015/12/13(日) 23:37:27.90ID:vZabZWT7
元々一つなのを二つに分けるのは何か不自然な感じがしたから
サイズに関しては仮想関数へのポインタ持つから継承でも増えるってのもあるし
0136デフォルトの名無しさん2015/12/13(日) 23:44:03.11ID:XZ6E7GcH
>>134
どこに依存が発生してんのよ
http://ideone.com/B748fb
0137デフォルトの名無しさん2015/12/14(月) 00:16:21.17ID:zTGRmQeT
>>135
クラスが二つに分かれるのは pimpl でもいっしょじゃないの?

比較記事もけっこうあるね。
https://www.google.co.jp/search?q=interface+";pimpl"
0138デフォルトの名無しさん2015/12/14(月) 01:42:56.68ID:MegyS/CV
private変数を隠蔽するだけのために面倒くさいことをさせてくれるもんだ
0139デフォルトの名無しさん2015/12/15(火) 02:04:47.70ID:GD1VdqaI
linuxのforkが意味解らん
forkを実行した時点で、forkの戻り値のpidが違うだけの同じコードが実行されるプロセスが複製されるの??

何がどうなってるのかさっぱりだけど衝撃的過ぎる
0140デフォルトの名無しさん2015/12/15(火) 03:33:31.62ID:AjaVKfD6
例えばファイルを開いててfork()して、子プロセスが更新すると
親プロセスでファイルを見ると更新されてる。 
0141デフォルトの名無しさん2015/12/15(火) 05:25:11.90ID:RYa4o3uw
std::vectorを使う時の質問なんですけど、クラスのメンバー変数として宣言する時ってどうやってサイズ指定するんですかね?

#include <vector>
using std::vector;
class vtest
{
public:
vector<int> hoge(10);
}

みたに書くと型を指定しろって言われて、個人的には関数として認識されてるんじゃないかなって思うんですけれど…
0142デフォルトの名無しさん2015/12/15(火) 05:39:14.20ID:B8igkfF6
>>139
その通り
何でこんな面倒な機能があるかはこことか参考になるかと
http://www.ncad.co.jp/~komata/c-kouza3.htm
0143デフォルトの名無しさん2015/12/15(火) 06:58:46.88ID:1RaqkxGq
>>141
vtest() : hoge(10) {}
0144デフォルトの名無しさん2015/12/15(火) 07:05:23.53ID:RYa4o3uw
>>143
つまりはクラスのコンストラクタで渡せ、って事でいいのかな?
なんかいろいろ試してたら
hoge._BConstruct([要素数],[数値])で初期化できるっぽい…?
0145デフォルトの名無しさん2015/12/15(火) 07:13:02.00ID:RYa4o3uw
連投スマン
hoge.resizeで要素数の設定から初期パラメータまで設定できるっぽいな、サンクス
0146デフォルトの名無しさん2015/12/15(火) 09:51:36.66ID:9AhINhvX
>>133
抽象クラスは委譲コードの分の余地がないので
基底への変更にものすごく弱い
0147デフォルトの名無しさん2015/12/15(火) 10:10:25.74ID:FTksUk/b
>>146
「委譲コードの分の余地」ってどんなの?
pimpl にしかできないことっぽいんだけど、思いつかない。
0148デフォルトの名無しさん2015/12/15(火) 10:14:40.27ID:9AhINhvX
>>147
pimplの呼び出し部分で変更余地があるだろ
委譲コードなら何でもそうだけど
0149デフォルトの名無しさん2015/12/15(火) 10:29:07.10ID:FTksUk/b
>>148
それがなんで抽象クラスではできないことになるのか、わからない。
0150デフォルトの名無しさん2015/12/15(火) 11:12:33.82ID:9AhINhvX
>>149
言っている意味がわからない、派生先で委譲するという事か?
その場合も結局クラス定義で委譲先への依存が起こるので同じ事
継承してファクトリ経由で生成しても必ず何処かで実装依存する事は避けられない
pimplの場合はpimplのみの緩衝で防げる
0151デフォルトの名無しさん2015/12/15(火) 11:14:47.92ID:9AhINhvX
訂正、委譲先ではなく委譲元
0152デフォルトの名無しさん2015/12/15(火) 14:19:47.85ID:Z+PgRVVd
>>139
まーWindowsしか知らない人がfork知るとひっくり返るよね
Windowsではスレッドを使うのが一般的だけど
Unix系ではforkでマルチプロセスが基本だったんだよね
他にもファイルの扱いとかいろいろ斬新だよね
0153デフォルトの名無しさん2015/12/15(火) 19:54:49.22ID:crf4TWR5
継承は実行時に合成しにくいんだよね
基底クラスの実装変更が派生クラス全てに影響するし
もうまじさいあくぷんぷん
0154デフォルトの名無しさん2015/12/15(火) 22:34:09.78ID:46Jh9WrX
>>131
vector<int> baka = vector<int>(10);
0155デフォルトの名無しさん2015/12/15(火) 22:52:06.66ID:FTksUk/b
>>150
ごめんよ。↓こんなコードを比べてると思ってるんだけど、あってる?

// PimplInterface.hpp
struct PimplInterface {
int f();
private:
class Impl;
Impl* pimpl;
};
// PimplInterface.cpp
struct PimplInterface::Impl {
int f() { return 1; }
};
int PimplInterface::f() { return pimpl->f(); }

// AbstractInterface.hpp
struct AbstractInterface {
virtual int f() = 0;
};
// AbstractInterface.cpp
struct AbstractInterfaceImpl : AbstractInterface {
int f() { return 1; }
};

「基底の変更」は AbstractInteface つまり外部インターフェースの変更のことで、
pimpl の「委譲コード」が PimplInterface::f() の定義のことだと思うんだけど、
やっぱり「基底の変更にものすごく弱い」とか「実装依存」とか言ってるのが
なんのことだか見えてこないんだ。

*Interface にどんな変更が入った場合に起こる問題のことを言ってるの?
0156デフォルトの名無しさん2015/12/16(水) 11:31:36.35ID:3uR0/mnz
>>155
派生クラスも実装だぞ
基底クラスへの変更は、派生の非公開部分の定義に影響が波及しうる
防止する方法は委譲が簡単で、その極端な物はpimpl
0157デフォルトの名無しさん2015/12/16(水) 11:57:18.05ID:3uR0/mnz
非公開ではなく非仮想部分の定義と言ったほうが良かったかな
派生クラスでpublicメンバ増やす事もよくあるし
0158デフォルトの名無しさん2015/12/16(水) 12:08:47.02ID:fTEXesYP
「インターフェース」なのだからインタフェース以外からアクセスしちゃダメだろう

個人的には利用者側に
AbstractInterface *x = new AbstractInterfaceImpl;
のように使わせることを強制するからインターフェースは使わないけど
0159デフォルトの名無しさん2015/12/16(水) 12:14:31.21ID:3uR0/mnz
>>158
インスタンス化についてはファクトリ云々でとっくに言及したつもりだが…
0160デフォルトの名無しさん2015/12/16(水) 12:40:53.99ID:3uR0/mnz
まあ間違ったことは言ってないはずなので、読めば理解できると思う
それが何の役に立つかは、大規模になってみればわかる
0161デフォルトの名無しさん2015/12/16(水) 23:04:32.63ID:ReBK9+wB
>>156-157
インターフェースが変わったら実装に影響が波及しうるのはあたりまえじゃないの?
それの何が問題になるの?

仮に問題があったとして、 AbstractInteface を変更したときに
AbstractInterfaceImpl に変更が入るのが問題だというのなら、
PimplInterface を変更したときに PimplInterface::Impl や
PimplInterface::f() に変更が入るのも同じように問題なんじゃないの?
0162デフォルトの名無しさん2015/12/17(木) 08:13:07.84ID:qGFinMD/
pimplの目的はクラスのコンパイルコストを実行時コストに転化する事だけ
実装に依存するとかしないとか継承がいいか移譲がいいかとかは関係のない話だよ
0163デフォルトの名無しさん2015/12/17(木) 20:25:09.68ID:M1gCQnPP
>>161
Pimplは公開側のヘッダへの変更がなくなり依存元の定義には影響しない
全く別
0164デフォルトの名無しさん2015/12/17(木) 20:26:53.95ID:M1gCQnPP
>>162
いいやそれも違う
実装をきちんと分離している分、モジュール性は上
継承が無駄な依存関係を作るのはもはや常識だろ
0165デフォルトの名無しさん2015/12/17(木) 20:37:51.88ID:NMgzdQxk
struct large
{
    char data[5'000'000];
};

int main()
{
    auto p = new large{};
    return 0;
}

出力
1>------ ビルド開始: プロジェクト:CppTest, 構成:Debug x64 ------
1> main.cpp
..........main.cpp(8): fatal error C1060: ヒープの領域を使い果たしました。
========== ビルド: 0 正常終了、1 失敗、1 更新不要、0 スキップ ==========

配列のサイズを5MB以上にすると上記エラーが出てコンパイルに失敗するんですが、どのように直せばいいでしょうか。
0166デフォルトの名無しさん2015/12/17(木) 20:42:26.86ID:T7FXs248
c++erはpimplとか言ってるけど所詮はbridgeパターンでしかない
デザインパターンを語るコンテキストではbridgeパターンと呼ぶ
c++に特有のコンパイルコストを削減するテクニックの事を語るコンテキストではpimplイディオムと呼ぶ
pimplイディオムをbridgeパターンの意味で語る人は理解が浅い
0167デフォルトの名無しさん2015/12/17(木) 22:39:55.30ID:RFQK/sQs
>>165
ここは初心者が討論する場です
場違いだから動的メモリをGoogle様に教えを乞え
0168デフォルトの名無しさん2015/12/17(木) 23:51:42.56ID:SCk0qjaE
>>163
それ抽象インターフェースでも同じだろ。
>>164
抽象インターフェースでも実装をきちんと分離できてるだろ。

違うというのなら >>155 のコードに対する変更で、
抽象インターフェースの場合だけ問題が起こるような例を挙げてみろよ。
0169デフォルトの名無しさん2015/12/18(金) 10:44:40.42ID:mykTsSjn
>>166
コンパイルが速いのは翻訳単位の分離の効果の一つでそれだけではないだろ
それとpimplは確かに大部分はbridgeと見ることはできるが
形式上の汎化なので変更のすりあわせは考えなくていい利点がある

>>168
例を挙げてみろという以前に
そもそも>>155では実装が見える位置に必要な時点で論外だと思うが
0170デフォルトの名無しさん2015/12/18(金) 11:16:58.75ID:auMwa2zz
>>169
は?コード読めてないのに偉そうに言ってたの?
hpp →使用者から見える位置
cpp →使用者から見えない位置
だろ?

どちらも実装は使用者から見えないところで好きにできる。
0171デフォルトの名無しさん2015/12/18(金) 11:20:44.51ID:O/HlozI2
>>169
おいおい…
0172デフォルトの名無しさん2015/12/18(金) 18:28:01.68ID:LQ+VNahf
不毛な争いはもうやめようよ
みんなでC#を使おう
0173デフォルトの名無しさん2015/12/18(金) 18:57:55.99ID:znmCm21O
いやいや、漢は黙ってアセンブリでしょ
0174デフォルトの名無しさん2015/12/18(金) 21:25:47.60ID:LbePE/nB
センブリは苦い
0175デフォルトの名無しさん2015/12/19(土) 09:37:32.82ID:n5v6Wxrv
>>165ですが自力で問題を解決できないので、別の質問スレに改めて投稿しようと思います。失礼しました。
0176デフォルトの名無しさん2015/12/19(土) 13:18:46.45ID:O2ZUrLIw
>>175
え gccなら何の問題もないけど。数ギガでもいけるよ。
vcにそんな設定あったかな。
0177デフォルトの名無しさん2015/12/19(土) 17:09:31.16ID:dNXWfsX0
5MB以上が無理ってのはにわかに信じがたいんだが
たかが32bitのフルハイビジョンの画像でも7MBあるのにさー
今時5MB以下じゃ何にも出来ねーじゃん

ありえないと思ってVS3015でコンパイルしたら普通にできたし、当然

struct large
{
    char data[5000000];
};

new large();
0178デフォルトの名無しさん2015/12/19(土) 17:38:00.46ID:L2SZ6ujc
VS3015なら出来るのかも知れないが俺のVS2015じゃ同じくC1060になった
この手順通りにやれば解決すると思うけど面倒くさい
https://msdn.microsoft.com/ja-jp/library/yz7kx3y2.aspx
質問者はこれは試したのか?
0179デフォルトの名無しさん2015/12/19(土) 20:20:28.18ID:8yNt9Gxa
>>177
3015・・・
0180デフォルトの名無しさん2015/12/19(土) 20:31:32.46ID:phu0BYTx
バグじゃね
そんな糞コンパイラ捨てちまえ
01811752015/12/19(土) 20:53:16.90ID:n5v6Wxrv
"vcvarsall amd64"を実行してコマンドライン上で"cl main.cpp"という形にしてもだめでした。
タスクマネージャを見てるとcl.exeが4GB近くメモリを消費した上でコンパイルエラーになっていました。

しかし>>177さんがやったように、newの波括弧を丸括弧に変えるとすぐにコンパイルが完了しました。
どうもありがとうございました。
0182デフォルトの名無しさん2015/12/19(土) 23:34:04.44ID:O2ZUrLIw
() でも {} でもいいのはc++11でしたけ?
c++11準拠のgccならどっちでも出来ます。
0183デフォルトの名無しさん2015/12/21(月) 18:59:46.87ID:WFqlvm2l
GCCがC++11に準拠していたとは初耳です
0184デフォルトの名無しさん2015/12/21(月) 20:12:38.96ID:KpoKQwNC
class Node {
Node *node;
~Node() {
delete node;
}
};

こんなコードを考えたのですが、インスタンス生成時、nodeポインタは常にNULLで初期化されると考えてよいですか?
言語仕様上仮にポインタ型メンバ変数へのNULL初期化が保証されない場合、
delete node;のタイミングで未知のアドレスを参照し、セグメントエラーが発生する気がします。

Clangでは常にNULLで初期化されることを確認していますが、これは言語仕様として本来保証されていることなのでしょうか?
0185デフォルトの名無しさん2015/12/21(月) 20:19:38.56ID:hysKJ3zZ
null初期化は保証されません
コンストラクタで0にしておきましょう
0186デフォルトの名無しさん2015/12/21(月) 21:56:30.70ID:pRvfBbh1
https://gcc.gnu.org/gcc-4.8/cxx0x_status.html
0187デフォルトの名無しさん2015/12/22(火) 15:56:31.30ID:yVaIQO7m
>>185
たしかにデフォルトコンストラクタのアセンブラコード読むとNULLでの初期化は行われていませんでした。
Clang上で常にNULLになるのはたまたまなのかもしれません。
0188デフォルトの名無しさん2015/12/22(火) 21:49:46.29ID:iXAEsn1T
nullptr使えカス
0189デフォルトの名無しさん2015/12/22(火) 23:47:23.54ID:ntafDQl8
むぐぐ…
0190デフォルトの名無しさん2015/12/23(水) 01:04:09.01ID:Bzaz3PF3
デバッグモードだと何もしなくてもNULLで初期化してくれるかもね
0191デフォルトの名無しさん2015/12/23(水) 01:32:56.47ID:xKy7nhKt
つてか、デバッグモード時は5A5Aとかbeefとかdeadとかで初期化して欲しい
ゼロだと動いちゃうかもしれない
0192デフォルトの名無しさん2015/12/23(水) 01:35:24.25ID:arljeKOE
feeefeee
ふえぇぇふえぇぇ
0193デフォルトの名無しさん2015/12/23(水) 01:58:19.57ID:at23GWqE
デバッグモードってVSのそれでしょ?
それならcdcd...で初期化されてない?
0194デフォルトの名無しさん2015/12/23(水) 09:21:35.68ID:ODpqAUDQ
"ヘヘヘヘヘヘ…"
だっけ
0195デフォルトの名無しさん2015/12/23(水) 15:31:40.52ID:ECsqfIr3
フフフフ・・・
じゃなかったっけ
0196デフォルトの名無しさん2015/12/23(水) 15:55:47.35ID:r+tlUph/
ハハハハ…
だったかも
0197デフォルトの名無しさん2015/12/23(水) 16:12:39.75ID:xKy7nhKt
cdcd…なら "ヘヘ…" だな
0198デフォルトの名無しさん2015/12/23(水) 22:38:54.77ID:7WMNq5Xe
メルポン ワンドボックス
0199デフォルトの名無しさん2015/12/23(水) 22:57:15.26ID:1ZCzEE1G
構造体のポインタ型メンバは確かに毎回NULLだった気がする。
仕様だと思ってたぜ。
NULL初期化って余計なお節介だな。
0200デフォルトの名無しさん2015/12/23(水) 23:24:02.70ID:McSS3rOm
clangは3.7から配置newの時もゼロ初期化されるようだ
規格でゼロ初期化に変更あったっけ
0201デフォルトの名無しさん2015/12/24(木) 01:00:03.19ID:VDgCwlJn
構造体のメンバでも、ゼロ初期化のコードを明示的に書かない限りゼロに初期化されることは無いと思うけど
もしなっていてもそれはタマタマと考えるべきかと
0202デフォルトの名無しさん2015/12/24(木) 01:10:23.72ID:K6EVLooj
もしかして
new Pod; // 初期化されない
new Pod(); // ゼロ初期化される
の違いが分かってないとか
0203デフォルトの名無しさん2015/12/24(木) 01:19:35.59ID:fAuO55DH
昔それでハマったわ
0204デフォルトの名無しさん2015/12/24(木) 02:01:32.75ID:V9PGbmLB
デフォコンを書いとけばいんだよね・・・
0205デフォルトの名無しさん2015/12/24(木) 11:28:46.92ID:JZgNJNA5
この場合のPodのデフォコンは未実装と考えてよい?
0206デフォルトの名無しさん2015/12/24(木) 12:25:55.70ID:dR07FXZ0
>>202
これ、規格になってる??
0207デフォルトの名無しさん2015/12/24(木) 18:29:24.36ID:tvPg4lrF
これからcを学んで仕事に使うんですが基本的な文法や機能は覚えるとして、他になにかやっておいたほうがいいことってありますか?
0208デフォルトの名無しさん2015/12/24(木) 18:46:20.52ID:Ar5g1rkf
どの分野で、というのが一番大事だわな
0209デフォルトの名無しさん2015/12/24(木) 19:55:11.14ID:dcfXgtmn
組み込み系…かなあ
0210デフォルトの名無しさん2015/12/24(木) 20:13:24.98ID:dw0e86QI
今の時代にcを学ぶ仕事ってすげぇニッチだな
0211デフォルトの名無しさん2015/12/24(木) 22:17:30.83ID:Ar5g1rkf
組み込み系でC言語を使うのが初めてなら↓の本を買っといた方がいいかもしれない
【改訂版】組込みソフトウェア開発向けコーディング作法ガイド[C言語版]

あと、職場独自の作法には慣れといた方がいいかもしれない
0212デフォルトの名無しさん2015/12/25(金) 02:23:10.06ID:0EBqQae1
Web系が見た目?華やかなだけで、
安定して儲かってるのが自動車産業で、
その大多数がC言語なのにな
0213デフォルトの名無しさん2015/12/25(金) 03:04:12.73ID:DzMu9hDD
じゃ misra にも慣れとくべきか
0214デフォルトの名無しさん2015/12/25(金) 20:31:38.55ID:/bEJrxfY
>>199
アドレスの参照値がたまたまNULLだったってことだと思うが。
二回目の呼び出しではNULL以外の値が入ってるはずだぜ?
0215デフォルトの名無しさん2015/12/26(土) 22:16:59.57ID:IeRmux4p
CやC++以外の言語しか使ったことないと、数年程度の経験で俺は凄腕のPGだと勘違いしやすい
C++の摩訶不思議な世界に行くと自分はゴミ同然だと気付かせてくれる
0216デフォルトの名無しさん2015/12/26(土) 22:21:14.22ID:bmbNcMd5
と言うとんでもない中二をこじらせてしまうのがC++の悪いところ
0217デフォルトの名無しさん2015/12/26(土) 22:33:59.51ID:HLaSlD1p
C++で数年過ごして数々の厨二的な黒魔術を使いこなすようになってから他の言語に行くとそれが殆ど黒歴史だったと気が付くんだよね
0218デフォルトの名無しさん2015/12/26(土) 22:39:10.27ID:+JcsFmSH
でもまぁC++から他の言語は行きやすいけど
逆はキツイよね
0219デフォルトの名無しさん2015/12/26(土) 23:21:16.13ID:YV12MLKo
C/C++の縛りには慣れておいたほうがいいね
C/C++の縛りは現実の計算機の縛り
0220デフォルトの名無しさん2015/12/27(日) 03:03:31.33ID:zaprQqTh
せっかくいい石採用してるんだから、直接アセンブリ言語使わせてくれよ!
と思う事しばしば
0221デフォルトの名無しさん2015/12/27(日) 09:08:19.31ID:PMis8xQ4
という役に立たないDIY的な発想のヲタを量産してしまうのがCの悪いところ
他人への価値提供のためでなく自分の満足のためにCを採択する
0222デフォルトの名無しさん2015/12/27(日) 13:47:27.66ID:9EE16oiU
それが楽しいということで
0223デフォルトの名無しさん2015/12/28(月) 23:47:04.43ID:ESQO+1YW
1<p->c
というコードを見て一瞬思考が止まった
0224デフォルトの名無しさん2015/12/29(火) 00:03:33.08ID:J2wZ8xV4
>>221それこそまさにC++じゃねw
0225デフォルトの名無しさん2015/12/29(火) 00:17:26.08ID:yDsgWReu
慣れると美味しいC++という事で
0226デフォルトの名無しさん2015/12/29(火) 02:00:39.39ID:RQT/AIDK
C++は熟練者にとって開発効率が向上する方向に進んでいる
単なる趣味でやってるオタがC++のやっかいなところに嵌って暇つぶししたって何の問題もない
0227デフォルトの名無しさん2015/12/29(火) 11:21:41.23ID:tOZW1499
vector<int> v(10);
vector<int> v{10};
これを正しく使い分けないといけない言語改定が開発効率向上とな
0228デフォルトの名無しさん2015/12/29(火) 12:46:42.30ID:RQT/AIDK
>>227
はい。熟練者はそんなところで混乱したりしませんから。
0229デフォルトの名無しさん2015/12/29(火) 13:05:11.52ID:yDsgWReu
func() と func[] の違いぐらいで。
0230デフォルトの名無しさん2015/12/29(火) 13:34:33.37ID:TUTY/6iG
>>227
perfect forwarding(完全転送)という名の完全でも転送でも無いstd::forwardを正しく使うくらい朝飯前だろ?
0231デフォルトの名無しさん2015/12/29(火) 13:53:41.29ID:m+tOu9MT
そらどちらの括弧も同じ意味になる言語の方が稀だろうに。
0232デフォルトの名無しさん2015/12/29(火) 21:40:43.02ID:PaSnbjgD
>>230
「型」の完全転送だからな。
0233デフォルトの名無しさん2015/12/29(火) 22:14:54.20ID:yDsgWReu
[って演算子なんだぞ へへん
0234デフォルトの名無しさん2015/12/29(火) 22:34:59.08ID:RwgMy6a6
>>232
どうしてそう息を吸って吐くように嘘をつくのか

std::forward<string>( std::string{} )
型は変わっている
0235デフォルトの名無しさん2015/12/30(水) 22:59:16.88ID:gI1ebqZA
[]が演算子だなんて規格に明記されてたか?
と思って調べたら13.5節か
何でこんな変なとこに定義が書いてあんだよ
0236デフォルトの名無しさん2015/12/30(水) 23:57:37.11ID:JlgYQswX
Cの時代から演算子だったともうけど・・・
添字演算子とか書いてあるサイトも有るよ
0237デフォルトの名無しさん2015/12/31(木) 01:38:07.39ID:W0RDddJC
昔のネタにあったでしょ。
a[0] でも 0[a] でもいいって。
ちょとウニるわな。
0238デフォルトの名無しさん2015/12/31(木) 16:39:09.60ID:2szMeuyR
>>234
変わってないよね?
02392342015/12/31(木) 17:19:22.64ID:QJzU9MHD
>>238
どう見ても変わってるのだが
http://melpon.org/wandbox/permlink/5ln4xBZ6GrD2jUbw
0240デフォルトの名無しさん2015/12/31(木) 18:09:22.91ID:QJzU9MHD
decltypeはvalue categoryで結果が変わるから立証にはならないか

string型がstring&&型に変わると言いたかった
0241デフォルトの名無しさん2016/01/01(金) 14:17:09.15ID:7oU3J/K5
CSV データのアクセスについて質問です。環境は Unity です。

no, name, state, price
1, yamada, sleep, 100
2, higuchi, alive, 250
3, inage, alive, 170

みたいに、列に名前をつけているデータがあります。
列はたまに動的で、name と state の間に列が割り込んだりします。

はじめは const で state = 2 として、
決め打ちで読み出していたのですが、
列がずれると定義を変更しなくてはいけません。

そこで、列名でアクセスすれば良いのではないかと思い、
例えば 2番の state を調べるときに
state が何列目か一行目を右に調べてから
2行目の何列目という風にアクセスしています。

一応できているのですが、もっと良い方法はないでしょうか。
あるいは、普通こういうときはどうすべきでしょうか。

この読み込んだ CSV は、かなり頻繁にアクセスするので、
そこも踏まえてアドバイス頂けると嬉しいです。

なんでカラムが変わる前提なのかと疑問があると思いますが、
そこはご容赦お願いします。
0242デフォルトの名無しさん2016/01/01(金) 14:33:17.05ID:R5F49H24
>>241
列名 ⇒ 列番号 の対応表を作ればいいだけじゃね?
0243デフォルトの名無しさん2016/01/01(金) 14:33:27.43ID:yq6n8seg
データ部分を二次元コレクションに格納
ヘッダ部分をヘッダ名->インデックスのディクショナリに格納
おしまい
0244デフォルトの名無しさん2016/01/01(金) 21:33:51.36ID:7oU3J/K5
>>242
それだと、列が増えたりする度に定義ソースを書き換えるような…

>>243
すみません、二次元コレクション調べたのですがイミフでした。
にわかなもので、すみません。


const しているのを変数にして、
一番最初に列の名前の場所を動的に拾い、
構造体に放り込んでみます。

みなさん、ありがとうございました。
0245デフォルトの名無しさん2016/01/01(金) 22:01:13.16ID:NO+H6ZMg
>>244
> それだと、列が増えたりする度に定義ソースを書き換えるような…

当然「動的」に作るってこと

>>243
> ヘッダ部分をヘッダ名->インデックスのディクショナリに格納

と同じことを言っている
0246デフォルトの名無しさん2016/01/01(金) 22:22:51.52ID:dF7ELeO+
.NetのDataTableをパクったクラスを作る
ファイルからデータを読み込んで上記クラスのインスタンスに格納する
以上
0247デフォルトの名無しさん2016/01/01(金) 23:36:34.95ID:9DJLBWi4
>>241
>一応できているのですが、もっと良い方法はないでしょうか

いえそれが最善です
>>242-246のたわごとは無視して下さい
0248デフォルトの名無しさん2016/01/02(土) 18:39:57.59ID:nW8KZWOh
#include <iostream>

class A {
public:
A(){}
~A(){}
int i:1;
};

int main(int argc, char const* argv[])
{
A a;
std::cout << a.i ;//0

return 0;
}

UE4のソース見ていると、
メンバ変数末尾に:がついたコードがあるんですが一対何なんでしょう

なぜコンパイルエラーにならないのか?

UEヘッダーツールで後々セッティングするための記述なんでしょうか?
よろしくお願いします
0249デフォルトの名無しさん2016/01/02(土) 18:42:48.44ID:5/Tw741l
ビットフィールド知らんのか
0250デフォルトの名無しさん2016/01/02(土) 18:49:51.57ID:BIgpFdUh
>UE4のソース見ていると

自分が知っているものを他人も知っている前提で物申すな低能
0251デフォルトの名無しさん2016/01/02(土) 18:51:55.62ID:nW8KZWOh
ありがとうございます
使ったことなかったので知りませんでした

どこかで聞いたことぐらいはあったかも知りませんが、
いまいちぐぐり方が難しいので助かりました
C++ デフォルト メンバ変数 : とか結構見当違いな方向でぐぐってました

ありがとうございました
0252デフォルトの名無しさん2016/01/02(土) 19:03:02.99ID:9k2o+ba6
ビットフィールドってなんだっけ?と数秒w
思えば一回も使った事ないです。
0253デフォルトの名無しさん2016/01/02(土) 20:09:45.36ID:Ko89Gf9x
>>250
レスにソース書いてあるのに何を言ってるんだよ
0254デフォルトの名無しさん2016/01/05(火) 18:38:18.23ID:zgQ43Iu9
答え:SQLiteを使う
0255デフォルトの名無しさん2016/01/08(金) 20:37:47.38ID:gc7pwQgr
int func(Form^ form);

この^記号ってどういう意味?
0256デフォルトの名無しさん2016/01/08(金) 20:39:12.47ID:yJqiucPC
>>255
それは別の言語だからVisual C++ C++/CLI関連のスレで訊け
0257デフォルトの名無しさん2016/01/08(金) 20:41:04.59ID:h+RBpIK2
| が bit毎or で & が bit毎のand であるように、
^ は bit毎の xor
0258デフォルトの名無しさん2016/01/08(金) 20:48:43.06ID:/U+i+vMx
>>255-257
いや 2項演算子じゃないぞ
C++/CLI のハンドル型とかいうポインタ(*)の変形らしい
0259デフォルトの名無しさん2016/01/08(金) 20:51:12.19ID:h+RBpIK2
あー 関数宣言記述での話だったか
頭の int が見えてなかった
ありがとね >>258
0260デフォルトの名無しさん2016/01/08(金) 20:59:30.22ID:2h/9GNmm
>>257-259はQの自演
0261デフォルトの名無しさん2016/01/08(金) 21:03:02.67ID:h+RBpIK2
俺 Qz 認定かー なけるorz
0262デフォルトの名無しさん2016/01/08(金) 23:39:42.16ID:WIwHnmZz
別の言語だったんかい
0263デフォルトの名無しさん2016/01/11(月) 13:29:58.86ID:VxUMtYXU
#define template_key_value <K, V>

template template_key_value
class MapA {};

template template_key_value
class MapB {};

これと同じことをより安全に実現する方法って有りますか?
0264デフォルトの名無しさん2016/01/11(月) 13:41:04.34ID:IUrb95R1
>>263
何も危険なことなんて無いような?

そのままじゃコンパイル通らないけど、そこが問題でも無いだろうし。
クラス定義が空だからテンプレートにする意味が無さそうだけど、そういう話でもないだろうし。
何がしたいのかよくわかんない。
0265デフォルトの名無しさん2016/01/11(月) 15:45:01.43ID:NVJocn8Z
CPPを使う意味が分からない
0266デフォルトの名無しさん2016/01/11(月) 22:00:19.19ID:E66NlO7o
>>265
visual studio使えば自動的にc++やん
0267デフォルトの名無しさん2016/01/12(火) 00:23:03.57ID:fG9YW/Cm
>>266
…??
0268デフォルトの名無しさん2016/01/12(火) 00:34:18.71ID:wtMUPjLq
>>267
VisualStudio使ったこと無いの?
昔から.cppを使う慣習があって、VisualStudio含むいくつかの開発環境ではそれに従うと使いやすくなってるんだよ
0269デフォルトの名無しさん2016/01/12(火) 00:36:04.73ID:wtMUPjLq
ああもしかしたら>>265はCPP=Cプリプロセッサの意味か
そうなら紛らわしい書き方すんな
0270デフォルトの名無しさん2016/01/12(火) 09:32:08.92ID:gKzzuNPX
約一名がアホな誤解しただけで、紛らわしくはないだろ
0271デフォルトの名無しさん2016/01/12(火) 11:00:20.32ID:vQw7MuFL
>>264
すみません書き方間違ってました。
#define template_key_value <typename K, typename V>
template template_key_value class MapA {};
template template_key_value class MapB {};
テンプレートが長く複雑になる場合にわざわざ直書きすると、可読性が悪くなるので別名を付けたいと考えています。
ただC++の世界ではマクロが嫌われているようなので、どうしても以下の様な聞き方を強制されてしまうのです。
template <typename K, typename V> class MapA {};
template <typename K, typename V> class MapB {};
0272デフォルトの名無しさん2016/01/12(火) 11:16:41.18ID:zdBaNW7Z
>>271
「嫌われている」から排除を強制と思うのはおかしい。
実際にマクロを使って何が問題なのか、よく考えて判断したほうが自由になれるよ。
使い終わったら #undef してもいいんだぜ。
少なくとも書き込まれた例だけではマクロを使うほどの話とは思わないけど、実際はもっとあるんだろうな。
違いを無視できる話かどうか知らんけど、ひとつのクラステンプレート内にクラスを定義する形でいくらか
マシにできるかもしれない。
0273デフォルトの名無しさん2016/01/12(火) 12:44:56.38ID:jL8tZsFO
template <typename K, typename V> class MapA {};
typedef MapA<string, int> MAP_A_1;
typedef MapA<string, string> MAP_A_2;
とかじゃダメなの?
0274デフォルトの名無しさん2016/01/12(火) 17:49:46.69ID:rnRes0fv
>>263
言うほど短くならないような。
templateが冗長だから頭のtemplateもマクロに含めたら?
0275デフォルトの名無しさん2016/01/12(火) 18:50:45.22ID:ezb8i33T
#define T template
#define L long
#define typename TN
0276デフォルトの名無しさん2016/01/12(火) 23:47:38.33ID:9sPejAjF
>>275
(アカン)
0277デフォルトの名無しさん2016/01/13(水) 13:25:11.31ID:36fPT7nK
こう書けるのが一番理想だな

template <typename K, typename V> class Map {};
class MapA : Map<K, V> {};
class MapB : Map<K, V> {};
0278デフォルトの名無しさん2016/01/13(水) 20:41:54.84ID:kNuNR485
fscanfでcsvファイルからデータを読み出したいのですが、
fscanfの返り値がおかしく、EOFとならずに処理が終了しません。

データの列要素は15なので、返り値も15となるはずなのですが、
「1」と表示されてしまいます。

行は2千万行近くありますが、その値を過ぎても終了しません。

csvファイルのデータ容量は1.42GBあります。
助言宜しくお願いします。

問題だと思われるループとfscanfの部分を記載します。

while(ret=fscanf(fp,
0279デフォルトの名無しさん2016/01/13(水) 20:44:10.04ID:kNuNR485
while(ret=fscanf(fp,"%lf,%lf,%lf,%lf,%lf,%lf,%lf,%lf,%lf,%lf,%lf,%lf,%lf,%lf,%lf",&a,&b,&c,
&d[0][0],&d[0][1],&d[1][0],&d[1][1],&d[2][0],&d[2][1],
&e[0][0],&e[0][1],&e[1][0],&e[1][1])!=EOF){

    処理等

}
0280デフォルトの名無しさん2016/01/13(水) 20:46:51.56ID:Lg0tGVPB
>>278
fopen(); 付近はどうなってるのか
0281デフォルトの名無しさん2016/01/13(水) 20:49:56.90ID:kNuNR485
>>280
すいません書き忘れてました。

FILE *fp

fp=fopen("example.csv","r");

if(fp==NULL){
printf("no file\n");
exit(0);
}
0282デフォルトの名無しさん2016/01/13(水) 20:50:31.77ID:Lg0tGVPB
>>279
ああなるほど、fopen関係なさそう。

> while( (ret = fscanf(fp,"…",)) != EOF){
みたいにカッコで明示すべきでは。

というか、それコンパイル通ってるの?
0283デフォルトの名無しさん2016/01/13(水) 20:50:57.42ID:XHmQOsbK
とりあえず
while ((ret = fscanf()) != EOF) な
ret = fscanf() != EOF だと fscanf() != EOF の論理演算の結果が ret に入る

csvファイルなら fgets() で行を切り出して sscanf() したほうがよさそう

なお、厳密にやり始めると一文字ずつパースするはめになるだろう
0284デフォルトの名無しさん2016/01/13(水) 20:52:18.55ID:Lg0tGVPB
>>282は間違い。コンパイル通るか
0285デフォルトの名無しさん2016/01/13(水) 20:58:57.11ID:kNuNR485
retの部分は解決できました。ありがとうございます。
今確認してみたところ、最終行を迎えたあと、fscanfの返り値は0となっていました。
0286デフォルトの名無しさん2016/01/13(水) 21:02:30.81ID:kNuNR485
最終行を迎えてもEOFである-1が返ってこない理由としては、どのような理由が考えられるでしょか?
0287デフォルトの名無しさん2016/01/13(水) 21:09:44.61ID:kNuNR485
その場しのぎですが、
while((ret=fscanf())!=0)とすることで解決しました。
エクセルファイルの作成方法が間違っていたのかもしれません。
そちらを確認したいと思います。

ありがとうございました。
0288デフォルトの名無しさん2016/01/13(水) 21:10:13.23ID:Lg0tGVPB
ret がunsigned とか
0289デフォルトの名無しさん2016/01/13(水) 21:11:30.82ID:Lg0tGVPB
ああ>>288は無視して。先程から薬が切れて不安定だな俺は。
>>283だけ見て。
0290デフォルトの名無しさん2016/01/14(木) 00:45:24.54ID:guxsAoup
>>285-287
fscanf() の戻り値の仕様見直せ。
0291デフォルトの名無しさん2016/01/14(木) 07:40:34.39ID:dQ9Y6guQ
>>1
RPGツクール2000 , RPGツクールMV https://tkool.jp/mv/ ( JavaScript 採用 )

WOLF RPGエディター http://www.silversecond.com/WolfRPGEditor/

デュエル・マスターズ Android版 ,i-OS版、公式 http://dm.takaratomy.co.jp/extra/dmapp/entrygate_ds/
デュエル・マスターズ対戦CGI ex
https://web.archive.org/web/20150809154946/http://www53.atwiki.jp/dmsuishinparty/pages/314.html

デュエル・マスターズ(デュエマ)DM ONLINE 1.8a  /  VanGuard ONLINE 1.5a
https://web.archive.org/web/20150809160254/http://uhyohyohyo.sak ura.ne.jp/hsp.html

ヴァンガード専用ネット対戦ツール【 VanGuard Online 】
https://web.archive.org/web/20150809155032/http://kiimaa.jugem.jp/?eid=61

「カードファイト!!ヴァンガード」のネット対戦ができる公式オンラインゲーム「Cardfight!! Online」 2015年冬スタート
https://web.archive.org/web/20150809153724/http://supersolenoid.blog63.fc2.com/blog-entry-6886.html

遊戯王 Automatic Dueling System
https://web.archive.org/web/20150809164855/http://www3.atwiki.jp/ads-wiki/pages/20.html

遊戯王 デュエル・オンライン
https://web.archive.org/web/20150809171527/http://www31.atwiki.jp/vipdo/pages/15.html
https://web.archive.org/web/20140628005202/http://do.yugioh-portal.net/

ウィクロス( WIXOSS ) WEBXOSS http://webxoss.com/about_en.html http://webxoss.com/DeckEditor/

BG(ボードゲーム)Engine https://web.archive.org/web/20151209080842/https://bgengine.net/
https://web.archive.org/web/20151209172205/http://14owl.hateblo.jp/entry/2015/12/09/011234

アプレンティス  マジック:ザ・ギャザリング(MtG)オンライン化 http://homepage1.nifty.com/Q_Q/ap.html
https://web.archive.org/web/20151202202725/http://homepage1.nifty.com/Q_Q/ap.html
0292デフォルトの名無しさん2016/01/14(木) 07:41:31.92ID:dQ9Y6guQ
【 オンラインTCGエディター 】   >>1,>>291

デュエル・マスターズ的な非電源TCGの 《 オンライン化ツクール系ソフト 》 制作の企画。

例えば、ガチンコ・ジャッジを直ぐにでも導入できる機能を持っておりながら、
当面それを扱わず単純化させておいて、事後的に導入拡張する際に当該システムを
ブロック構造の組み合わせで後付け挿入できるように予めシステム化してあるソフト(エディター)。
既存の非電源TCGを劣らずに再現できるならば大概のニーズに応えられる筈。
デュエマ、ヴァンガ、ウィクロス、ポケカ、デジモン、ゼクス、モンコレ、旧ガンダム・ウォー、ライブオン、ディメンション・ゼロ、シャーマン・キング、カードヒーローなど
のシステムを完全再現できるように設計するけど、他に此のTCGの此のシステムは再現希望とか有ったら書け。
マジック:ザ・ギャザリングの全システムを完全に再現するのは無理だから、此れだけは必用だ!って部分のみリクエストしろ。
個vs個、多数乱戦、チームvsチーム、個vsチームを実現し、P2P通信対戦プラグイン有り。

設計思想は 《 RPGツクール 》 が良いかな?  他に、優れたエディター有ったら挙げてみろ。

個人や企業などのベンダーが提示する開発費(見積もり)で折り合えば、発注する。
↓
エディター群から基本コンセプトを絞り込む(もちろんオリジナルで優れた新ネタが有れば導入する)。
↓
遊戯王OCGに関しては、タッグフォース、ADS、デュエルオンラインを発注先ベンダーに研究させる。
バトスピ、ヴァンガ、デュエマなど発売済みゲームソフトが存在してるTCGはベンダーに研究させる。
↓
各社TCGを再現するテストプレイ ⇒ 更に改良や修正 + コード記述の仕様書(設計書)を作成。
↓
機能制限した下位版を制作しても原則として発売せず + 上位版デュエリ−グ用でサーバー稼動。
↑
下位版を仮に発売した場合の改造および商用利用には、別途で当社との契約が必要。

さ〜て、インド人ベンダーと日本人の翻訳担当SEを見つけよっと!ww
http://wc2014.2ch.net/test/read.cgi/entrance2/1451262577/-16
0293デフォルトの名無しさん2016/01/15(金) 06:36:40.59ID:KIFGsBEO
>ガチンコ・ジャッジ
これ何?
いかにもDQNあがりのヴァカ企画が付けそうな名前だけど
0294デフォルトの名無しさん2016/01/15(金) 07:38:29.68ID:POz82VxF
>>293
ここまで宣伝テンプレ
0295デフォルトの名無しさん2016/01/20(水) 04:13:40.21ID:CT14PSG+
初心者ではないのですが、わからんので教えてください。
$ cat text.txt
aa\nbb
$
となってます。
これを

42 fin.open("test.txt",ios::in);
49 while(fin && getline(fin, buf))
50 cout<<buf<<endl;

な感じで表示すると、
aa\nbb
って表示されます。
どうして
aa
bb
ってならないのでしょうか。何か勘違いしてますか。
0296デフォルトの名無しさん2016/01/20(水) 04:31:24.49ID:CT14PSG+
すみません。アホな事書きました。忘れてください。ペコペコ
0297デフォルトの名無しさん2016/01/23(土) 13:01:50.67ID:W4+KYwy5
ftellの引数は何故const FILE*じゃないのですか
0298デフォルトの名無しさん2016/01/23(土) 14:01:00.59ID:47kTF92K
C に const はあったっけ?
0299デフォルトの名無しさん2016/01/23(土) 14:37:50.67ID:xYcOlVg1
有るに決まってるだろ
しかしftellが作られた当時は無かったかもな、詳しく知らんが

それにftellがファイルに何も書き込まなかったとしても
FILE構造体を何も書き換えないとは限らないしな
排他処理で何か書き換える実装もあり得る
ftellの実装はコンパイラ毎、環境毎に違うし
ベンダーが自分たちで用意するわけだから
いろんな環境に対応しなければならないC言語としては
安易にconstにできないな
0300デフォルトの名無しさん2016/01/23(土) 16:09:29.81ID:EPxA/CX7
ポインタは伝播するしね。
void で引っ張ればどうにでも化ける。
fstream知ってからは怖いって感じはする。
0301デフォルトの名無しさん2016/01/23(土) 16:19:37.61ID:ruaa+Fti
>>277
class Map<typename K, typename V> {};
そもそもこれが書けないC++仕様の怠慢が問題。
0302デフォルトの名無しさん2016/01/23(土) 22:07:23.87ID:YzHFCyx5
http://cpp-lang.sevendays-study.com/problemex5.html
このサイトの5-2の問題、数字を漢数字に変換する問題をやってるのですが(面倒なので1〜3のみとする)
#include<iostream>
#include<string>
#include<map>
using namespace std;
int main() {
string a;
map<string, string> m;
int i;
string names[] = { "1","2","3" };
m[names[0]] = "一";
m[names[1]] = "ニ";
m[names[2]] = "三";
cout << "入力してください:"<<endl;
cin >> a;
string::iterator it = a.begin();
for (it = a.begin(); it < a.end();it++){
cout << m[*it] ;
}
//else { cout << "存在しません"; }
return 0;
}

このコードのcout<<m[*it];の部分でエラーが出てしまいます
自分の考えではiterator itを入力されたaの1文字目から最後の文字まで動かし、そのitが指す値をmapで変換しています
なぜダメなのでしょうか?
0303デフォルトの名無しさん2016/01/23(土) 22:13:15.13ID:xc9KTHaP
map<string, string>なのに*itは文字だから
0304デフォルトの名無しさん2016/01/23(土) 22:53:37.80ID:YzHFCyx5
map<char,string>にしたらうまくいきました。
ありがとうございます。
続いてまた質問なのですが、以下のコードで1から10の乱数を10回発生させてsetにその乱数をいれてるのですが、毎回10個の乱数が同じになってしまいます
何が悪いのでしょうか?(実行すると、coutの結果として22222222222、5555555555のようになります)
#include<stdio.h>
#include <stdlib.h>
#include<time.h>
#include<iostream>
#include<set>
using namespace std;
int main() {
int a;
set<int> number;
for (int i = 0; i < 10; i++) {
srand((unsigned) time(NULL));
a= rand() % 10 + 1;
cout << a ;
number.insert(a);
}
0305デフォルトの名無しさん2016/01/23(土) 22:54:32.40ID:Ipz3ttx/
>>299
つい最近までLinuxではftellするとファイル位置がリセットされるバグがありました
つまり書き込まれてます
03063042016/01/23(土) 22:56:59.97ID:YzHFCyx5
すみません
srandの部分をコメントアウトしたら解決しました
0307デフォルトの名無しさん2016/01/23(土) 23:04:49.75ID:2kp06Cdr
>>306
srandはプログラム中1回でいい
0308デフォルトの名無しさん2016/01/24(日) 00:56:19.17ID:fkWZRTEw
>>306
今度は「毎回同じ乱数の並びになります」とか言わないのか?

>>307
日本語が不自由な馬鹿は引っ込め
0309デフォルトの名無しさん2016/01/24(日) 01:30:42.36ID:0rZjknv2
randは非推奨
0310デフォルトの名無しさん2016/01/24(日) 01:39:13.09ID:WyN3o1JX
>>308
>>307が理解できないお前が不自由なんだろw
0311デフォルトの名無しさん2016/01/24(日) 05:48:23.27ID:S0J2srO3
>>307 も >>308 (の前半部)もそれぞれ正しいでしょう。
>>309 の関連で rand() % 10 で0〜9の乱数を出すのも疑義あり。

ところで >>304 の症状の報告も完全ではないね。
何度もやってるうちには 4444222222 みたいな、
前半と後半で値が違うっていうパターンも生じるはず。
現代の機械だとかなり稀なタイミングだろうけど。
0312デフォルトの名無しさん2016/01/24(日) 08:51:16.26ID:fkWZRTEw
>>310
お前はいつも日本語が不自由だな
ここは「1回でよい」じゃなく「毎回呼んではだめ」なことを教えてやらんといかんのだ
ついでに消してしまって0回になってしまったのに「1回でよい」は日本語がおかしい
0313デフォルトの名無しさん2016/01/24(日) 09:19:44.06ID:OknlX178
お前らそのうち
stdlib.h使うな、setはおかしい
とか文句言いそうだな
0314デフォルトの名無しさん2016/01/24(日) 09:33:13.94ID:bw3MWu8t
>>305
そう言うバグがもっと早く見つかったじゃね?
0315デフォルトの名無しさん2016/01/24(日) 10:07:36.64ID:fkWZRTEw
FILEをconstにできるか否かについての
「ファイル位置を保持する変数を誤って書き換えてしまった事実からFILEの内容を書き換える何らかの必要性が有ったのだろう」
という意見に対し
「FILE全体がconstになっていればファイル位置の変数の書き換えをコンパイルエラーに出来たはず」
という思考はちょっとずれている
0316デフォルトの名無しさん2016/01/24(日) 10:49:11.35ID:Aj6v4F1z
windowsのCやC++でディレクトリごと消したいので、
system関数で 
rm -r "*"
など実行すると出来ると思うのですが、パスを間違えると全部消してしまいそうで
怖いのですがどうすればよいでしょうか?
0317デフォルトの名無しさん2016/01/24(日) 10:54:20.90ID:bw3MWu8t
>>315
> 「ファイル位置を保持する変数を誤って書き換えてしまった事実からFILEの内容を書き換える何らかの必要性が有ったのだろう」
> という意見に対し
はあ?
恥の上塗りでもしに来たのか? w
0318デフォルトの名無しさん2016/01/24(日) 10:57:22.78ID:ETeqPEGX
>>316
気をつけろ
0319デフォルトの名無しさん2016/01/24(日) 12:20:43.25ID:Aj6v4F1z
>>318
それ以外に良い対策はありますか?
0320デフォルトの名無しさん2016/01/24(日) 12:32:46.58ID:lehWL+vO
ケースバイケースだろうなあ
リソースなら予め登録されたファイルパス以下にあるファイル名以外消せないようにチェックするとか
0321片山博文MZ ◆T6xkBnTXz7B0 2016/01/24(日) 12:40:56.45ID:30PPh5ie
フルパスを要求するとか?
0322デフォルトの名無しさん2016/01/24(日) 12:50:28.16ID:LHp2Xjej
あるいは予めchmod -w又はchown root:rootしておくとか。
0323デフォルトの名無しさん2016/01/24(日) 17:42:47.61ID:cIbjxOLA
|何らかの事情で明示的にファイルをクローズしたければ、close関数を使用します。
|ofs.close();
|C言語に慣れていると、open と close が対応付いていないことに違和感を感じるかも知れませんが、 |
|C++ の世界では、自動的に行われるのならば、余計な手を出さずに任せてしまうべきです。

fstream の場合、close()しない方がいんですかねぇ
0324デフォルトの名無しさん2016/01/24(日) 18:09:23.58ID:7qZdBJlK
>>323
エラーを無視して良いのであればデストラクタ任せで良いけど
そうでなければ自分でcloseする
0325デフォルトの名無しさん2016/01/24(日) 19:46:16.98ID:sP2ua92H
>>316
パスを明示して毎回ユーザに承認を求める

現実的には、そのアプリ専用の作業ディレクトリを作りそこだけを消す
何らかの間接指定で可変ならば、親ディレクトリへの相対パスがあればはじく

ちなみに通常ディレクトリごとに適切に権限設定されてれば万一の時の被害も少ない
0326デフォルトの名無しさん2016/01/24(日) 20:36:40.08ID:WyN3o1JX
>>312
いつもってお前は俺をどれと同一人物視してるんだw
都合が悪いレスは全て同一人物とか頭おかしいだろw

元々ループ内で呼んでたからの突っ込みなんだが
お前はそれすら理解できなかったようだな
0327デフォルトの名無しさん2016/01/24(日) 20:56:23.40ID:BROMbZ7/
「この変数はこれまで変更可能だったが、ただ今よりブロック終了までconstとする」って場合どうしますか? 但し、もう一つconst版のオブジェクトを宣言したくはありません。

なぜこんな事をしたいかというと、元々constで初期化で宣言したかったのに、
�@初期化のためには資源の調達が必要であり
�A初期化が済み次第すぐさま資源の解放をしたい
この場合、

SomeObj o;
{
  資源確保;
  o = 資源による処理;
}// ここで資源は解放される。
以降、oを用いた処理。

となるでしょう。そうなると、最初のoの宣言は、当然直後に代入があるので、constにできません。しかし事実上の初期化が済んだら、もうoはconstにしたいのです。
0328デフォルトの名無しさん2016/01/24(日) 21:03:56.70ID:50ZcCt7z
>>327
「以降」の処理を const& を受け取る関数に移して、そこに渡す。
あるいは初期化済みの SomeObj を返す関数を作る。
しかし資源の確保となると根本的には SomeObj の責務(コンストラクタの処理など)に移したいところ。
0329デフォルトの名無しさん2016/01/24(日) 21:18:25.81ID:fkWZRTEw
>>327
>>328の対処が取れないときは
http://ideone.com/pekqNE
0330デフォルトの名無しさん2016/01/24(日) 22:13:23.33ID:0dMHn0ua
>>327
F#?
0331デフォルトの名無しさん2016/01/24(日) 22:19:03.60ID:WyN3o1JX
G♭
0332デフォルトの名無しさん2016/01/24(日) 22:20:15.90ID:eLuVQ3YF
勝手にC++の前提で話してんじゃねーよ
スレタイ読み直せ低能ども
0333デフォルトの名無しさん2016/01/24(日) 22:21:45.85ID:WyN3o1JX
>>332
ブーメラン
0334デフォルトの名無しさん2016/01/24(日) 23:03:43.91ID:cIbjxOLA
>>324
もう使用しないとわかった時点でフォーカス外れる前に自分でcloseした方がお作法ですよね。
なかなかC脳から抜けられない。
0335デフォルトの名無しさん2016/01/24(日) 23:21:22.85ID:B3HWqMca
closeで例外が出てデストラクタ呼ばれたり
デストラクタでのクローズが失敗したらどうなるの?
03363272016/01/25(月) 02:02:52.33ID:8FNbwGHh
分かった、ブロックをそのままλ式にしてしまうのですね!

const auto o { [&...]()->SomeObj
 {
  資源確保;
  資源から必要な情報をまとめる;
  return SomeObj {情報};
 }()// ここで資源は解放される。
};
以降、oを用いた処理。
0337プログラム初めてやってます2016/01/27(水) 19:48:26.87ID:GcWX3DUV
2ちゃんねる初めてなので、書き方間違ってたらごめんなさい。

負の値の整数値をscanfで読み込んで、
絶対値を求めるプログラムを書きたいのですが

今の所わかってる知識としてはprintfでの簡単な計算と、簡単なif文のみです
課題としては、printf、putsとif文
今までに習った関数を用いてやれと言う事だと思うんですが
どう考えてもわからなかったため、どうか質問させてください
0338デフォルトの名無しさん2016/01/27(水) 19:58:02.06ID:0xRCKJUw
scanfなんて危険で難しい関数を何故初心者に使わせたがるのか
0339デフォルトの名無しさん2016/01/27(水) 20:04:03.17ID:Fmvz75rf
Cは危険な関数から入る傾向あるよね
0340デフォルトの名無しさん2016/01/27(水) 20:10:22.92ID:j65DqSaH
>>338
それ以上に簡単な入力手段がないからだろ
0341デフォルトの名無しさん2016/01/27(水) 20:12:44.23ID:1VQKsEBj
fgetc() じゃきっついか
0342デフォルトの名無しさん2016/01/27(水) 20:24:33.23ID:ghSXEhkj
>>337
https://ideone.com/Kn3dfH
0343デフォルトの名無しさん2016/01/27(水) 20:43:01.06ID:H/VHXeqj
危険な関数と言えば printf() もかなり危険だよね。
printf("hello, world\n"); なら大丈夫だけど、
printf("all 50%discount today\n"); だともう怪しい。

>>339 の言う通りだわ。
0344デフォルトの名無しさん2016/01/27(水) 21:34:21.69ID:tY0EzgE5
Cは低レベルを担当する言語なので扱いは高レベルな者が担当する。なので危険で良い。効率こそ正義
問題はそんなものを初学者に学ばせること。初学者がそんな重要な部分の開発をするわけがないのだから
0345デフォルトの名無しさん2016/01/27(水) 23:06:55.48ID:eULyfEEH
Cより覚えることが少なくてシンプルで他の言語の基礎になっていて
学んだことの応用が効いて実用性のある言語が他にあるか?
初心者が学ぶのに妥当だと思うが
0346デフォルトの名無しさん2016/01/27(水) 23:09:52.37ID:3jiwec3B
むしろCこそ初心者に無駄が大杉
0347デフォルトの名無しさん2016/01/27(水) 23:23:38.65ID:13Hm1XjY
C言語を覚えるのはCPUを覚えるのと大差無いから基本であるが難しい。
一人では全く何もできないコンピュータに1から仕事を教える物でもある。

だが、ラクしてjavaやperlに走る人とは付き合いにくい。
0348デフォルトの名無しさん2016/01/27(水) 23:29:27.89ID:4Ckw423u
覚えることの多寡はやりたい目標で決まるから何とも言えん
電卓として使う程度ならどの言語だって大して変わらんし
0349デフォルトの名無しさん2016/01/27(水) 23:37:38.39ID:1VQKsEBj
入出力がちょっと気を使うけど、
学習の重点となっているところが、入力後から出力前に集約できてれば良いんだが…
0350デフォルトの名無しさん2016/01/27(水) 23:38:02.86ID:LZEmbO/H
派手なGUIゲームを作るならCは遠回りだろうけど
大学の講座とかで教えるならCを超える言語あるかな?
Javaとか?
0351デフォルトの名無しさん2016/01/27(水) 23:44:41.36ID:4Ckw423u
それも講義の内容次第としか
工学系で高級なアセンブリとして使うならC
0352デフォルトの名無しさん2016/01/27(水) 23:50:57.65ID:eULyfEEH
実際問題JAVAとかC#は最初に教えるにしては覚えることが膨大すぎると思うよ
ボクシングとかアンボクシングとかどうやって教えればよいのか頭が痛いだろう
C++なんかもってのほかだしさ

>CPUを覚えるのと大差無いから基本であるが難しい

CPUに詳しくなって悪いことは無いよね、どんな言語にも応用が利くし
Cはいろんな言語のベースになっているからCを覚えると他の言語に展開しやすい
言語仕様も必要最小限でかつ、ぎりぎり実用可能なレベルで玩具というわけでもない

これがRubyとかなら、matzの実装について詳しくなる必要があるわけだが
こんなものを学んだところで有り難くない
0353デフォルトの名無しさん2016/01/28(木) 05:14:25.23ID:a6m1UVUK
CPUというか、アセンブリ言語を少し知ってると
ポインタの理解あたりが容易になるのは間違いないね。

ただし、特定のCPUに詳しくなりすぎると
慣用表現から外れた独特な書き方を始める弊害もあったり。

・C慣用
for (i = 0; i < 10; i++)
・C++慣用
for (i = 0; i != 10; ++i)
・あるCPUのアセンブラ経験者
for (i = 10; i != 0; --i)

どのループも10回の繰り返しのはずだが、
今となっては3番目は本当に10回か自信がないわ。
0354デフォルトの名無しさん2016/01/28(木) 05:52:39.11ID:OteWNMPZ
・C++慣用
for (i {0}; i < 10; ++i)
0355デフォルトの名無しさん2016/01/28(木) 06:04:06.09ID:xn/xn1Lr
>>354
出直してこい
0356デフォルトの名無しさん2016/01/28(木) 06:35:33.04ID:OteWNMPZ
ひぇっ!
0357デフォルトの名無しさん2016/01/28(木) 06:51:25.56ID:87VXcHuk
>>352
> ボクシングとかアンボクシングとかどうやって教えればよいのか頭が痛いだろう
そんな特殊な機能は必要になった時に教えればいいだけだろ
バカなのか?
0358プログラム初めてやってます2016/01/28(木) 07:10:42.59ID:v1B3KP04
342>>
342さんありがとうございました!
書き込んでから自分でも考えてみていて、
こんな感じになってました

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

/* 読み込んだ整数値の符号を判定 */

int main(void){

int a;

printf("整数を入力してください:");
scanf("%d", &a);

if (a < 0)
a = -a;
printf("絶対値は%dです");

return 0;
}

342さんのコーディングすごいですね!
参考になりました ありがとうございました!
0359プログラム初めてやってます2016/01/28(木) 07:11:49.38ID:v1B3KP04
余計なコメントはいってました・・・ 無視でお願いします・・・;
0360デフォルトの名無しさん2016/01/28(木) 12:31:44.00ID:a9w0Gglx
そもそもプログラミングの基礎は人に習う物じゃない
参考書なりネットなりで一人で勉強するもんだ
基礎から教えて貰わなきゃ理解出来ない時点でプログラマーに向いてない
0361デフォルトの名無しさん2016/01/28(木) 12:36:59.20ID:mW8CPdak
そうか?別に教わってもいいと思うが
でも応用効かないのは向いてないと思う
0362デフォルトの名無しさん2016/01/28(木) 12:43:58.60ID:U7RHxiIq
生涯でただ一つの言語しか覚えられないという宗教的理由があるならC一択
そうでないならCからとか論外
0363デフォルトの名無しさん2016/01/28(木) 12:51:39.77ID:a9w0Gglx
書き方が悪かった
一人で考えても分からない所を聞くのは別にいいと思うが、
授業とかで教えて貰うまで参考書があるのに手も付けない奴は向いてないと言いたかった
0364デフォルトの名無しさん2016/01/28(木) 13:04:08.57ID:mW8CPdak
あまり勤勉なやつも向いてない気がするが
仕事にするんじゃなきゃ関係ないか
0365デフォルトの名無しさん2016/01/28(木) 15:21:07.00ID:hWNVXd5g
数学やプログラミングはいかに楽してそれを済ませるかがテーマな所ありますよね
面倒くさがりでズボラな人が怠惰を求めて勤勉に行き着く過程が王道では
だから教育としてはいかにそれが面倒くさいか、いかにそれをやらずに済ませるかを強調していく
0366デフォルトの名無しさん2016/01/28(木) 16:30:44.07ID:CWsUf0Ic
初心者歓迎なんでね。
0367デフォルトの名無しさん2016/01/28(木) 22:38:32.61ID:to2yFDLL
Cから教えるのが論外とか言っている人は
他のどの言語から教えたほうが良いと思っているのか書くべきだよね
0368デフォルトの名無しさん2016/01/29(金) 03:01:29.22ID:bzmjGvNe
>>363
向いていないというか興味が無いんだと思う
必須授業とかで無理やりやらされてる感じ

>>365
一度作ってしまえば後は利用して効率が上がるからなw
ずっと面倒か作る間だけ面倒で後楽かを選ぶだけで

>>367
ただ批判するだけじゃ誰でもできるからな
0369デフォルトの名無しさん2016/01/29(金) 09:02:47.15ID:x/sxD8ME
(Lispの)Schemeを頭のいい人に教えるのには10分と掛からないってジョエルは言ってる。
Cは頭が良くても10分じゃ覚えきらん。仕様書からしてSchemeの10倍近く分厚いからな。2時間は掛かるんじゃねぇか?
0370デフォルトの名無しさん2016/01/29(金) 09:49:39.15ID:qombZsi/
>>369
仕様書の厚さに比例するっていう観点は公平だと思うよ
0371デフォルトの名無しさん2016/01/29(金) 10:14:08.59ID:x/sxD8ME
ふむ。

仕様書が分厚いからCを教えるのが論外だとするのなら、
手続き型系の言語で教えるのに適した言語はPASCALかLuaあたりになると思う。

Lua良いよLua。PASCALもね。
0372デフォルトの名無しさん2016/01/29(金) 13:26:54.55ID:cTI0Jdzp
Cは概念だと思うけどね。ポインタと構造体を脳内でイメージできるようになったらおkかと。
後はリファレンスさえあれば、一生忘れる事はないと思うけどなぁ。

C++はもう底なしでw でもそれが楽しいのですが。
0373デフォルトの名無しさん2016/01/29(金) 15:52:03.82ID:9SCZR58b
目的に最も近いと思われる言語を教えるのが初学者への配慮であって
入門に最も適した言語なんてのは幻想だと思う
0374デフォルトの名無しさん2016/01/29(金) 17:58:02.16ID:cTI0Jdzp
今は専門学校ではjavaなのかな
0375デフォルトの名無しさん2016/01/29(金) 18:08:01.54ID:BAJfHtoc
うちの専門学校では1年目はC、2年目にJavaだったよ
0376デフォルトの名無しさん2016/01/29(金) 18:47:15.34ID:i41mJkcJ
うちは1年目はPASCAL、2年目にCをやり、3年目にSchemeとPrologを触り、4年目はCで研究したよ。
専門じゃなくて国立だけど。
0377デフォルトの名無しさん2016/01/29(金) 19:53:42.72ID:XYL4UGBK
俺も一年目はPascalだったが
Pascal教えられていたときは激しくモチベが下がった
2年目にCになって無茶苦茶うれしかったよ

だって、Pascalは現場で使われてない言語だったから
何処でも使われてない言語を覚える苦痛と言ったらね
breakが有るくせにreturnが無いあたりも最悪だった
returnが無いから、どうにもこうにも関数の最後までいかないと
関数を抜けれないんだよ!
当然フラグだらけになるし、マジ鬼畜言語だと思った

その点Cは未だに世界中で使われている言語なわけで
だったら覚えてみようってなるし、モチベが上がるってものよ
0378デフォルトの名無しさん2016/01/29(金) 20:07:57.52ID:cTI0Jdzp
ふむふむ Pascalはセミコロンの位置で頭が禿げるw
Delphiとか評判良かったんだけどねぇ。
0379デフォルトの名無しさん2016/01/29(金) 20:57:35.02ID:6a9kiPQ9
>>378
式文とdo-while文にセミコロンを含むか、
各文の間は必ずセミコロンで区切るかの差であって、
どちらも一貫してるよ
0380デフォルトの名無しさん2016/01/29(金) 21:36:27.47ID:KHfAKsC3
ここは血迷ってAWKから入門させよう。ついでに正規表現も学ばせよう
0381デフォルトの名無しさん2016/01/29(金) 21:56:42.92ID:XYL4UGBK
一貫してても使いにくかったら意味ねーんだわ
0382デフォルトの名無しさん2016/01/29(金) 22:13:16.22ID:V57FZVNV
じゃあ苦情の上がっていないJavaScript最強ってことだな
0383デフォルトの名無しさん2016/01/30(土) 03:16:59.92ID:d4C/IYFO
マルチコアが当たり前になってGPGPUの手段が広がって低レベルが回帰の予感
0384デフォルトの名無しさん2016/01/30(土) 12:04:09.34ID:qiIX3neU
そこでllvm-irですよ
0385片山博文MZ ◆T6xkBnTXz7B0 2016/01/31(日) 18:52:32.63ID:KGvneECt
Cの文字列はヌル文字があるとそこで終わりだけど、
C++のstd::stringは長さを記録しているから、ヌル文字が
途中に来ても大丈夫!

ということはstd::stringはバイナリデータも扱えるんだ! 大発見だね!
0386デフォルトの名無しさん2016/01/31(日) 18:56:36.30ID:umKDphm1
どうした急に
0387デフォルトの名無しさん2016/01/31(日) 21:04:07.72ID:kn/5LVuq
今更すぎるな
単にC++11以前は連続した領域に確保されることが保証されてなかったからバイナリデータ置き場として使われてなかっただけ
0388デフォルトの名無しさん2016/01/31(日) 21:13:17.94ID:JH58iwLT
>>385の知識が残念なのは言うまでもないとして
話を理解できない>>387はもっと哀れ
0389デフォルトの名無しさん2016/01/31(日) 23:23:19.06ID:0VTupv6x
自分の知識を総動員してドヤ顔してるんだからそっとしておいてやれ
0390デフォルトの名無しさん2016/02/01(月) 00:16:08.05ID:Jc+yiccs
そう指摘されても何を理解できてないのか理解できてないからもっと哀れだわ
ハハッ
0391デフォルトの名無しさん2016/02/01(月) 01:45:26.45ID:k88EDqNX
ここは初心者にフレンドリーでハートウォーミングなインターネットですね
0392デフォルトの名無しさん2016/02/01(月) 04:58:19.06ID:wHu9vKIt
>>390
>>386
0393デフォルトの名無しさん2016/02/01(月) 17:08:19.81ID:Ev74Df4F
>>392のように日本語の文脈も読みとれない知能障害も
生きてて辛いだろうな
0394デフォルトの名無しさん2016/02/01(月) 19:06:25.95ID:aUqGS129
アホが文脈読めとか笑える
スゲーいいこと書いたつもりなんだろうなぁ w
0395デフォルトの名無しさん2016/02/01(月) 21:07:47.33ID:cp5cboQs
最近の2chは過疎も納得の糞さだな。
0396デフォルトの名無しさん2016/02/02(火) 11:36:29.11ID:NTv/QStd
>>387
まじ?
連続性保証されてると思ってたわ。
vectorは03で規格化されてたよね?
stringはされてなかったのか。
ま、いっか。
0397デフォルトの名無しさん2016/02/02(火) 22:25:20.39ID:+WV++cRd
助けてください
実数を2つ入力させて大小比較させるプログラム

http://codepad.org/JYV0bpuL
0398デフォルトの名無しさん2016/02/02(火) 22:29:57.47ID:7f7wf/mW
elseの後にifが無いな
0399デフォルトの名無しさん2016/02/02(火) 22:34:55.10ID:7f7wf/mW
あれ?
同じ環境で、同じ入力文字列から読み取った二つの浮動小数点数型数が厳密に一致するって仕様で決まってたっけ?

つまり、入力として
0.1 0.1
って入れた時に、scanf("%lf%lf", &a, &b);なりなんなりした後のa == bの値って処理系依存だっけ?
0400デフォルトの名無しさん2016/02/02(火) 22:58:44.04ID:+WV++cRd
>>398
通りました。ありがとうございます。
けど、最後のはifがなくてはならないのでしょうか。
ストラウストラップ自身のテキストに、最後はelseとなっているのですが。
0401デフォルトの名無しさん2016/02/02(火) 23:00:44.47ID:7f7wf/mW
>>400
ストラなんちゃらってのは知らんけど
(a == b)が付くなら文法上ifが必要。
ifを省くなら括弧も省け。
0402デフォルトの名無しさん2016/02/02(火) 23:05:17.62ID:+WV++cRd
>>399
実際のところ、
「2つの数字の差が1.0/10000000未満である場合に、どちらが大きくてどちらが小さいかを
書き出した後、the numbers are almost equalと書き出すようにプログラムを変更する」
という問題で、これより前にint型をdoubleに変更しろという問題もあって、
a == b はここでは必要ないかもしれないです。
0403デフォルトの名無しさん2016/02/02(火) 23:07:14.24ID:+WV++cRd
>>401
あ。たしかに最後は条件式書いてないです。ありがとうございます!

>>ストラ
C++の設計者です。
0404デフォルトの名無しさん2016/02/02(火) 23:11:00.17ID:7f7wf/mW
>>403
誰かと思ったらB. Stroustrupさんか。
カタカナって難しい
0405デフォルトの名無しさん2016/02/02(火) 23:13:08.88ID:RveVHAYz
ハゲはa<bでもa>bでもなければa==bと考えてしまうほどモウロクしたんだろうか
最近の老衰っぷりを見るとかなり頭がヤバそうだが
0406デフォルトの名無しさん2016/02/02(火) 23:18:37.12ID:+WV++cRd
>>405
細かいエラーは最後の「小数が入力されてない」で一括りなんです。
入門書なんで。
0407デフォルトの名無しさん2016/02/02(火) 23:20:19.55ID:7f7wf/mW
>>406
多分そういうことじゃないと思う。
0408デフォルトの名無しさん2016/02/03(水) 08:53:05.13ID:6UPbxu8z
>>399
その入力の結果
memcmp(&a, &b, sizeof a) で 0 は保障して欲しいところだな
処理系依存だとなんかキモイ
0409デフォルトの名無しさん2016/02/03(水) 10:15:51.45ID:JXLYa8UB
うーむ
0.1 == 0.1
atod("0.1") == atod("0.1")
atod("0.1") == 0.1
ぜんぶ成立してほしい
誰か規格を解読して
0410プログラム初めてやってます2016/02/03(水) 10:19:42.77ID:lWEagrs5
前回は皆さん色々ご検討くださってありがとうございました。
皆さんにお礼も言わずに去ってしまったなと思っていたのですが、
その後、高度な(に私は見えました)話題が続いていたので水を差してはいけないと思って

どうしてもわからない事が出てきてしまって、また来てしまいました。

【二つの整数値を読み込んで、小さい方の数以上で大きい方の数以下の
 全整数を加えた値を表示するプログラムを作りなさい       】

という課題なのですが
インクリメント記述、全整数表示まではうまくいったのですが、
この後の合計値がどうしても出せません

ご助力お願い致します。

ここまでできたのですが…
https://ideone.com/THBj7S

多分恥ずかしいコーディングだと思います…
0411プログラム初めてやってます2016/02/03(水) 10:21:57.21ID:lWEagrs5
記述し忘れたので追記

2つの整数を入力し a以上b以下の全整数の和を求めなさいとの事でした
0412デフォルトの名無しさん2016/02/03(水) 10:23:18.63ID:Gb259GwX
>>410
for (i = min; i <= max; i++) {sum += i;}
0413プログラム初めてやってます2016/02/03(水) 10:24:14.98ID:lWEagrs5
ありがとうございます!
でも、for文はまだ出てきてなくて、for文を使わずにと言う事でした
0414デフォルトの名無しさん2016/02/03(水) 10:36:23.49ID:JzoFZA2F
またqの炎上学習法か?
0415デフォルトの名無しさん2016/02/03(水) 10:37:46.94ID:JXLYa8UB
>>413
たとえば、1から1000の合計の計算式知ってれば、それを使う
0416プログラム初めてやってます2016/02/03(水) 10:40:20.13ID:lWEagrs5
?? 何かの本ですか? 
一応ある本の課題を見ています

今までに習ったのは簡単なprintfでの計算とif文do文なのですが
0417デフォルトの名無しさん2016/02/03(水) 10:46:44.73ID:XI3wSbIf
>>409
atodと言うものが何物かは知らんが保証は無いんじゃね

ISO/IEC 9899:2011 5.2.4.2.4p6
The accuracy of the floating-point operations (+, -, *, /) and of the library functions in <math.h> and <complex.h> that return floating-point results is implementationdefined,
as is the accuracy of the conversion between floating-point internal representations and string representations performed by the library functions in <stdio.h>, <stdlib.h>, and <wchar.h>.
0418デフォルトの名無しさん2016/02/03(水) 10:48:09.46ID:XI3wSbIf
誤
5.2.4.2.4
正
5.2.4.2.2 Characteristics of floating types
0419デフォルトの名無しさん2016/02/03(水) 10:51:30.15ID:O/9tVwNc
>>416
min = 5, max = 10, sum = 45て事なら
sum = ((min + max) * (max - min + 1)) / 2;
じゃあかんの?
0420デフォルトの名無しさん2016/02/03(水) 10:53:19.38ID:Gb259GwX
>>416
forはwhileやdoを使って書き直せる。
for (A; B; C) D;
A; while (B) {D; C;}
A; do {if (B) {D; C;}} while (B);
0421プログラム初めてやってます2016/02/03(水) 10:55:10.44ID:lWEagrs5
>>416
416さんありがとうございます!できました!
皆さんもいろいろありがとうございました!
0422プログラム初めてやってます2016/02/03(水) 10:56:18.48ID:lWEagrs5
>>419さんでした;
>>416さんもありがとうございました!
0423プログラム初めてやってます2016/02/03(水) 10:58:29.06ID:lWEagrs5
>>420 420さんでした… ほんとにありがとうございました!
0424デフォルトの名無しさん2016/02/03(水) 11:02:27.43ID:JXLYa8UB
>>417
正確性については実装依存だけど、毎回の同一性まではここでは触れてないね
0425デフォルトの名無しさん2016/02/03(水) 12:55:54.71ID:R1lQnZw2
#include <cstdio>

int main() {
 printf("hello, world\n");

 return 0;
}


g++ (GCC) 4.8.2 を使っているんだが、上のソースがエラーなくコンパイルできる。
しかし printf() は std::printf() と書くべきじゃないかと思うんだ。
あるいは using で省略表記を明示するか。

この書き方でエラーにならないのはC++の規格通りなのか、
あるいはGCC独特の動作なのか教えてほしい。

またGCC独自だとしたら、コンパイル時にエラーとするオプションを知りたい。
(以前は -fhonor-std というオプションが使えたらしいが廃止されたみたい)
0426デフォルトの名無しさん2016/02/03(水) 14:52:41.84ID:1RubKd28
なーる
0427デフォルトの名無しさん2016/02/03(水) 14:54:41.83ID:XI3wSbIf
いつから>>425は規格通りとGCC独特の動作が
アンビバレンツなものであると錯覚していた?
0428デフォルトの名無しさん2016/02/03(水) 15:53:30.47ID:hvk9CpKQ
なんでCは外部リンゲージでexternをつけるのにC++はつけないんですか?
0429デフォルトの名無しさん2016/02/03(水) 16:41:54.73ID:uEOUJl1K
C++のコードからCを呼ぶ時に呼び出し規約の違いを明示する
CのコードからC++を呼ぶことはない

それに C/C++どちらも呼び出し規約が1種類ではないから
一部の関数はそういう指定がある
0430デフォルトの名無しさん2016/02/03(水) 16:47:26.68ID:XI3wSbIf
>>428-429
>Cは外部リンゲージでexternをつけるのにC++はつけない
>CのコードからC++を呼ぶことはない

お前等の個人的なスタイルがさも普遍的であるかのように語られても
0431デフォルトの名無しさん2016/02/03(水) 16:54:04.33ID:1RubKd28
そもそもデフォで外部リンケージを持つから extern はつけなくてもいんじゃねの?
外の変数を使う時はexternが必要ってことで。
0432デフォルトの名無しさん2016/02/03(水) 16:56:12.19ID:I+U+ZaiG
>>425
C++の規格通りっぽい
cstdioとかはシンボルをグローバルにしてもいいししなくてもいいらしい
0433デフォルトの名無しさん2016/02/03(水) 17:00:58.37ID:XI3wSbIf
>>432
へー、規格のどこにそんなことが
0434デフォルトの名無しさん2016/02/03(水) 17:06:35.02ID:I+U+ZaiG
ちゃんとしたのに当った訳じゃないけど
http://stackoverflow.com/questions/10460250/cstdio-stdio-h-namespace
ここで引用されてた
Annex D (normative) Compatibility features [depr] states:
0435デフォルトの名無しさん2016/02/03(水) 17:13:24.24ID:j8SYABEm
VS2015でも同じ結果でした
0436デフォルトの名無しさん2016/02/03(水) 17:19:43.24ID:XI3wSbIf
>>434
そこに書いてあるのは「グローバル名前空間にも提供するかも知れない」なのだが
「cstdioとかはシンボルをグローバルにしてもいい」というのはどこから来たのか
0437デフォルトの名無しさん2016/02/03(水) 17:22:04.36ID:I+U+ZaiG
どう違うのか分からない
間違ってたかな
0438デフォルトの名無しさん2016/02/03(水) 17:31:35.42ID:2Q1iapWx
>>436
太字のここでしょ?
Every C header, each of which has a name of the form name.h,
behaves as if each name placed in the standard library namespace by
the corresponding cname header is placed within the global
namespace scope.

どこに「かも知れない」とかあるの?
behavesって断定してるんじゃない?
0439デフォルトの名無しさん2016/02/03(水) 17:33:45.85ID:6UPbxu8z
RFC の MUST MAY SHULD みたいに整理してほしいわ
0440デフォルトの名無しさん2016/02/03(水) 17:35:11.06ID:XI3wSbIf
>>437
std::でアクセスできることが義務づけられているかどうかが違う

>>438
それは>>425とは関係ないstdio.hの記述
その下の
It may also provide
ではないのか
0441デフォルトの名無しさん2016/02/03(水) 17:41:25.46ID:1RubKd28
*.h → global空間で定義
c* → global空間とstd空間で定義

って事ですかい。
0442デフォルトの名無しさん2016/02/03(水) 17:52:45.70ID:R1lQnZw2
>>434 情報ありがとう。
確かに cstdio は シンボルをstd名前空間に入れて
グローバル名前空間にも入れる「かもしれない」、と読めるね。

#include <cstdio> でstd修飾なしの printf() が使えるのは
規格通りでもあり、GCCがその挙動を選んだ、ということか。

しかしながら、グローバル名前空間に入れない環境もありうるし、
それで >>425 のコードがエラーになっても、これまた規格通りか。

うっかり std:: を書き忘れる癖があるので、
コンパイラがチェックしてくれると助かると思ったのだけれど。


>> ID:XI3wSbIf の人
有用が情報がなく挑発的なだけの投稿ばかりだね。
だからどうこうってわけじゃないよ。単なる感想として。
0443425 == 4422016/02/03(水) 20:13:16.38ID:R1lQnZw2
>>441

Including cstdio imports the symbol names in std namespace and possibly in Global namespace.
Including stdio.h imports the symbol names in Global namespace and possibly in std namespace.

cstdio をインクルードするとシンボルはstd名前空間に入る(必ず)。
グローバル名前空間にも入るかもしれない(入らないかもしれない)。

stdio.h をインクルードするとシンボルはグローバル名前空間に入る(必ず)。
std名前空間にも入るかもしれない(入らないかもしれない)。


だと思われる。
0444デフォルトの名無しさん2016/02/03(水) 20:19:16.88ID:pejUVpHJ
どちらを使うにしろ std名前空間を強要することはできないということになるのかな
0445デフォルトの名無しさん2016/02/03(水) 21:13:49.98ID:1RubKd28
>>443
Cシンボルは鬼っ子で色々議論したけどこうなった。
って事なんだろな [Stroustrup2013] に書いてあるかな?

簡単な事だけど、かなり根が深いのかも。

実際は c関数を使う場合は 衝突回避のため、独自の名前空間の中で使用する事になるだろうから
問題ないのかも

namespace MyUtil{

  auto aaa=strlen("wahaha");

}
みたいな。
0446デフォルトの名無しさん2016/02/03(水) 22:55:02.36ID:XI3wSbIf
そうだな
G++が::absのバグを十数年間放置したぐらいには根が深いだろう
04474452016/02/04(木) 01:51:05.67ID:ZGjCmtZ8
何をアホな事を書いてるのだろうと反省。失礼しました。
0448デフォルトの名無しさん2016/02/04(木) 19:27:08.85ID:6dQTBxjx
今日はQの自演による炎上学習法ナシ?
0449デフォルトの名無しさん2016/02/04(木) 20:07:26.52ID:ZGjCmtZ8
自演だったのかorz
0450デフォルトの名無しさん2016/02/04(木) 20:15:30.56ID:M5WeNgYc
namespace org::gnu::gcc {}が書けるようになるのはC++14からだっけ?
むしろ今までなんでこれが書けなかったのか、設計者に問い詰めたい。
0451デフォルトの名無しさん2016/02/04(木) 20:51:10.15ID:cr9CcGXP
いえ、C++14では書けません
0452プログラム初めてやってます2016/02/05(金) 08:05:08.38ID:0uefFKkY
ええっ…! それ私に向けられてるんです?
なんで??そうなるんです???
Qとかって人じゃないですし…
毎日ここ見てられませんよ;
自力で勉強しないと失礼だって思ったのになんでそんな事言う人いるんです?
もう来ない方がいいのでしょうか Qさんが誰かわかりませんが…
0453デフォルトの名無しさん2016/02/05(金) 08:05:39.03ID:0uefFKkY
勿論そのQさんとか言う人の自演じゃありません
0454デフォルトの名無しさん2016/02/05(金) 09:12:32.23ID:40iMBEwg
>>452-453
ID:0ue... が Que のパチモン臭く見えるのが素敵。
0455デフォルトの名無しさん2016/02/05(金) 19:48:30.40ID:7eaUpuXV
>もう来ない方がいいのでしょうか

その通りだ
去れ
0456デフォルトの名無しさん2016/02/10(水) 17:04:42.31ID:nNZFJpww
CのコードをC++に移植しながら開発を続けようと思ってるのだが、
C++のラムダとCのブロックどちらを使うべきだろうか。
0457デフォルトの名無しさん2016/02/10(水) 17:17:22.70ID:9hAEzh2Z
ラムダ?
0458デフォルトの名無しさん2016/02/10(水) 18:22:47.43ID:VRPmATP2
このレベルだとC++を使うことを避けるのが望ましい
ラムダとブロックは対比するものではないし
CからC++への移行の手段でもない
0459デフォルトの名無しさん2016/02/10(水) 23:43:46.75ID:EbqYVSkn
エスパーしました。恐らく彼は初期化の話をしているのでしょう。初期化する際に何らかのリソースの確保を行う場合、初期化が済んだら即解放したいと思うことがあります。
ブロック内でリソースを確保しておけば、ブロックを抜けるときに自動的に解放されるのでこの意図を達成できます。

int i;
{
  なにかリソースを確保したり、いっぱい一時変数を使ってこれからiの値を決める;
  i = 求めた値;
}//用済みなった変数はここで即解放される

C++ではこのアナロジーとしてλ式を当てはめられます。

const auto i { [&...]()
  ->int{
    何かのリソースを確保したり、いっぱい一時変数を使ってこれからiの値を決める
    return 求めた値;
  }()
}

これで定数を初期化でき、且つ、初期化時に用いた一時記憶域は即解放できることになります。
0460デフォルトの名無しさん2016/02/10(水) 23:57:21.06ID:+sMp0qjD
327さん、おはようございます
0461デフォルトの名無しさん2016/02/10(水) 23:59:35.45ID:lc1dGjcs
Q「(しまった)」
0462デフォルトの名無しさん2016/02/11(木) 00:50:30.55ID:ECJX98k8
すまぬ。ここで言うブロック(Blocks)っていうのはClangの拡張の方のことだ。
C言語でクロージャーを実現するための機能なんだが、そういえばまだ標準になってなかったな。
0463デフォルトの名無しさん2016/02/11(木) 03:25:55.80ID:vUnRYzap
くっ・・・
0464デフォルトの名無しさん2016/02/11(木) 12:22:58.36ID:qM+VfxEi
難しいわ
0465デフォルトの名無しさん2016/02/11(木) 13:15:50.37ID:5TnQ2D6C
>>459後半使う時どうするん
0466デフォルトの名無しさん2016/02/11(木) 15:26:10.43ID:Ijn2TjOB
>>465
何を? 初期化に使用した資源?
後で使うならそれは使用済みではないということなので解放しちゃダメだから、ブロックの外のスコープで宣言するしかないのでは?
0467デフォルトの名無しさん2016/02/11(木) 15:26:52.10ID:Ijn2TjOB
×使用済み
○用済み
0468デフォルトの名無しさん2016/02/11(木) 15:34:20.94ID:5TnQ2D6C
>>466
returnが仮に10なら

const auto i { [&...]()
  ->int{
    何かのリソースを確保したり、いっぱい一時変数を使ってこれからiの値を決める
    return 求めた値;
  }()
}

int a;
a = i;でaに10が入る?
0469デフォルトの名無しさん2016/02/11(木) 17:44:59.48ID:R5nKPKgb
そもそも論だけど

const auto &&i = [&]()->int{ return 10; }();

と書かないのは何故?
0470デフォルトの名無しさん2016/02/11(木) 18:03:43.29ID:rWlIZ3EB
X x{init()};よりX x = init();という個人のスタイルがさも普遍的であるかのように話をされても
0471デフォルトの名無しさん2016/02/11(木) 18:16:52.89ID:R5nKPKgb
{}の数が減ってインデントが少なくて済むじゃん
const auto &&i = []()->int
{
  return 0;
}();
好みの問題であるけどね
0472デフォルトの名無しさん2016/02/11(木) 18:28:52.25ID:9LpCQunf
>>468
何故入らないと思うのか

>>469
C++11から初期化は{}で囲むことがお行儀良いとされる。良い癖をつけよう。= {初期化値}も可。
0473デフォルトの名無しさん2016/02/11(木) 20:04:31.18ID:9LpCQunf
=を使わずに{}で囲むのみにしておけば、視認性抜群。一目でこれは代入でなく初期化なのだと判り脳の負担も軽くなる
int i = 10;

これからは
int i {10}, j {1}, k {0};
の時代だ。jやkの位置が改行されたりタブで距離を取っていてもこれなら一目瞭然だ
0474デフォルトの名無しさん2016/02/11(木) 20:45:28.76ID:rWlIZ3EB
>>472
へー、ではなぜC++14のmake_uniqueには{}の初期化が使われていないのですか
0475デフォルトの名無しさん2016/02/11(木) 22:38:27.35ID:h5Y5qyZF
推奨であって法律ではないからです
0476デフォルトの名無しさん2016/02/11(木) 23:39:53.97ID:rWlIZ3EB
へー、そうなのですか
スコットメイヤーの本に別の理由が書かれていたのですが騙されていたのですね
0477デフォルトの名無しさん2016/02/12(金) 00:00:23.89ID:VRvtWrj2
すいません、全部適当言いました。許してください、何でもしますから
0478デフォルトの名無しさん2016/02/12(金) 08:24:28.26ID:pW7dPptS
>>472
アスペか
0479デフォルトの名無しさん2016/02/12(金) 13:18:35.65ID:3nWopzdP
アスペじゃありません、サイコパスです
0480デフォルトの名無しさん2016/02/12(金) 14:18:31.86ID:tZNW1Sh6
北川景子?
0481デフォルトの名無しさん2016/02/15(月) 19:28:14.77ID:qDxZgP2m
悪夢ちゃん
良作ドラマやったな
0482デフォルトの名無しさん2016/02/16(火) 01:32:33.39ID:iqNNo75Y
http://ideone.com/ONsNMR

これがMSVC2015だとエラーになるのなんでなん?
回避方法知ってる人いる?
0483デフォルトの名無しさん2016/02/16(火) 07:15:41.19ID:wJ7D3Nu/
true_typeのスペルミス
俺の環境では通った
0484デフォルトの名無しさん2016/02/16(火) 08:11:34.25ID:nCCZDf8c
すぺるミスは見当たらない
0485デフォルトの名無しさん2016/02/16(火) 14:37:40.64ID:WNE9IDAH
すべってます
0486デフォルトの名無しさん2016/02/16(火) 17:38:29.31ID:nE46Ot5u
ラッパー関数を作成する場合、値渡しと参照渡し、どちらの方法が一般的なのでしょうか?

void append(T o) { vector.push_back(o); }
void append(const T& o) { vector.push_back(o); }

boostのコードで値渡しの方法を見かけたのですが、
(http://www.boost.org/doc/libs/1_60_0/boost/assign/std/vector.hpp)

push_back内で行われるコピーを考えると二重のコピーになってしまう気がします。
参照を使わない方法にはなにか意図的な物があるのでしょうか。
またはC++では値渡しが基本ということなのでしょうか。
0487デフォルトの名無しさん2016/02/16(火) 17:43:40.27ID:3V9H/1fh
テンプレートで、しかもinlineだから値渡しにしても良いという判断なんなんじゃないかな
0488デフォルトの名無しさん2016/02/16(火) 22:16:20.17ID:eGMzofhZ
>>482
type_traitsヘッダを明示的にincludeしなきゃだめとかじゃないのか
0489デフォルトの名無しさん2016/02/17(水) 00:02:13.91ID:BJJMKH5P
>>488
実際のコードではincludeしてたしそうでもないなー

http://webcompiler.cloudapp.net/
ここでコンパイルすると通るけど
新規プロジェクトでWin32コンソールアプリケーション選んで同じコードコピペしてもエラーになるわ・・
俺のVisual Studio 2015 Communityがおかしいのか・・・?
0490デフォルトの名無しさん2016/02/17(水) 00:47:09.77ID:BJJMKH5P
まさかと思いUpdate 1当てたら通るようになりました。
どうもありがとうございました。
0491デフォルトの名無しさん2016/02/17(水) 01:24:40.77ID:1H9n+Lj4
>>486
オブジェクト変更しないならconst参照でいいと思うけどなぁ
0492デフォルトの名無しさん2016/02/17(水) 01:37:30.39ID:N1klTUFY
そのboostのやつは要素が基本形であることしか考えてないんだろ
だから安易に値渡しになってる
0493デフォルトの名無しさん2016/02/17(水) 03:30:55.57ID:1UNcQaMi
せやろか
Boostに採択されるような手練れがそんな甘い設計をするのだろうか?
0494デフォルトの名無しさん2016/02/17(水) 07:43:08.25ID:MVw4Ur3f
boost.assignの使いみち考えれば基本型しかなくても不思議はないな
まぁでも、call_traitsみたいなやつくらいかましてくれても良いような気がするね
forkして直すか、issueあげれば?
0495デフォルトの名無しさん2016/02/18(木) 12:57:49.40ID:cxWjsl/x
目的による
ビットフィールドを切り捨てていいならforwarding-reference一択
そうでなければ値
0496デフォルトの名無しさん2016/02/24(水) 22:51:52.03ID:VzuGlgNz
ビットフラグはどういう風に定義するのが一般的なのでしょうか?
_Ios_Openmodeと同じように使いたいのですが、_Ios_Openmodeのように使う演算子を全て定義するのはしんどいです
0497デフォルトの名無しさん2016/02/25(木) 00:30:18.43ID:uN/qSY7h
リスクと手間を秤にかけて自分がそれでいいなら
enumなりconst intなりで定義してintで受けるでいいじゃん
0498デフォルトの名無しさん2016/02/27(土) 09:14:46.60ID:B5OJFLka
昨日からプログラミング始めたけど全角スペースで4時間無駄にしたよ
0499デフォルトの名無しさん2016/02/27(土) 09:24:04.15ID:YM9sOpwd
>>498
エディタは何使ってますか?
全角スペースを表示してくれるものを使うべき。
0500デフォルトの名無しさん2016/02/27(土) 09:46:15.34ID:EVrRfJ4L
>>498
無料ならMicrosoft Visual C++ **** Expressええよ
****は2015とか2010とか
0501デフォルトの名無しさん2016/02/27(土) 09:53:46.81ID:EVLCSxnr
使ってはいけない文字に対してマトモなエラーメッセージも出せないコンパイラーを捨てた方がいい
0502デフォルトの名無しさん2016/02/27(土) 10:22:01.85ID:ip4T9kfk
>>500
個人で使うなら Community でいいだろ
05034982016/02/27(土) 11:07:50.71ID:B5OJFLka
>>499
使ってるのはMPLAB X IDEです。
PIC用のコンパイラなんで選択肢がないんです。
0504デフォルトの名無しさん2016/02/27(土) 12:35:38.21ID:kGYWxRyl
Rictyフォント使うと全角スペース表示できるよ
0505デフォルトの名無しさん2016/02/27(土) 19:42:06.67ID:e3iZnQnQ
全角スペースを半角に変換するプログラムを書け
05064982016/02/27(土) 21:29:31.24ID:B5OJFLka
>>504
ありがとう
ためしてみます。

>>505
コピペしてvisual studioでエラーチェックするほうが楽なような…
0507デフォルトの名無しさん2016/02/27(土) 21:31:46.76ID:5GAk+yBj
Sedでできませんか?
0508デフォルトの名無しさん2016/02/27(土) 22:19:08.19ID:7YlZaAlc
" " 文字列の中は手をつけちゃいけない(かもしれない)
PICに全角スペースを送ることが無ければ sed で機械的に置換しても良さそうではあるね
0509デフォルトの名無しさん2016/02/28(日) 13:30:58.62ID:awPHDJ6K
なるほど
フォントの全角スペースを改造すればいいのか
Windowsだと欧文と日本語で違う書体を結合して使えた気がするけど
なにかツール作ったら売れるかしら
0510デフォルトの名無しさん2016/02/28(日) 16:37:36.49ID:/QarnVVy
大抵、テキストエディタなら置換できるでしょ
0511デフォルトの名無しさん2016/02/28(日) 17:46:35.50ID:y2JqqQss
全角スペースとはなんですか?
0512デフォルトの名無しさん2016/02/28(日) 18:43:14.09ID:p5UOgBYD
U+3000の俗称です
0513デフォルトの名無しさん2016/02/28(日) 19:37:45.32ID:LskVG92e
>498はCだろうけど、もしC++だったら
文字列リテラルの書式が複雑だから
並のテキストエディタでは無理だな
0514デフォルトの名無しさん2016/02/29(月) 20:06:10.85ID:S6WeIjHM
気づかなかった・盲点だったからこそ時間を無駄にしたと言ってるのに
置換すればいいじゃんというのは後出しジャンケン
0515デフォルトの名無しさん2016/02/29(月) 21:12:02.39ID:9U61NZXR
そんなハッキリ言っちゃあ
>>505が死にたくなっちゃうだろ
0516デフォルトの名無しさん2016/02/29(月) 21:32:37.11ID:WsXCEdmC
俺も昔全角スペースで詰まったなあ
0517デフォルトの名無しさん2016/02/29(月) 21:42:50.19ID:lyAYNKhs
主因はもっと前でエラーで報告する行が違うタイプだと追いかけるのは辛いかもな
0518デフォルトの名無しさん2016/02/29(月) 23:56:37.61ID:R5/f1yHW
エラーメッセージは大切に という事で。
0519デフォルトの名無しさん2016/03/01(火) 08:32:17.13ID:DE/IoWWP
初心者はエラーはもちろん警告も意味調べた方がいいな
0520デフォルトの名無しさん2016/03/01(火) 16:23:22.30ID:sgxRB/xW
ワロタwwwwwwwww
C++11 から努めて初期化は中括弧で括るようにしてたら、vectorの初期化で何故か要素の個数がおかしい

cin >> columns;
vector<size_t> row {columns,0};

これのsize()が2となってしまう。
rowはcolumns個の0で満たされてる筈だろと怒り狂ってたが、なんのことはない。initializer_listのせいで配列の直接初期化みたいに解釈されてたってわけだwwwwwwwwwwwwwwww

vector<size_t> row(columns,0);
こう書かなきゃいけなかったって罠wwwwwwww

せめて警告だせや・・・
0521デフォルトの名無しさん2016/03/01(火) 16:43:11.99ID:2hHFbr9O
警告出す余地などない
>C++11 から努めて初期化は中括弧で
この時点で間違い
0522デフォルトの名無しさん2016/03/01(火) 17:57:47.16ID:QXg/KhC5
初期化とコンストラクタの呼び出しの違いもわからんとかやばすぎだろ
0523デフォルトの名無しさん2016/03/01(火) 18:11:11.19ID:EJretKYd
また一つ賢くなってしまった
0524デフォルトの名無しさん2016/03/01(火) 19:19:04.01ID:oKiiXTzA
type name {};の記法って比較的新しい記法だっけ。
>>520はこの記法(type name = {};)とこんがらがってるんじゃ。
0525デフォルトの名無しさん2016/03/01(火) 19:41:55.72ID:PHR3lkCJ
私もコンガラしてました。
あの初期化方って、文書けるのかな?
やってみよ!
0526デフォルトの名無しさん2016/03/01(火) 20:46:19.21ID:9dWygJNI
初期化の、方法が、多すぎ、ます、ね
0527デフォルトの名無しさん2016/03/01(火) 23:49:31.25ID:GW+Y//Y5
Effective の新しいのに何か規則が載ってたが
どうも忘れるな
0528デフォルトの名無しさん2016/03/01(火) 23:50:46.86ID:duXxLpAE
>>520はそこそこマトモなことを言っているのに理解されずに哀れチーン
initializer_listを取るコンストラクターを持つクラスに直接初期化の構文を使うとロクなことが無い
0529デフォルトの名無しさん2016/03/02(水) 08:58:11.81ID:Y9OGG++l
C言語初心者です。visualstudio2015でscanfをscanf_sにしないとエラーがでるんですがどうしてなんでしょうか?
0530デフォルトの名無しさん2016/03/02(水) 09:50:33.07ID:Bi9ZhcNY
https://msdn.microsoft.com/ja-jp/library/8ef0s5kh.aspx
scanf はセキュリティ的に危ないからこっち使えというコンパイラの方針
0531デフォルトの名無しさん2016/03/02(水) 09:59:31.83ID:fFa0LFn2
scanf_sとか、_sが後ろにくっついてるのはC11以降の規格だな
最初に提唱したのは>>530の言うようにMSかも知れない
しかし今は規格にも取り入れられた
0532デフォルトの名無しさん2016/03/02(水) 10:40:41.56ID:hquUwf2j
>>528
ロクなことが〜というより使えんだろ
0533デフォルトの名無しさん2016/03/02(水) 11:08:38.96ID:HysrTsvI
解散だ解散
0534デフォルトの名無しさん2016/03/02(水) 11:59:58.90ID:VauVagFG
int i;
int i = 0;
int i();
int i(0);
int i = int();
int i = int(0); //←コンストラクタじゃなくてキャスト? www
int i{};
int i{0};
int i = {};
int i = {0};

まだある?
0535デフォルトの名無しさん2016/03/02(水) 12:39:27.01ID:9ZwWQH++
int i = int{};
int i = int {0, };
int i = {{{}}};
0536デフォルトの名無しさん2016/03/02(水) 12:56:24.00ID:yw99+KKC
int i();
は関数宣言
0537デフォルトの名無しさん2016/03/02(水) 16:05:56.86ID:VauVagFG
↑言われてみればそうだな

ここまで変数宣言と初期化のような初歩的な機能が
混沌としている言語はC++以外には存在していないだろうな
0538デフォルトの名無しさん2016/03/02(水) 16:26:45.80ID:P6X03PkU
変数を宣言するだけなら混沌とはしない件
0539デフォルトの名無しさん2016/03/02(水) 21:18:48.31ID:9ZwWQH++
「変数を宣言するだけなら」
という条件を付けると何か良いことがあるのあろうか
0540デフォルトの名無しさん2016/03/02(水) 21:23:17.04ID:aR2d45Hi
無名クラスがラビリンスへと誘うjavaよりはマシ
0541デフォルトの名無しさん2016/03/03(木) 17:33:12.60ID:NgCVuGhZ
すみません。Windows10を巷では無償アップグレードできるみたいなんですが、
私はWindowsVistaの為アップグレード対象ではありません。ヤマダ電機へ行っても
正規のWindows10は売ってますがアップグレードエディションが売ってません。

Windows10のアップグレードエディションは売ってないのですか・・?
0542デフォルトの名無しさん2016/03/03(木) 17:57:15.74ID:7LVuWV6J
期間限定になるけど、7か8.1のアップグレード版買ってきて
そこから10の無償アップグレード使うのはどうかな

ってここプログラム板じゃん、、、
続きがあったらWindows板で
0543デフォルトの名無しさん2016/03/03(木) 18:14:46.52ID:94sJe93w
> 7か8.1のアップグレード版買ってきて
> そこから10の無償アップグレード使うのはどうかな

無茶な 無料ならかんがえなくもないが失敗リスク高いわ
0544デフォルトの名無しさん2016/03/03(木) 18:44:47.01ID:94sJe93w
おまけに再インストール・アップグレードどないすんねん
素人か
    _, ,_  パーン
 ( ‘д‘)
  ⊂彡☆))Д´) >>542
0545デフォルトの名無しさん2016/03/06(日) 10:19:43.11ID:8wRYX6K4
アップグレードできればインストール用メディアもプロダクトキーも手に入るだろ
どっちが素人なんだかw
0546デフォルトの名無しさん2016/03/07(月) 06:07:42.46ID:LVGGCees
>>534
auto で結果的にintの変数が作られるパターンはどう?

auto i = 0; // i は(初期化値0がint数なので)int変数
0547デフォルトの名無しさん2016/03/07(月) 07:11:06.02ID:u8+PBg0+
>>546
それは
int i = 0;
と同じ
0548デフォルトの名無しさん2016/03/07(月) 09:43:23.40ID:0FSfFoA9
auto hoge="ハロいつも元気だね";

これは char* ? string ?
0549デフォルトの名無しさん2016/03/07(月) 12:44:37.88ID:LVGGCees
#include <iostream>
#include <string>
#include <typeinfo>

int main(void)
{
 std::string s_str = "std::string";
 const char *c_str = "c-style";
 auto a_str = "auto variable";

 std::cout << "s_str is '" << s_str << "', " << typeid(s_str).name() << '\n';
 std::cout << "c_str is '" << c_str << "', " << typeid(c_str).name() << '\n';
 std::cout << "a_str is '" << a_str << "', " << typeid(a_str).name() << '\n';
}

俺の環境 gcc 4.8.2 では auto だと const char * と同じになった。
まぁ、順当なところか。

auto で std::string を作りたけりゃ
ユーザ定義リテラルでも使えってことだろう。
05505492016/03/07(月) 13:02:50.93ID:LVGGCees
…で、軽く書いてやろうと思ったが上手くいかないよぉ。
05515492016/03/07(月) 13:12:20.25ID:LVGGCees
#include <iostream>
#include <string>
#include <typeinfo>

std::string operator"" _ss(const char *s, std::size_t len)
{
 return std::string(s, len);
}

int main(void)
{
 std::string s_str = "std::string";
 auto u_str = "user defined"_ss;

 std::cout << "s_str is '" << s_str << "', " << typeid(s_str).name() << '\n';
 std::cout << "u_str is '" << u_str << "', " << typeid(u_str).name() << '\n';
}
0552デフォルトの名無しさん2016/03/07(月) 15:45:03.96ID:0FSfFoA9
ちゃっちゃ書ける時は書いて、ダメならコンパイラに
怒られるって事すかね。
0553デフォルトの名無しさん2016/03/07(月) 17:43:24.21ID:SPuLNVrG
どうして標準ライブラリにあるものを再発明したがるのか
0554デフォルトの名無しさん2016/03/07(月) 19:20:45.14ID:LVGGCees
それ自体が勉強になるからかな。
標準機能の一覧を丸暗記してるわけじゃいってことも大きいけど。
0555デフォルトの名無しさん2016/03/07(月) 21:06:24.05ID:rcA1ymXW
>>532
orerator ""s を見て気づいたが、そうでもないようだ
0556デフォルトの名無しさん2016/03/07(月) 21:46:22.54ID:Ha68PnBT
vc++の非mfcアプリでc#のformアプリ風のgui作りたいんですがどうしたら出来ますか?
0557片山博文MZ ◆T6xkBnTXz7B0 2016/03/07(月) 21:51:29.25ID:vq5fVXSL
>>556
ATL/WTLなんてどう?
0558デフォルトの名無しさん2016/03/07(月) 21:58:53.22ID:rcA1ymXW
C++/CLIで.NET FrameworkのWinForm使えばC#と区別がつかないが…
0559デフォルトの名無しさん2016/03/07(月) 21:59:06.92ID:Ha68PnBT
>>557
ありがとうございました。
さっそく調べてみます。
0560デフォルトの名無しさん2016/03/09(水) 22:44:47.52ID:LKL6xiHN
C++を勉強するにあたり、入門書を教えて下さい

UnityでC#のコードを書いていたのですが、興味のあるOSSがC++で書かれていたためC++を勉強したくなりました
そこでAndroidの学習用アプリをやってみたものの、C#でもJavaでも一緒じゃないのかと思える演習を延々とやらされて嫌になってきました
C++11以降に対応している入門書で、かつC#やJavaとの違いが現れる程度の段階まで解説している書籍はないのでしょうか?
よろしくお願いします
0561デフォルトの名無しさん2016/03/09(水) 23:50:40.33ID:t6r0Jvyr
C#, Java でオブジェクト指向を知っているなら、
速習C++・リファレンス・柴田望洋など。

実際にこういう本があるかどうかは、知らないよ。
あくまでも傾向として言っただけ
0562デフォルトの名無しさん2016/03/09(水) 23:57:12.01ID:K6L14kPg
入門書ではないですがバイブルはC++言語第四版。これは決定。
定番の丁寧さなら望洋先生のC+編がいいかなぁと。
http://www.bohyoh.com/
ちょと丁寧すぎるかな。まぁ人によるかならなぁ。
一番手っ取り早いのはC++入門でググる事w
0563デフォルトの名無しさん2016/03/10(木) 00:38:34.16ID:xK6/zWJT
大事なのはアルゴリズムですよ
C++なのに、(正しいアルゴリズムを選択した)Javaに負けるコードを書く人がいますが全くもって恥ですね
ロバートセジウィック先生のアルゴリズムC++を古本屋から発掘して読み尽くすと良いでしょう
演習問題も面倒くさがらず全部自力で取り組むんですよ
一部フォートランで書けとか無茶ぶりされますけどね
0564デフォルトの名無しさん2016/03/10(木) 03:05:49.16ID:uW25MwRS
javaの技術者がC++のコード書いたらそうなってた
0565デフォルトの名無しさん2016/03/10(木) 08:35:56.52ID:A6Yloxow
『C言語を始めよう!』でコンパイルすると
 temp /C bcc32.exe "○○.c"
 *** 拡張エラー情報 ***
 指定されたファイルが見つかりません。
ってエラーがでるんだけど、何が駄目なんだろうか
勿論環境変数やコンパイラの設定してあるんだけども
0566デフォルトの名無しさん2016/03/10(木) 10:48:50.11ID:99+oyHKa
○○.cが無いんじゃ?
0567デフォルトの名無しさん2016/03/10(木) 12:18:56.89ID:A6Yloxow
>>566
いや、"C:\borland"にあるんです…
0568デフォルトの名無しさん2016/03/10(木) 12:32:52.66ID:/Qk8unTb
bcc 単品の設定だけじゃなく
「C言語を始めよう!」ってアプリ側の設定じゃないの?

ttp://homepage3.nifty.com/aokura/phoebe/phoebe.htm
・本ソフトを起動し、「ビルド(B)」→「コンパイラ(E)の設定」→「Borland C++ 5.5 の設定(B)...」で、BCC32.EXE の位置を指定します。
・その下にある「bcc32.cfg と ilink32.cfg を作成する(B)」ボタンを押します。
・ステータスバーに「BCC55」が表示されるまで、「ビルド(B)」→「コンパイラ(E)の設定」→「コンパイラの切り替え(T)」を1、2回実行します。
・あとは、ソースファイルを記述して、名前を付けて保存し、「コンパイル(C)」を実行します。
・コンパイルに成功したら、「実行(X)」で、出来たプログラムの動作の確認が出来ます。
・コンパイルオプションについては、bcb5tool.hlp を参照して下さい。

※
 「C言語を始めよう!」が コンパイラをキックするのが ShellExecute なのか CreateProcess なのか
 ついでに ソース名をフルパスで渡すのか どこかからの相対なのか
 は知らん
0569デフォルトの名無しさん2016/03/10(木) 12:45:41.08ID:A6Yloxow
>>568
うぅん手順は合ってるんだけどな…
C言語を始めよう!は使わないでおくわ。色々教えてくれてありがとう
0570デフォルトの名無しさん2016/03/10(木) 13:49:15.72ID:99+oyHKa
ファイル名が日本語とかな
まあ普通にIDE使ったほうがよさ気
0571デフォルトの名無しさん2016/03/10(木) 14:47:52.44ID:+KZ/FiYH
よく分かんないのでMinGW入れてg++でコンパイルしようよ
0572デフォルトの名無しさん2016/03/10(木) 21:13:24.71ID:kWiWVk9s
>>561>>562
簡単な方の本は演習問題付きで結構良さそうですね
C++言語第四版もアマゾンで中身を見た限りでは結構丁寧に書かれているように感じる上、後半は私にとって意味不明なので重点的な勉強が必要そうです
確かにこれを買わないと先に進まない気がします
ちょっと高いもののC++言語第四版の方を試しに買ってみます
参考になりました、ありがとうございます
0573デフォルトの名無しさん2016/03/10(木) 22:13:51.79ID:gCv4zjHZ
>>572
第四版は入門書ではありませんので、是非本屋で立ち読みしてからの方がいいです。
0574デフォルトの名無しさん2016/03/11(金) 00:53:11.95ID:bR4JsiM7
>>563
アルゴリズムで検索が速いのは、ハッシュ・O(1)か、
赤黒木などの2分探索木・O(log N)

リストは線形探索(全探索)・O(N)になるけど、
中ほどの要素の、追加・削除が速い。
ポインタの付け替えだけだから。

それ以外なら、vectorを使えばいい。
vectorでは、要素の中ほどに、要素を追加すれば、
それ以降の要素がすべてずれる(コピーされる)けど、

データがメモリ上で連続しているため、
キャッシュ乗りが良いので、初心者でも扱いやすい
0575デフォルトの名無しさん2016/03/11(金) 08:59:25.84ID:GtTxavTA
前半はアルゴリズムの一般論
後半は実装を踏まえた話
0576デフォルトの名無しさん2016/03/11(金) 09:16:11.60ID:jmyOAi9V
今時、浮動小数で数値計算する場合でもない限り java でも c++ でも速度なんて対して変わらんよ。
言われてる通りアルゴリズムの選び方のがクリティカル。
0577デフォルトの名無しさん2016/03/12(土) 15:50:30.76ID:J24la46V
vectorのイテレータに於けるdistanceはO(1)ですか?
0578デフォルトの名無しさん2016/03/12(土) 16:21:04.16ID:UiFNIvX8
>>577
そう。RandomAccessIteratorだから
0579デフォルトの名無しさん2016/03/12(土) 16:43:01.27ID:U/A263z3
ベクトルはものすご賢い。
0580デフォルトの名無しさん2016/03/12(土) 17:07:01.55ID:J24la46V
>>578
ありがとうございます
0581デフォルトの名無しさん2016/03/13(日) 18:20:07.45ID:m8jmEMPq
equal_range、lower_bound、upper_boundはいずれもForwardIteratorを要求します。
これにvectorのようなRandomAccessIteratorを適用した場合、RandomAccessIterator用の実装がタグ指名されるのでしょうか?
つまり、ちゃんと二分探索されるのでしょうか?
0582デフォルトの名無しさん2016/03/13(日) 18:28:12.05ID:9MkMKiKH
>>581
実装がどうなってるかは別として、計算量はランダムアクセスイテレータに対してちゃんと規定されてる。

25.4.3 [alg.binary.search] より
> ... They work on non-random access iterators ... They are especially
> appropriate for random access iterators, because these algorithms do a
> logarithmic number of steps ... For non-random access iterators they
> execute a linear number of steps.
0583デフォルトの名無しさん2016/03/13(日) 19:02:30.27ID:m8jmEMPq
ありがとうございました
0584デフォルトの名無しさん2016/03/23(水) 22:52:06.37ID:g6Pst4N6
構造体の一部のメンバだけをゼロクリアしたいのですが
forで0をループさせるか、べた書き以外に他にあるのでしょうか。

struct hoge2
{
 int a[500]; ←これだけを0クリアしたい
int b[30];
}

struct hoge1
{
hoge2 [5];
int hogehoge;
}
0585デフォルトの名無しさん2016/03/23(水) 23:02:07.00ID:ck1lVuwK
hoge1でsyntax errorだな。モット正確に書け
推測で言えば、5回ループ必須でその中はmemset一発かな
0586デフォルトの名無しさん2016/03/23(水) 23:23:00.77ID:zr0GrXhr
struct hoge2
{
int a[500] = {};
int b[30];
};
はどうですか?
0587デフォルトの名無しさん2016/03/24(木) 00:18:15.33ID:jvrnTjtw
知らない人多いと思う
05885842016/03/26(土) 09:21:58.80ID:MMAwLytC
>>585
すみません。確かに構文エラーでした。
中はmemsetで1発で0になりました!

>>586
宣言時や要素1つだけなら{}だけでもクリアできるんですね。
{}に0を入れなければならないと思い込んでいました。

>585さん>586さんありがとうございました。
0589デフォルトの名無しさん2016/03/27(日) 17:29:03.71ID:GYHXz8Cu
int main() {
int&& rr = 1;
// rrは左辺値
int& i = rr;
int d = 2;
// 左辺値を代入できる
rr = d;
}
最後の文がなぜ可能なのでしょうか?
0590デフォルトの名無しさん2016/03/27(日) 18:20:38.68ID:3sUtyXnx
&&ってムブセマンティクスじゃなかたけ?
0591デフォルトの名無しさん2016/03/27(日) 22:36:24.60ID:GYHXz8Cu
rrは右辺値をバインドできて、それ自体が左辺値なのは分かるんだけど、
なぜrrに左辺値を代入できるのかなという・・・
0592デフォルトの名無しさん2016/03/27(日) 22:47:09.37ID:TPLiUYg3
>>589
自分で書いてるとおりにrrは左辺値だから

>>590
・右辺値
・右辺値参照
・ムーブセマンティクス
はそれぞれ別個の概念だから勝手に一つにまとめて混乱しないように
(互いの関連性は高いけど)
0593デフォルトの名無しさん2016/03/27(日) 22:50:54.20ID:GYHXz8Cu
左辺値なのは分かるのですが、int&&型なので
左辺値は受け取れないのでは、という所で躓いてます
0594デフォルトの名無しさん2016/03/27(日) 22:55:14.91ID:OgqSzyNS
右辺値参照は「バインド」できるのが右辺値ってだけで最後のはdの「値」を代入してるだけだからじゃね
0595デフォルトの名無しさん2016/03/27(日) 22:56:22.98ID:TPLiUYg3
>>591
左辺値はただの左辺値で(元が)参照の左辺値とか参照でない左辺値とかの区別はしない
>>589の
rr = d;
は厳密にはdを評価した結果の右辺値を代入していて
int a = 1, b = 2;
での
a = b;
と意味は変わらない
0596デフォルトの名無しさん2016/03/27(日) 22:56:39.39ID:xH5LcqvW
むずかぴー
0597デフォルトの名無しさん2016/03/27(日) 22:57:11.06ID:nUenius6
>>593
その制限は初期化の時だけだ(関数の仮引数の初期化も含む)
初期化後はint&もint&&も、型は違うがintの参照だからint値を代入できる
0598デフォルトの名無しさん2016/03/27(日) 22:59:59.91ID:GYHXz8Cu
>> 595
つまり、
int&& rr = 変数;
だと変数を評価した値をバインド使用とせず、変数自体をバインドしよう
とするからエラーになり、
int && rr = 1;
rr = 変数;
とすると、変数を評価した値をバインドするから、OK
ということでしょうか?
0599デフォルトの名無しさん2016/03/27(日) 23:02:33.68ID:GYHXz8Cu
>> 597
#include <utility>

int main() {
int&& rr = 1;
// rrは左辺値
int& i = rr;
int d = 2;

std::move(rr) = d;
}
なるほど。
上記のコードで確かにエラーになりました。
0600デフォルトの名無しさん2016/03/27(日) 23:05:27.53ID:GYHXz8Cu
まてよ。
なんか違う原因でエラーになっている気がするが、、、まあいいや

回答ありがとうございました。
調べても分からなかったので、非常に助かりました。
0601デフォルトの名無しさん2016/03/27(日) 23:17:13.59ID:TPLiUYg3
>>598
初期化と代入を混同しない、というC++での基本からの話になるか?
参照がなにかをバインドできるのは初期化の時だけ
それ以降は参照ではない変数のときと同じようにただの値の代入になる
0602デフォルトの名無しさん2016/03/27(日) 23:25:59.05ID:GYHXz8Cu
>>601
確かにそうですね。
ありがとうございます。
0603デフォルトの名無しさん2016/03/27(日) 23:59:30.41ID:nUenius6
>>595
>左辺値はただの左辺値で(元が)参照の左辺値とか参照でない左辺値とかの区別はしない

いや区別はあるだろ
int型の左辺値なのかint&型の左辺値なのかint&&型の左辺値なのか
という区別が
0604デフォルトの名無しさん2016/04/01(金) 02:55:46.43ID:ZvSssTS6
ブロック内からgotoでブロック外に跳んだ場合、ブロック内で宣言していた自動変数は解放されますか?
0605デフォルトの名無しさん2016/04/01(金) 05:28:15.19ID:mYua7P08
>>604
ttp://codepad.org/ryyEJmJ5
ttp://codepad.org/6nI27etD

実験はできたけどC++の仕様として確実かは不明。
…て、まるで役に立たないね。
0606デフォルトの名無しさん2016/04/01(金) 05:34:19.47ID:mip+hcrZ
確実でしょ
規格のどこに書いているかは次の人が教えてくれます
0607デフォルトの名無しさん2016/04/01(金) 10:59:41.28ID:gprSplwf
>>605
end of block が表示されてるのが、ものすげ怖いんですけどぉw
0608デフォルトの名無しさん2016/04/01(金) 12:22:32.44ID:KUrtZxE4
基本C++で、構造体のメンバーを指定して初期化、テーブルを作りたい

C99だと下記で、構文上はOK
static const struct Hoge {
char cmd[3];
char dat;
} cmdTable[] = {
{ .cmd = "abc", dat = 1 },
{ .cmd = "def", dat = 2 },
};

けど、存在しないcmd[3]にnull文字が書かれ(datには入る、だろう)、
その後にdat への値代入?で上書きを期待したいのだけど、その順序は保証されてるのでしょうか?
0609デフォルトの名無しさん2016/04/01(金) 12:31:22.43ID:KUrtZxE4
dat の指定、. が抜けてました

cmd[0] = 'a', cmd[1] = 'b' ... ときちんと書けば済むのでしょうが、
゙゙で文字列として一括で記述できればと思い、この記述にしています
0610デフォルトの名無しさん2016/04/01(金) 12:40:14.97ID:1REg68oq
つconst char*
0611デフォルトの名無しさん2016/04/01(金) 13:00:21.30ID:FjOqpklz
>>608
存在しないcmd[3]にnull文字が書かれたりしない
配列サイズを越える分は無視される
0612デフォルトの名無しさん2016/04/01(金) 13:04:43.36ID:mip+hcrZ
>>607
何が怖いんだよ?2つ目(gotoしない)でend of blockが表示されるのは当たり前だろ
0613デフォルトの名無しさん2016/04/01(金) 15:09:07.42ID:gprSplwf
>>612
すまん 漢違いしてた。
0614デフォルトの名無しさん2016/04/01(金) 20:12:30.50ID:mT+xJTkc
>>608
アクセス指定の固まりの中での順序は確か宣言の順
0615デフォルトの名無しさん2016/04/02(土) 14:53:07.60ID:pO9IxWzb
いやいや気持ち悪いわ 全力で止めろよ
0616デフォルトの名無しさん2016/04/03(日) 01:38:59.37ID:ACxMRHW8
https://ask.fm/EzoeRyou/answers/135696273239

ソースは江添
0617デフォルトの名無しさん2016/04/03(日) 12:59:25.20ID:ZT/2NYWz
>>606
6.7 Declaration statement
『Variables with automatic storage duration declared in the block are destroyed on exit from the block (6.6).』
ちなみにこの次の段落で、宣言文をスキップしてブロック内へ入るgotoや、
宣言前からトリビアルでない初期化の後の位置へのgotoは出来ないとされている
0618デフォルトの名無しさん2016/04/11(月) 15:25:04.17ID:iHblbFKB
今のHDDには大抵メモリのバッファがついています
そこで、C言語でプログラムを作るとき、ソフトウエアの中でわざわざメモリ上にHDDのデータを
バッファとして持っておくように作るのは意味はないのでしょうか
トータル500MBくらいある中で、10MBくらいを選んで使うのですが、500MBをまとめてメモリ上にとっておいて
バッファも含めて作るのと、気にせずに実際に使用する10MBをいちいちHDDから持ってくるように作るのと
実際の使用速度はかなり違うのかそれほど差異はないものなのか
もちろん500MBを取って来てプログラムをつくる方が多少めんどくさくなりますが
0619デフォルトの名無しさん2016/04/11(月) 16:51:26.05ID:U1EchCEf
測ればわかる。どっちにしろデバイスにはI/Oが発生するわけでして。
SSDでもバッファは付いてるわけでして。
0620デフォルトの名無しさん2016/04/11(月) 18:37:12.33ID:eEUFGthi
ストレージ以前にOSもメモリが余ってればディスクキャッシュするわけだし
頻繁にアクセスするなら自分管理する方が速い可能性があるけどそうでないなら大差ないでしょ
気になるなら自分でベンチとって速度と保守性のバランス考えてね
0621デフォルトの名無しさん2016/04/11(月) 19:49:07.91ID:lMeZFfb2
>>618
こう言う質問をするレベルなら
まず
> 気にせずに実際に使用する10MBをいちいちHDDから持ってくるように作る
ようにしなよ
それで実際に動かして遅いと感じたら
まずどこがボトルネックなのかを調べて
ネックがディスクアクセスってわかってからバッファ云々を検討すればいい
0622デフォルトの名無しさん2016/04/11(月) 23:54:49.61ID:PEl2MjDL
C++でWindowsアプリケーションを作るとき何を使ってますか?
Windows APIのみ?
MSVCのリソースエディター?
DXライブラリやQtの様なライブラリ?

そもそも、C++でWindowsアプリはあまり作りませんか?
0623デフォルトの名無しさん2016/04/12(火) 00:57:34.77ID:mly3h82B
もうね・・・
0624デフォルトの名無しさん2016/04/12(火) 01:37:17.06ID:EGwuD3BS
C#を使います!
0625デフォルトの名無しさん2016/04/12(火) 07:22:37.54ID:kaM2R7Ii
Visual Studio Community
0626デフォルトの名無しさん2016/04/12(火) 23:02:47.88ID:wtwAGKCL
>>618
その手の質問には昔から「実測あるのみ」としか言いようがない。
環境的な要素が多すぎて正答がないんだよね。
0627デフォルトの名無しさん2016/04/13(水) 07:23:10.91ID:cvjtCiXi
作業領域があまりにもでかいと空けるためにスワップアウトする確率が高まるし
逆にあまりにも少ないとI/Oアクセスが多くて効率が落ちる
さじ加減はデータ処理方法・環境・状況に応じては変わるよな
0628デフォルトの名無しさん2016/04/13(水) 08:54:20.67ID:s5MRiDQ8
そういうのをスケールとか粒度とか言うよね
プログラムは架空の世界の出来事のようで
実際には現実世界のハードウェアの制約や
人間がぎりぎり我慢できる応答時間とか
そういった物理的係数の制約を受けるので
単純にスケールしないのだよね
0629デフォルトの名無しさん2016/04/13(水) 09:35:38.80ID:1hmYwVcI
>>628
なんか用語がいろいろアレだな
言いたいだけ症候群かな
0630デフォルトの名無しさん2016/04/13(水) 10:29:29.84ID:5DjU41A/
やむやむ
0631デフォルトの名無しさん2016/04/13(水) 23:10:38.49ID:58qYoL8g
ただでさえ作りの悪いWindowsにVMだのフレームワークだのを要求するアプリケーションなんか怖くて使う気になれない。
ベースがWindowsとトラブったら終わりだもんな。
C++ならピクセル単位、ビット単位でコンピュータを動かせる。文字列型が何やってるか分からん言語は分かりにくい
0632デフォルトの名無しさん2016/04/14(木) 05:36:19.87ID:/Il1GiFb
スケールするは僕も使ってみたいです
0633デフォルトの名無しさん2016/04/14(木) 07:04:00.58ID:J7AkptOM
>>631
老害 w
0634デフォルトの名無しさん2016/04/14(木) 07:43:14.59ID:HDYqfg9O
なんでWindowsとC++が同列なんだ
0635デフォルトの名無しさん2016/04/14(木) 16:28:37.86ID:K2RPj8lQ
言語は手段なんでね。
最近はJavaも速いみたいだし、勉強中。
0636デフォルトの名無しさん2016/04/14(木) 23:04:32.60ID:oDeQeVDH
>>633
文系オペレーター乙
0637デフォルトの名無しさん2016/04/15(金) 06:18:38.71ID:PF+9HQCI
>>636
そんな古くさい煽りやる暇あるなら、>>634 の疑問に答えてやれよ w
0638デフォルトの名無しさん2016/04/19(火) 22:13:28.01ID:4s2SrkGy
>>614
それはC++03までの仕様
C++11以降は同じ種類のアクセス指定内では宣言順
struct A {
 public: int v1;
 public: int v2;//C++11以降はv1より後を保証
 private: int v3;//v1,v2との順序保証は無し
};
0639デフォルトの名無しさん2016/04/19(火) 22:19:17.22ID:4s2SrkGy
アドレスの話と初期化順序の話を間違えた。
初期化はクラス定義に書いた順番。
忘れて
0640デフォルトの名無しさん2016/04/19(火) 22:23:28.21ID:ZZHh95Jt
初期化子の並びとメンバ変数の並びが合ってないとエラーになるよね。
これでけっこはまった。
0641デフォルトの名無しさん2016/04/20(水) 17:48:40.57ID:Cy4IjGhJ
ハゲ「ククク、バカめ。またひとり引っかかりおった」
0642デフォルトの名無しさん2016/04/21(木) 16:22:57.21ID:7grM4YJB
C言語学び始めてから3ヶ月
なんだかやればやる分何を目的で学んでいるのか分からなくなってきた
今は暇つぶし程度にDXライブラリでゲーム制作挑戦してるけど
こんな気持ちで続けてていいのだろうか
0643デフォルトの名無しさん2016/04/21(木) 17:34:38.42ID:RHijWpMC
新興言語は多くのライブラリの根っこの部分でCバインディングしてることが割とあるのでCの知識は必須だ
0644デフォルトの名無しさん2016/04/21(木) 17:50:53.17ID:P2F3Eqhg
c++11ではthreadが標準装備になったじゃん。
でもlinuxで言えばI/Fはsystemcall しかないんで、結局ラッピングしてるって事?
-pthreadオプションが必要だしね。
0645デフォルトの名無しさん2016/04/21(木) 18:22:00.58ID:pog3nPgL
>>644
ラッピングしてるに決まってるだろ
0646デフォルトの名無しさん2016/04/21(木) 20:05:21.37ID:P2F3Eqhg
だわな 失礼
0647デフォルトの名無しさん2016/04/21(木) 20:44:28.87ID:7fNr57Mn
linuxがCで組まれてる以上、そのインターフェイスも否応なしにC
そして、linusはC++への置き換えなんて毛頭ない

たとえlinusの威光が届かなくなっても、
C++への移行も半世紀はなさそう

>>642
さわりたいプラットフォームも考えて取り組むといいよ

確かに従来のゲームといえばC/C++だが、それはプラットフォームが固定されてたから、
ソフトを高速に動かすことが求められた

現代っ子にとってのゲームは、開発スピード優先のスマホやブラウザで、
ユーザーに高速なプラットフォームを要求すればいいだけだからC/C++は求められてない
0648デフォルトの名無しさん2016/04/21(木) 21:50:11.94ID:lgWYV0Nw
PC持ってるのがみんな金持ちならな
0649デフォルトの名無しさん2016/04/22(金) 00:14:50.67ID:eVjWh5ba
本質的でない無駄なことに注力するのではなく
ゲームのより本質に注力できるようになったことが
老人には耐え難い憤りと嫉妬を覚えさせるのです
0650デフォルトの名無しさん2016/04/22(金) 06:10:16.92ID:m6wpWus9
供給側は期間ごとにデータ(イラストやボイス)を差し替えるだけ。
消費側は時間ごとにクジを引いてデータを集めるだけ。
ランキング狙いは金の力で有利な条件を買い揃えるだけ。

ゲームの本質ですかねぇ?
C/C++ともプログラムとも関係ない老人の繰り言でした。
0651デフォルトの名無しさん2016/04/22(金) 06:18:16.72ID:mTUrU59j
独り言はブログに書け
0652デフォルトの名無しさん2016/04/22(金) 08:31:01.24ID:FElhleN0
話題の本質がわかってないの多過ぎ
0653デフォルトの名無しさん2016/04/22(金) 11:32:27.41ID:i/sRwbGN
istream_iteratorとstringに関する質問です。
標準入力から
0654デフォルトの名無しさん2016/04/22(金) 11:34:43.99ID:i/sRwbGN
途中で切れたので書き直し。

istream_iteratorとstringに関する質問です。
標準入力から
32 22 10[Ret]
みたいに空白区切りで複数の数値を入力して、
vector<int>に入力させるコードは、確か
istream_iterator<int> start(cin);
istream_iterator<int> end;
vector<int> v(start, end);
で書けたと思う(うろ覚え)のですが、
同じように中身が
32 32 10
というstringから入力反復子を作って
vectorに突っ込む方法はあるのでしょうか。
誰か知っていたら教えてください。
0655デフォルトの名無しさん2016/04/22(金) 12:52:03.35ID:aTezeKcM
getlineじゃだめなの?
0656デフォルトの名無しさん2016/04/22(金) 13:14:16.14ID:nTzk5WkP
>>654
stringstrean(<sstream>)
ttp://codepad.org/7X4uxza1
0657デフォルトの名無しさん2016/04/22(金) 17:49:01.15ID:7kzznYmM
>>647 >>649
なんか最近こういうのが沸くなぁ
技術無くてちゃちい2Dゲーしか作れないからコンプレックス持ってんだろうけど
>ユーザーに高速なプラットフォームを要求すればいいだけだからC/C++は求められてない
これが事実なら大規模な3Dゲーでもとっくにそうなってないといけないんだが・・・
どの言語を使うかなどプラットフォームや目的による。当たり前の話。
お前らC/C++のスレに何しに来てんだ?
0658デフォルトの名無しさん2016/04/22(金) 18:42:01.64ID:R2X74ulv
std::atomic<int>が0で初期化されてる保証はありますか
0659デフォルトの名無しさん2016/04/22(金) 20:32:13.51ID:FElhleN0
>>642
>>657みたいな指摘されても話題の本質が理解できずに、
周りを見下すだけしかできず、無価値な発言しかしない老害にはならんようにな

C/C++で現役で食ってる身だし、専用機のゲームの方が断然好きの立場だが、
方向性を見失っている初心者に「当たり前」を説いて何が不満なのか

つか「C/C++は求められてない」しか目に入ってなくて、意味不明なツッコミだな
0660デフォルトの名無しさん2016/04/22(金) 20:42:17.69ID:aTezeKcM
ちょと何言ってるかわかんない
0661デフォルトの名無しさん2016/04/22(金) 20:59:45.44ID:54q4G/YR
>>657は糖質

>>658
無い
ISO/IEC 14882:2014 29.6.5 p3
『leaves the atomic object in an uninitialized state. [ Note: These semantics ensure compatibility
with C.』
0662デフォルトの名無しさん2016/04/22(金) 21:10:51.76ID:aTezeKcM
std::atomicってなんじゃい のレベルです。
0663デフォルトの名無しさん2016/04/22(金) 22:06:45.90ID:Fy2sPSRR
>>661
どうも
0664デフォルトの名無しさん2016/04/22(金) 22:19:56.32ID:7kzznYmM
>>659
>指摘されても
は??俺このスレ(現行)書いたの初めてなんだが
>無価値な発言しかしない
>>649に価値があるのか?俺を叩くなよボケ

まぁ647の方は荒らすような内容ではないんで言い過ぎたかもしれないが、
PCゲーとコンシューマの開発経験者として言わせてもらうと
>ユーザーに高速なプラットフォームを要求すればいいだけだから
乱暴過ぎるんだよ、これ。ゲーム開発経験者じゃないだろ絶対。適当言わないでくれ
コンシューマならともかく、PCゲーで常に最新のCPU、GPU要求してたら会社潰れるぞ
まるで今のゲームといえばスマホゲーしか無いかのように言っててその上
>>649-651
の流れ見たらさすがにスルーできんわ・・・

あと俺のは>>642に宛てたレスじゃないんだがどこ見てそう思ったんだよ
0665デフォルトの名無しさん2016/04/22(金) 22:59:49.91ID:heBwzWJC
>>664
>このスレ(現行)書いたの初めてなんだが

おじいちゃんこの前も>>647でレスしてたでしょ
0666デフォルトの名無しさん2016/04/22(金) 23:07:00.10ID:qC8a/KEY
将来的にMMDagentみたいな音声認識と3Dモデル表示+ランチャー機能のあるプログラムを作りたいと思って
とりあえずやさしいc++を練習しつつ読み終えたところなんだが、次に進んだほうがいい本orサイトがあれば教えてくださいお願いします。
0667デフォルトの名無しさん2016/04/23(土) 00:17:37.99ID:UhtZslrV
>>666
構文理解したなら、他人のソースを読む…
の前にリーダブルコードってのもアリか

>>664
初っ端から見当違いに噛み付いた時点で非はおまいさんにある
オレは流れ読んでないから、見当違いなこと言ってもいいだなんて無茶苦茶
0668デフォルトの名無しさん2016/04/23(土) 04:38:33.81ID:0FPGkntR
>>665
アンカー間違えたの?
657で書いたのが初めてなのに「指摘された」っておかしいだろと言ったんだが
>>664
知ったかぶって初心者に嘘教えるのを非難したら見当違いか。へぇー。

ここに限らずああいう話が出るとすぐ>>649みたいなのが沸くんだが
>>649には諌めるどころか”「老害」の部分に同調した”煽りレス(>>659 >>665)が出てくるし
ということは、彼らは自分宛のレスでないにも関わらず
>技術無くてちゃちい2Dゲーしか作れないからコンプレックス持ってんだろうけど
あたりが図星で勝手に発狂したということになるんだが

知ったかぶって偉そうに言ってたことが実務経験者に間違いだと指摘されて
勝手に逆ギレし、「荒らしを叩く健全なスレ住民」を装って調子に乗って煽るのが
「スレの流れ」なんですかね。

>>666
本に限って言うなら、C++の難しいとこは置いといて
(もっと理解したいなら「C++の設計と進化」「プログラミング言語C++第4版」とか)
Windows上のプログラミングを理解できる本を1つ手元に置いといた方がいいかも
自分の場合は「Windows2000 プログラミング標準講座」だったけど、古いし改訂されてるかどうか・・・
目的から言って、ちゃんとメッセージループの仕組みとかをWin32APIでちゃんと解説してくれる本
あるいは.NET(C++/CLI)でも、さわりだけではない詳細な本がいいと思う(安い本はだめ)
あとサイトはとりあえず「猫でもわかる」をブクマしとけば十分かなと
0669デフォルトの名無しさん2016/04/23(土) 06:08:08.35ID:6r718OAO
>>650
本質ですよ
人に「楽しい」と感じさせた、
お金を払ってでも続けたいと思う価値を創造した、
これこそエンターテイメントの本質

技術自慢や規模自慢はまさに
レーゾンデートルを失って焦る老人の遠吠え
0670デフォルトの名無しさん2016/04/23(土) 06:30:53.63ID:0FPGkntR
>>669
前半は一見もっともらしいんだけど
>>650を読んだ上だと・・・・・w

グリーやモバゲーの社員(or下請け)なのかね、別に技術自慢してないし昨今のスマホゲーをけなしもしないけど
自分の不勉強を棚に上げるためにそういう屁理屈こねまわしてるとしたらいかがなもんか
0671デフォルトの名無しさん2016/04/23(土) 08:17:17.80ID:lEfknhOE
釣られすぎだろw
0672デフォルトの名無しさん2016/04/23(土) 11:06:28.46ID:UhtZslrV
野菜切ろうとしてる人に包丁の持ち方教えてたら
横から割り込んできて「人殺し!」みたいに見当違いに騒いでおいて、
一瞬落ち着いたと思ったら、オレはマグロも三枚におろせるんだぞ、
お前らは魚さばいたこともないだろとか言い出してる感じ
0673デフォルトの名無しさん2016/04/23(土) 11:12:11.94ID:dTOQaivR
>>649までの本質とは、他の言語を使うことでC/C++固有の煩雑さから解放され開発スピードを優先する話だったが
>>650がゲームの本質とは何か?にこだわり始めたようだ
後者は話をずらそうとする嵐

>>672は人殺しと攻められる幻覚が見えた糖質
ちょっと落ち着いた方がいい
0674デフォルトの名無しさん2016/04/23(土) 11:23:00.04ID:UhtZslrV
単に「道具の使い方次第」の一例で、
包丁でよくある話を出しただけなんだけどな
こんな断片的な発言で、幻覚だとか糖質だとか、ちょっと妄想働かせすぎでない?
被害者(?)ではない第三者の発言だぞ?

まぁ既にこのやり取りも、>>642をほったらかしにはなるがw
0675デフォルトの名無しさん2016/04/23(土) 11:38:20.22ID:dTOQaivR
道具を使い分けろということを否定している人はいないと思うのだが
>>657が>>647に対して「お前は道具の使い分けを否定している」と異を唱えた
>>647はむしろ使い分けを主張している
0676デフォルトの名無しさん2016/04/23(土) 11:40:07.10ID:0FPGkntR
>>672
捏造すんな
正確には、包丁を使った料理方法を教え合う場所で、野菜切ろうとしてる初心者Aに
「フードプロセッサーでもいんじゃね?何でも出来るよそれだけで料理してるプロも居るよ(誇張)」と言った奴Bがいて
(ここまではともかく)
そこで調子に乗って「今時包丁とかありえねーよww」とか言い出す奴Cまで出てくる上それを誰も咎めないので
包丁使ってる一応プロの料理人Dが「お前ら何しにここ来てんだ」とブチキレたようなもん

ちなみにAがプロの料理人(フードプロセッサだけではやっていけない)あるいはアマチュアだが包丁の達人を目指してるのか
それとも手軽に美味しい家庭料理作りたかったのか(それならフードプロセッサだけでも良い)は誰もわかってない

多分理解が無いゆえに思いっきり誤解してる人が多いみたいだが、GTAみたいな大規模な3Dゲームでも
速度が必要な部分だけをC/C++で作り、後はデザイナが好きにいじれるように(既存/自作問わず)簡単な言語で作れるようにするのが結構昔から常識だぞ
GTAでいえばRockstarが「俺はC++が好きなんだい!!」とかいうエゴで言語を選び、無駄な作業増やすアホな技術者ばっかりだったら潰れとるわ
悪いけどそれ頭に入れた上で俺のレス読み返してもらえるかな・・・・
0677デフォルトの名無しさん2016/04/23(土) 11:42:36.84ID:0FPGkntR
って、リロードしてなかった・・・前半蛇足だった
説明が悪かったのもあると思う、ヒートアップしてすまんかった、言いたいことは全部書いた
0678デフォルトの名無しさん2016/04/23(土) 11:47:13.86ID:dTOQaivR
ブリブリブリィッッ!
…やあスマン。すっきりしたわ!

ちょ、マジやめてくださいね
0679デフォルトの名無しさん2016/04/23(土) 11:58:53.15ID:0FPGkntR
ああ勘違いしてた、647に対して筋違いの批判だと言ってるのか
>>649の
>本質的でない無駄なことに注力する
が一番腹が立ったんだよ俺は(それを沸かせたのは647なんで一括りにしてしまったが)
ゲーム開発のためにC/C++一生懸命勉強してる人がみんな
「本質的でない無駄なことに注力するバカ」だと決めつけてる
そんなバカがどこに居るというのか?ずれすぎだろ

>>649はただの荒らしだと思って反応した自分に罪悪感も感じたが
あれがまともな話に見えるのなら無理解も甚だしいぞ
0680デフォルトの名無しさん2016/04/23(土) 12:00:36.82ID:0FPGkntR
X647に対して筋違いの批判だと
○647に対する批判が筋違いだと
0681デフォルトの名無しさん2016/04/23(土) 12:00:39.45ID:UhtZslrV
「ユーザーに高速なプラットフォームを要求すればいいだけだからC/C++は求められてない」の行だけに過剰反応して、
その一行前の「現代っ子にとってのゲームは、開発スピード優先のスマホやブラウザで、」
の前置きが見えておらず、
>>657はPCゲー、コンシューマゲー前提で一方的に語ってるだけだな

ってかオレオレコンテキスト多過ぎぃ!(しかも後付け)
オレの背景、知識、世界を理解しろとか、そりゃ噛み合わん
0682デフォルトの名無しさん2016/04/23(土) 12:06:43.43ID:0FPGkntR
>>681
>オレの背景、知識、世界を理解しろとか
だから無理解なまま適当言うのやめろ、って言ってたじゃん
経験してない業種に決めつけで言うと初心者混乱させるだけだろ

>前置きが見えておらず
その一行前もがっつり決めつけじゃないか
「まるで今のゲームといえばスマホゲーしか無いかのように言って」
って書いたじゃん
0683デフォルトの名無しさん2016/04/23(土) 12:19:21.71ID:dTOQaivR
>>前置きが見えておらず
>その一行前もがっつり決めつけじゃないか

なぜそこで話をややこしくするのか
「>>679に書いたとおり、一括りにしてしまったが>>649への批判のつもりだった」
と言うべきだろう
相手に反論形でレスを返さないといけない教義でもあるのかね
0684デフォルトの名無しさん2016/04/23(土) 12:21:35.25ID:UhtZslrV
「まるで今のゲームといえばスマホゲーしか無いかのように言って」
って書いたじゃん
それも後付けじゃね
>>657ですでに大規模な3Dゲーという前提に置き換わってる

>>657の解釈 ゲームはスマホゲーしかない
>>647の意図 仮に今主流のスマホゲーの開発を想定してるなら


つか、上の階が真昼間から結構いい声でギシアンしてて草w
0685デフォルトの名無しさん2016/04/23(土) 12:43:31.19ID:0FPGkntR
>>683
>>647みたいなけなすような言い方すると必ず>>649みたいなのが沸くんだよ
ドヤ顔で「現代っ子にとっての・・・」とか「求められてない」とか言うからだ

>>684
ちゃんと読んでくれよ・・・
「これが事実なら大規模な3Dゲーでもとっくにそうなってないといけない」
って書いたのは、「それは事実じゃない」と言ってるの
(それ=ユーザーに高速なプラットフォームを要求すればいいだけ)
例えば銀行のシステム作るor保守するときに「全部取っ替えてJavaで作りましょう」ってのは少々現実離れしてんじゃないの?
スマホゲーだってスマホの制約は食らうし自分で作って自分で遊ぶにしてもPCやスマホの性能次第になる
それが>>642にとって望ましくないのなら、「C/C++じゃなくても」ってのは完全に筋違いだ
(ただしもちろん本人が「単にゲーム作れりゃ何でもいい」のなら>>647の「別の言語でもいいんじゃね」という部分は正しいが)

少なくとも>>642が「DXライブラリでゲーム作ってる」って書いてんのに何でスマホゲーやブラゲーの話になるんだ?
ドヤ顔したくてそういう話(しかも誇張)に持って行っただけ、と見られてもしょうがないよな
それに対して
「どの言語を使うかなどプラットフォームや目的による」って書いたんだが・・・・あんたはどう曲解したんだ
話置き換えてなんかないってわかってもらえたか?
0686デフォルトの名無しさん2016/04/23(土) 12:50:59.28ID:0FPGkntR
ちょっと訂正
自分で作って遊ぶだけならPCの性能使い切るのは難しいから、制約あんま関係無いな
0687デフォルトの名無しさん2016/04/23(土) 13:06:19.66ID:dTOQaivR
確かに、>>642は「C勉強したいけど題材としてDXゲーム作り続けててよいですか?」だったのに
>>647で「ゲームやりたいならプラットフォームに応じて言語を選べ」になってしまった
0688デフォルトの名無しさん2016/04/23(土) 13:09:06.45ID:0FPGkntR
あと書き忘れてたけど
>>642は「ゲーム作るのが目的」とはどこにも書いてない
そしてここはC/C++のスレ
>>647の方が筋違いだと思うんだが・・・・普通、もっと楽しくなれる学習法とか提案するんじゃないの。
そうしないことについて、同じく何も提案してない俺は何も言えないんだけど
多分誰も>>642に対して適切なアドバイスはしてないよね、少なくとも
0689デフォルトの名無しさん2016/04/23(土) 13:09:56.95ID:0FPGkntR
またリロードしてなかった、スマン(´・ω・`)
0690デフォルトの名無しさん2016/04/23(土) 14:05:18.67ID:vLXn9W+E
C/C++のスレなんでそこんとこよろ
0691デフォルトの名無しさん2016/04/23(土) 15:23:23.69ID:dTOQaivR
>>642は十分に学んだはずだ
「Cにかかわると、きけんだぞ!」と
0692デフォルトの名無しさん2016/04/23(土) 17:03:26.75ID:lEfknhOE
お前ら熱すぎ
0693デフォルトの名無しさん2016/04/23(土) 21:37:32.57ID:UX7m5yK/
うおおおおおおおおおおおおああああああああああああああああああああああああああああああ!!!!!!!!!!!! (ブリブリブリブリュリュリュリュリュリュ!!!!!!ブツチチブブブチチ
0694デフォルトの名無しさん2016/04/23(土) 23:02:30.71ID:X/qVSAL9
http://ideone.com/mGVtCg
WCHAR型をchar型に変換するメソッドを書いているんですが7行目でエラーがでて
ビルドが通りません
使う側からバッファサイズを指定できたらいいのになと思って書いたんですがどう書けば動きますか?
0695デフォルトの名無しさん2016/04/23(土) 23:06:07.71ID:X/qVSAL9
もしかしてmalloc、alloc関数使うパターンですか?
0696デフォルトの名無しさん2016/04/23(土) 23:06:47.98ID:9/IfcXxp
そういうことになる

一から設計やり直させたいところだけど
0697デフォルトの名無しさん2016/04/23(土) 23:40:40.87ID:X/qVSAL9
http://ideone.com/mGVtCg
書き直しました
ふと思ったんですがこれWcharToChar関数のresult変数はどうやって開放するんですか?
返り血を受けたポインタをfree関数に渡せばいいんでしょうか?

>>696
一から設計やり直させたいってどういうところがですか?
0698デフォルトの名無しさん2016/04/23(土) 23:48:03.51ID:9/IfcXxp
>>697
まさにそういうところで、まずmallocとfreeを対応させることを頭に置きつつ
この関数を使うということは、さらにこの関数とfreeを対応させることも頭に置かなければならない
例えばさらに別の関数を作って、それはfreeしなくていい、となると、使っていくうちにこんがらがって
二重freeとかfree忘れに繋がる
C++ならstd::string使いたいところだけど、malloc,freeをようやく使う段階だとなかなかそれも難しいか
0699デフォルトの名無しさん2016/04/24(日) 00:08:24.65ID:5Zvq9Jit
確かにfree忘れや二重freeはありそうですね
ほんとはWCHARをstringクラスに入れてあれやこれやしたいんですが
した後でまたWCHARに戻したりしたいんですがどうすればいいんですか?
Win32APIでどうしても文字列の相互変換をできるようにならないと前に進めないです
0700デフォルトの名無しさん2016/04/24(日) 00:18:33.81ID:MjCYi9IC
>>699
お前は前に進まなくていいぞ
http://ideone.com/KTLkKj
0701デフォルトの名無しさん2016/04/24(日) 00:25:01.22ID:n8ERBj5P
c++11は標準ライブラリにstringの文字エンコード変換クラスが入ってるけどね

これあんま認知されてない気がするけど気のせい?
0702デフォルトの名無しさん2016/04/24(日) 02:14:36.02ID:12WzAHT3
stringやクラスを作ってしまうようになると、"裸"でnew deleteを使わなくなるね。
もうポインタも要らないかも。暴言
0703デフォルトの名無しさん2016/04/24(日) 08:37:43.50ID:DoWZ3H64
>>699
Win32APIでって
MultiByteToWideCharとWideCharToMultiByteじゃあかんの?
0704デフォルトの名無しさん2016/04/25(月) 14:03:39.54ID:HSarKqaj
std::wstringを使えよ
0705デフォルトの名無しさん2016/04/25(月) 22:08:47.06ID:P6k38L+P
>>700
ありがとうございます
C#はいままで長いことやってきたんですがC++はかなり難しいですね
C++の標準ライブラリの関数などの機能を知りたいんですがぐぐっても見つかりません
stringやwstringのメンバ関数?等全くわからないです。どうやって調べればいいんでしょうか?
0706デフォルトの名無しさん2016/04/25(月) 22:19:49.00ID:Oxb8EK6D
おかしいなぁ ぐぐるだけですが
0707デフォルトの名無しさん2016/04/26(火) 00:21:39.59ID:3CJYmNHF
だよなあ
c++ stringで十分にでてきて他のはそこから手繰っていけるだろ
ttps://www.google.co.jp/search?q=c%2B%2B+string
0708デフォルトの名無しさん2016/04/26(火) 00:27:08.62ID:HKZNbvQr
やっと見つけました

もう型変換で悩まされて悩まされてどうにかならないですか?
WinAPIは引数や返り値としてWCHARやTCHARしか受け付けてくれないし
文字置換や抜き出ししようとするとstringクラスにしないといけない
調べても調べても埒が明かなくて、D&Dされたexeファイルと同じ場所に別名のファイルを作る
というアプリを作りたいんですが、心が折れそうです
0709デフォルトの名無しさん2016/04/26(火) 01:14:02.31ID:6CK+xbXn
wstringのまま文字列操作すればよいだろ
なんでいちいちstringにする
0710デフォルトの名無しさん2016/04/26(火) 02:55:48.07ID:uH9a/9FF
えと しばらくVCは触ってないがcstringじゃなかったっけ??
0711デフォルトの名無しさん2016/04/26(火) 08:53:17.56ID:LYWJsM33
>>710
MFC使う前提なら CString だろうけどー
0712デフォルトの名無しさん2016/04/26(火) 09:34:07.81ID:CpGCwN8/
MFCアプリじゃなくても使えるよ
0713デフォルトの名無しさん2016/04/26(火) 10:22:43.51ID:uH9a/9FF
>>711
そうでしたっけ? tchar もwchar も使わなかった記憶があります。
確かに、ダイアログ形式のプロジェクトでシコシコいろんなツール作ってました。
0714デフォルトの名無しさん2016/04/26(火) 20:40:48.65ID:QSwyI9tG
basic_string<TCHAR>にすればいいじゃん
変換はcodecvtとwstring_convert使えば標準ライブラリだけで全部できる
0715デフォルトの名無しさん2016/04/26(火) 21:13:35.43ID:nbNQNZJ4
そういう使い方したいならCStringの方が楽だろうね

ところでC++11のstd::stringって中のデータ連続してるって聞いたけどVC2015ではこの点どうなの?
0716デフォルトの名無しさん2016/04/26(火) 22:06:04.73ID:hDzbV5lu
>>715
規格の上ではC++11からだけど、
実装上はかなり前のVC++から連続してたと思う
0717デフォルトの名無しさん2016/04/26(火) 22:13:32.60ID:NDKRlMpi
CStringがそもそもCStringT<TCHAR>だしな。
0718デフォルトの名無しさん2016/04/26(火) 23:07:37.03ID:HKZNbvQr
>>709
wstringを使うようにします
std::string::c_str()とstd::wstring::c_str()って違うものですよね?
stringのほうがconst char *を返し、wstringのほうがconst WCHAR *を返すという認識でいいですよね?


http://www.geocities.jp/eneces_jupiter_jp/cpp1/010-055.html
http://ideone.com/ziwB4d
文字置換を見よう見まねでwstring版を作ったんですが正常に動きません
なぜ動かないのかわからないです
0719デフォルトの名無しさん2016/04/26(火) 23:30:16.25ID:nbNQNZJ4
>>716
せんきゅー

>>718
・GetCommandLine()関数の戻り値の型はPTSTR(TCHAR*)
・TCHAR*はUNICODEマクロが定義されている場合WCHAR*でありそうでない場合CHAR*
・UNICODEマクロはVisualstudioを利用しているならプロジェクトのプロパティ[全般]の[文字セット]の項目で「Unicode文字セットを使用する」を選択すると定義される
・WCHARはwchar_tでありCHARはchar
・マルチバイト文字とUNICODE文字(ワイド文字)についてググれ
0720デフォルトの名無しさん2016/04/28(木) 17:59:43.52ID:c/7AsRbP
そもそも何故変換関数を自作してるの?
wstringだけで足りないの?
0721デフォルトの名無しさん2016/04/28(木) 21:38:58.71ID:DqjglUBW
ではchar版しか用意されていないstd::exception::what関数はどうするというのか
0722デフォルトの名無しさん2016/04/28(木) 21:46:33.60ID:c/7AsRbP
>>721
そのまま使う
0723デフォルトの名無しさん2016/04/28(木) 22:04:53.24ID:U5e08bbE
>>721
そ そんなのがあんのか
0724デフォルトの名無しさん2016/04/28(木) 22:07:58.58ID:U5e08bbE
ナニナニ 例外を発生させたエラーを表している(だろう)文字列の取得か
0725デフォルトの名無しさん2016/04/29(金) 21:37:16.83ID:wbzz+Mz0
>>719
いろいろ考えてみたんですがこういうことですか?
wchar *とchar *の相互変換は文字コード変換が必要
Win32APIの関数もchar(ANSI版?)とwchar(Wide)で定義されていてこれもマクロで呼び出しを変えている
MessageBoxAとMessageBoxWみたいな関係?

>>720
文字列置換をしたいので
.netにあるStringクラスのReplaceメソッドみたいに便利なメソッドが作りたかったんです
でも減ったら文字を詰めないといけないし、結構めんどくさそうですね
0726デフォルトの名無しさん2016/04/29(金) 22:50:50.37ID:bedvQBPC
置換なんて正規表現でできるやん
0727デフォルトの名無しさん2016/04/30(土) 08:35:11.59ID:olAQ2y8z
>>725
お前は前に進まなくていいと言っただろう
http://ideone.com/cp9F3B
0728デフォルトの名無しさん2016/04/30(土) 08:43:59.70ID:fMBM4QUA
>>725
だからMultiByteToWideCharとWideCharToMultiByteじゃあかんの?って
0729デフォルトの名無しさん2016/04/30(土) 22:07:00.23ID:NxyK0Alw
>>727
前に進みます

>>728
wstring使うようにしました
wstring型の文字列から置換をしたいので、今勉強しています
07307192016/05/01(日) 00:27:42.08ID:RWwAd4Sf
>>725
俺も完全な理解なんてしてないないけどさ
>いろいろ考えてみたんですがこういうことですか?
>wchar *とchar *の相互変換は文字コード変換が必要
これはないだろ

お前に必要なのは答えじゃなくて理解だから以下の三つを調べてこい
�@文字列とは何ぞや
→配列と文字列の関係についても理解しろ
�Aポインタとは何ぞや
�Bキャストとは何ぞや
→C++スタイルの以下のキャストについても調べろ「static_cast」「dynamic_cast」「const_cast」「reinterpret_cast」

それとな、本を買え
0731デフォルトの名無しさん2016/05/01(日) 01:24:47.13ID:1jzF+/1T
>>730
違うんですね。すいません
勝手にchar*はマルチバイト文字列を格納してwchar*はワイド文字列なので
ANSIとUnicodeだから文字コード変換が必要なのかなと勝手に思っていました

�@はどういうことかわかりません。スタックとかヒープって意味ですか?
�Aポインタってアドレスを格納している変数?
�B明示的や暗示的がある型変換ですよね?

本高いので買えません
0732デフォルトの名無しさん2016/05/01(日) 01:46:58.19ID:2RNzlY+s
いいか 相手されるうちはまだいいと思えよ。
○○とは何ですか? ここで聞かなくてもいい事をわからないと
どこでも誰にも相手されない。
0733デフォルトの名無しさん2016/05/01(日) 02:04:44.14ID:1jzF+/1T
そうですね・・・自分には向いてなさそうなのでもう諦めます
ありがとうございました
0734デフォルトの名無しさん2016/05/01(日) 02:10:24.56ID:gm/snJ6R
本高いって中古で買うなり図書館行くなりあるだろうに
0735デフォルトの名無しさん2016/05/01(日) 02:31:14.68ID:RWwAd4Sf
俺も最初はこんな感じだったから、みたいなみたいな

>>731
諦めるのは勝手だけど
勘違いされたままだと困るので

文字コード変換に関数を使わなければいけない、という認識はあってる
0736デフォルトの名無しさん2016/05/01(日) 05:32:22.07ID:p2YCnIW8
>これはないだろ

とはなんだったのか
0737デフォルトの名無しさん2016/05/01(日) 06:15:37.36ID:Ahsu41sE
こんなのでうんコードが紛れ込んでデスマになるのか
0738デフォルトの名無しさん2016/05/01(日) 07:10:06.21ID:1U34S4Ix
>>732
2chで初心者相手に偉そうにする馬鹿
0739デフォルトの名無しさん2016/05/01(日) 08:57:34.41ID:tKi6j9CT
匿名通信(Tor、i2p等)ができるファイル共有ソフトBitComet(ビットコメット)みたいな、
BitTorrentがオープンソースで開発されています

言語は何でも大丈夫だそうなので、P2P書きたい!って人居ませんか?

Covenantの作者(Lyrise)がそういう人と話したいそうなので、よろしければツイートお願いします
https://twitter.com/Lyrise_al

ちなみにオイラはCovenantの完成が待ち遠しいプログラミングできないアスペルガーw


The Covenant Project
概要

Covenantは、純粋P2Pのファイル共有ソフトです

目的

インターネットにおける権力による抑圧を排除することが最終的な目標です。 そのためにCovenantでは、中央に依存しない、高効率で検索能力の高いファイル共有の機能をユーザーに提供します

特徴

Covenant = Bittorrent + Abstract Network + DHT + (Search = WoT + PoW)

接続は抽象化されているので、I2P, Tor, TCP, Proxy, その他を利用可能です
DHTにはKademlia + コネクションプールを使用します
UPnPによってポートを解放することができますが、Port0でも利用可能です(接続数は少なくなります)
検索リクエスト、アップロード、ダウンロードなどのすべての通信はDHT的に分散され、特定のサーバーに依存しません
r
0740デフォルトの名無しさん2016/05/01(日) 16:56:21.08ID:mNgTtUMj
まー一発で簡単に変換できてるように見えて内部ではせっせとAPI呼んでたりするからな
0741デフォルトの名無しさん2016/05/03(火) 15:30:55.73ID:66J4LMLe
>>730
>配列と文字列の関係についても理解しろ

大変興味があります
アフォな私めに教えていただけませんでしょうか
07427302016/05/03(火) 15:51:41.54ID:szcc5cP/
>>741
人に教えられるほど理解していないので教えられません
理解してるとは一言も言ってませんよね?
0743デフォルトの名無しさん2016/05/03(火) 23:30:37.23ID:al79N4UU
C言語において(C++でも全く同じ話)言語仕様の文字列型変数は存在しない。(元々CPUに文字列を扱う機能は無い)
C/C++で文字列を扱うのはcharかwchar_tの配列。大抵、ASCII文字ならchar/wchar_t型に収まる。
それらの羅列である文字列はchar/wchar_tの配列で扱われる。ライブラリにしろユーザー関数にしろ、一文字ずつ処理を行う。
buff[10]で"Windows"ならbuff[0]は'W'、buff[3]なら'd' という使い方だ。

配列に入った文字列の最後にゼロ(NULL文字)が入ることで文字列の終端を示す。これを忘れるとランタイムエラーを引き起こす。
0744デフォルトの名無しさん2016/05/03(火) 23:43:13.54ID:zIDR9cMA
C++ではstringばっか使ってます。便利ですよぉ。
配列よりもvectorですなぁ。
最近は mallocはもちろん new も直には使ってないです。
0745デフォルトの名無しさん2016/05/03(火) 23:51:24.06ID:al79N4UU
>>744
ライブラリと言語仕様の区別もつかないで、よくC++使えるな
0746デフォルトの名無しさん2016/05/04(水) 00:46:24.41ID:jmo8gOMx
>>745
わかってないで書いてると思ってる お前が ぼけなんだよ。
0747デフォルトの名無しさん2016/05/04(水) 08:32:43.88ID:OhRmCsOo
少なくともstd::stringクラスは言語仕様であるISO/IEC 14882:2014で規定されているから言語仕様の一部だな
ちなみに標準化委員会の人はライブラリを除いた部分を「core language」と呼ぶことが多いようだ
0748デフォルトの名無しさん2016/05/04(水) 08:35:29.02ID:OhRmCsOo
まあ、もともと
「元々CPUに文字列を扱う機能は無い」
=「ボクのパソコンのCPUには無かった」
のレベルだからどうしようもない
0749デフォルトの名無しさん2016/05/14(土) 16:28:17.39ID:fLeelvLJ
言語の組込みの型としての文字列はないが
標準ライブラリによってchar配列などが事実上の文字列型としてサポートされる
\0を終端として用いることにより簡便な可変長データ構造を実現

またCPUによってはこれを支援する専用の仕組みを持つ
0750デフォルトの名無しさん2016/05/14(土) 17:03:03.04ID:EHXndh+5
ちょっとおしいな
C++のstd::stringはNUL文字終端ではないし
Cでもごく一部はstrncpyの様にNUL終端にならないケースがある
0751デフォルトの名無しさん2016/05/14(土) 19:04:51.28ID:Hwp5XNP7
それは難癖つけたいがための難癖だな
規格ではstd::stringの内部表現がNULL終端であることは保証されてないかもしれないが(???)
NULL終端でない実装なんて見たことないなあ
そうじゃなきゃc_str()をどうやって実装するんだよ
0752デフォルトの名無しさん2016/05/14(土) 19:48:26.84ID:i0UC0Qx5
関数の仕様の話かと
0753デフォルトの名無しさん2016/05/14(土) 20:28:20.16ID:EHXndh+5
>>752の言う通り、std::stringは(C++11で随分見直されたとは言え)NUL終端の考えに基づかない所が残っているし
そもそも概念的にNUL終端を含めないクラスについて内部実装の話をされても。

まあ実装にしても「NULL終端」とか言っちゃうレベルではc_strを定時間にする実装が思い浮かばなくても致し方ない
0754デフォルトの名無しさん2016/05/14(土) 21:21:21.46ID:Hwp5XNP7
あーまたあいつだよwww
0755 ◆QZaw55cn4c 2016/05/15(日) 20:26:50.63ID:7PQH9x3t
呼んだ?
0756 ◆QZaw55cn4c 2016/05/15(日) 20:32:31.04ID:sILMBoEb
お前は誰だ?w
0757デフォルトの名無しさん2016/05/15(日) 20:45:26.67ID:TLapgfGj
おじいちゃん、一つ前は自分のレスだよ

荒らしは去れ
0758デフォルトの名無しさん2016/05/16(月) 06:07:51.35ID:ImqJR5xM
double dとして、区間 [d-0.5, d+0.5) の範囲にある整数を高速に見つけたいのですがどういうコードになりますか?
0759デフォルトの名無しさん2016/05/16(月) 06:46:12.15ID:7RTqmQ/i
(int)floor(d-0.5) じゃだめ? [-0.5 0.5) の区画の整数は1つしか存在できないんだし
0760デフォルトの名無しさん2016/05/16(月) 06:47:37.01ID:7RTqmQ/i
× floor(d-0.5)
○ floor(d)
0761デフォルトの名無しさん2016/05/16(月) 07:10:43.85ID:ptsyD+4U
いやそれはおかしい
0762片山博文MZ ◆T6xkBnTXz7B0 2016/05/16(月) 07:35:27.11ID:TOoYG9yG
floorが床関数で、ceilが天井関数。
d-0.5以上だから、ここは天井を使わないといけない。
ceil(d-0.5)
0763デフォルトの名無しさん2016/05/16(月) 22:06:43.25ID:ygw1DlKj
c++11以降ならround()一択
0764デフォルトの名無しさん2016/05/16(月) 22:20:26.48ID:ptsyD+4U
へー
↓クソコテが一言
0765デフォルトの名無しさん2016/05/16(月) 22:21:05.57ID:ygw1DlKj
お題を読み間違えたorz

>>762が正しい。
0766デフォルトの名無しさん2016/05/16(月) 22:22:04.11ID:H4doO3aT
[d-0.5, d+0.5) の範囲にある整数
だからroundじゃダメだね
0767デフォルトの名無しさん2016/05/16(月) 22:46:27.73ID:dIvaV2y+
floorじゃなくてceilじゃね
http://ideone.com/CDQ1vN
0768デフォルトの名無しさん2016/05/16(月) 22:52:44.86ID:ptsyD+4U
クソコテいじめとは高度な技を
0769デフォルトの名無しさん2016/05/18(水) 00:33:54.73ID:WN1OorbV
単にNGして見えてないから同じこと書くんじゃねw
0770デフォルトの名無しさん2016/05/20(金) 22:43:27.76ID:eS3sHbgZ
char *p = "";
pのメモリを変更するとどうなる?
vc限定で
0771デフォルトの名無しさん2016/05/20(金) 22:45:55.87ID:1cinIEjU
それC++だと暗黙のうちにconst_castしてるようなものだからそれと同じような悲劇が起こりうるってなんかで読んだけど
0772デフォルトの名無しさん2016/05/20(金) 23:11:15.35ID:99X1purw
落ちるだろうね。 っとcatchしてればまずわいいか。

C++ばっかやってると、なんかこんなコードを見るだけで、
寒気がするようになってしまったw
0773デフォルトの名無しさん2016/05/21(土) 08:03:23.46ID:DrfWRUfn
環境がないってこと? あるならやりゃあ判る話だもんなぁ
0774デフォルトの名無しさん2016/05/21(土) 09:07:16.41ID:K70VO2ZY
pは普通に変更するだろ
*pは知らんけど
0775デフォルトの名無しさん2016/05/21(土) 22:54:26.71ID:ZP64SPFe
>>770
プロトでエラー文字列格納するのにこのコード書いたら
本番コードでそのままコヒぺされたことあるわ
あの時は中国人プログラマ信用した俺が馬鹿だったと確信した
0776デフォルトの名無しさん2016/05/22(日) 00:06:21.60ID:BMQP7PAp
ヌルポで初期化しておくか、宣言時初期化か、使う時まで宣言しないか ですかね
0777デフォルトの名無しさん2016/05/22(日) 00:30:39.10ID:6ZSSVUok
リテラル文字列が格納された領域を書き換えるなんて、プロトタイプでもやらんわ。
0778デフォルトの名無しさん2016/05/22(日) 01:39:54.16ID:BMQP7PAp
ちょっと前?までは char *p="abc"; なんて普通にコード書いてたけど
当然書き換えなかったのは、身体に染み付いてたからなのかな。
0779デフォルトの名無しさん2016/05/22(日) 08:01:15.21ID:8h3SPrnH
char *p;って使いまわすを前提な場合、無条件でdelete [] p;したあとp=new char[16*n];するので
最初にchar *p=NULL;ってしておくと
なにも考えずにいきなりdelete [] p;実行しても中身NULLだから無視されてエラーにならない

chr *p=NULL;
...
DELETE[] p;
p=new char[16];
...
自分でstringとかset実装してみたけど頭禿げるねw
0780デフォルトの名無しさん2016/05/22(日) 09:21:18.54ID:t+ool8rX
char *p1 = NULL, p2 = NULL;

try {
p1 = new char[16];
p2 = new char[16];
}
catch(){
delete [] p2;
delete [] p1;
}
0781デフォルトの名無しさん2016/05/22(日) 09:22:11.53ID:t+ool8rX
わかるだろうけど
× p2 = NULL
○ *p2 = NULL
0782デフォルトの名無しさん2016/05/22(日) 10:24:25.53ID:+fS92ght
>>778
大昔ならともかくちょっと前なら
const char *p="abc";
だな
0783デフォルトの名無しさん2016/05/22(日) 10:48:34.39ID:BMQP7PAp
>>782
だな。オブジェクトの名前で これはリテラル用だから参照のみ という事だったのかも。
今更何言ってたんだという感じだがw
0784デフォルトの名無しさん2016/05/22(日) 10:54:17.87ID:8h3SPrnH
>>780
よく判らないけどcatchしたあとプログラムを停止させるのが必須だよね
char *p = new char[16];
try {
p = new char[16];
}
catch(){
delete [] p;
}
...フォロー処理
これcathできるの?
0785デフォルトの名無しさん2016/05/22(日) 11:00:22.89ID:Ycsy37yV
>>782
確認したいんだけど、リソース情報のお話なのかな?
昔の情報しか無いので、constは変更しないデータに使うと思っている。
変更の有る領域の初期化にもconst使える様になったの?
0786デフォルトの名無しさん2016/05/22(日) 11:17:45.96ID:YKtsYTbt
>>785
プログラマ引退してるよね?
0787デフォルトの名無しさん2016/05/22(日) 11:22:15.50ID:t+ool8rX
>>784
んな書き方しねーw
0788デフォルトの名無しさん2016/05/22(日) 11:31:57.41ID:YKtsYTbt
初心者だったらいいんだけど、昔とか言ってる人の晒すコードがヤバすぎて戦慄
0789デフォルトの名無しさん2016/05/22(日) 11:45:26.47ID:1oa7e5AC
C99より前は、C言語にconstはなかった

なんか、古いCとC++の区別がついてないおじさんな気がする
0790デフォルトの名無しさん2016/05/22(日) 11:50:51.55ID:WBs54RLO
vector<string>って要素数が変わると各stringのアドレスも変わるんですか?
http://codepad.org/KFOVIf0g
こんな感じでデータが壊れてしまいます
07917852016/05/22(日) 12:03:44.44ID:fGc9QT7a
>>786
御飯食べる手段としては、離れてかな経つ。
あの書き方が当たり前なら、次回から使ってみます。
0792デフォルトの名無しさん2016/05/22(日) 12:05:42.16ID:vKoFE7Z9
>>789
えっ
0793デフォルトの名無しさん2016/05/22(日) 12:22:50.06ID:1oa7e5AC
>>792
訂正 C99→C89

https://docs.oracle.com/cd/E19957-01/805-7888/z4000220f2c4c/index.html
0794デフォルトの名無しさん2016/05/22(日) 12:32:23.58ID:dF2ecomY
>>790
変わる
0795デフォルトの名無しさん2016/05/22(日) 15:18:43.60ID:BMQP7PAp
vectorは連続で確保されるからなんだろうけど、内部インデックスを持てば
連続である必要はないよね。
ん 連続である仕様なんだっけ? アドレスを直接触る事もないけど。
0796デフォルトの名無しさん2016/05/22(日) 15:33:16.55ID:YKtsYTbt
>>795
C++03からの仕様
0797デフォルトの名無しさん2016/05/22(日) 15:40:33.57ID:YKtsYTbt
C++11からはアドレスを直接触るのを簡単にするためにvector::data()まである。
それまではemptyではないことを確認してから&v[0]とかやってた。
連続が保証されてるからOpenGLなどのC関数にバッファーを渡すのに便利
だからnew char[size];とか余程の事が無い限り要らない
連続してなくてよくて要素のポインタ変わって欲しくないならstd::list使えばいいよ
0798デフォルトの名無しさん2016/05/22(日) 18:02:16.50ID:wU59/EOp
stringという資源ハンドルは、領域の確保先はvectorのそれのように連続しているのですか?
そのような保証はなく、例えばdequeのようだったり、或いはlistのようだったりしないものでしょうか
0799デフォルトの名無しさん2016/05/22(日) 18:10:14.58ID:BMQP7PAp
>>797
なるほど、他システムへの渡しが最速だわなぁ。
ストラップ先生が言うにはvectorはものすごく賢く作ってるらしいね。
0800デフォルトの名無しさん2016/05/22(日) 18:14:52.32ID:ZEoOi4vf
個人の好み以外の何物でもないのだが、STLってなんか気に入らない。
MFCのコレクションみたいにユーザーフレンドリーではないからかも。
極めれば面白いかもしれないが…

ちなみに職場でやったら他の人がメンテできなくなる。
0801デフォルトの名無しさん2016/05/22(日) 18:23:05.05ID:BMQP7PAp
クラステンプレートや関数テンプレートはメンテできるのかい?
0802デフォルトの名無しさん2016/05/22(日) 18:42:51.25ID:dF2ecomY
>>798
現C++仕様ではstd::stringもstd::vectorのようにメモリレイアウトは連続だよ
COW(Copy On Write)の使用も禁じられたはず
(もしなんか間違ってたら↓で規格マスターが怒ってくれるはず)
ただし規格上は\0デリミタのC文字列(const char*とか)を取り出したいときは&s[0]じゃなくs.c_str()を使うべき
0803デフォルトの名無しさん2016/05/22(日) 18:44:39.93ID:dF2ecomY
>>800
悲惨すぎる職場
0804デフォルトの名無しさん2016/05/22(日) 19:47:54.90ID:6Km37Udc
>>800
STL が使えないなんて,なんの罰ゲームなんだ?
0805デフォルトの名無しさん2016/05/22(日) 20:19:48.95ID:wU59/EOp
STLのSとは一体……
0806デフォルトの名無しさん2016/05/22(日) 20:20:18.76ID:wU59/EOp
>>802
ありがとうございます
0807デフォルトの名無しさん2016/05/22(日) 20:46:25.51ID:DdN82XP2
C++の文字列はsplitすらないゴミ
0808デフォルトの名無しさん2016/05/22(日) 20:55:45.28ID:dF2ecomY
>>807
std::getlineで足りないならテメエで実装しろという話
0809デフォルトの名無しさん2016/05/22(日) 21:40:24.26ID:DdN82XP2
>>808
まあboost使うんだけどな
0810デフォルトの名無しさん2016/05/22(日) 22:09:53.03ID:aN2uVGWu
いまからC++やります
contやcinって関数なんですか?
0811デフォルトの名無しさん2016/05/22(日) 22:16:51.24ID:9DKQN5WF
クラスインスタンス
ぶっちゃけあのオペレータのキモいHello worldからC++の解説始めるの辞めたほうがいいよな
C++を勘違いする
0812デフォルトの名無しさん2016/05/22(日) 22:37:49.67ID:75AjufZc
21世紀にもなってSTLを使わせられるとはヒサンだな

それはさておき、>>790への回答レスがSSOについて一言もふれていないのがヒサンだ
0813デフォルトの名無しさん2016/05/22(日) 23:45:52.01ID:75AjufZc
>>784
>これcathできるの?
むしろ何か問題でも?
まさか「catch(...)」の書き間違いを言っている訳でもあるまい
因みに、catchしたあと「throw;」で再スローすることは良くあるがプログラムを止めるのは尋常ではない
0814デフォルトの名無しさん2016/05/22(日) 23:52:29.75ID:Mkios/tW
なぜか1行目でもnewしてる点とか?
0815デフォルトの名無しさん2016/05/23(月) 00:29:49.99ID:eWgYvVNc
>>812
関係ないのになんで触れないといけないの?
0816デフォルトの名無しさん2016/05/23(月) 02:58:17.69ID:gGR7PrHc
自分の知ってる知識で書けばいい。間違ってれば訂正してくれる はずw
0817デフォルトの名無しさん2016/05/23(月) 03:04:27.90ID:7DLF1n9w
>>814
そうです、delete []してないのに
同じ変数pにnewで領域確保したのは異常だから
なにか便利な機能が異常検出してくれるのか期待しました
実際にコード書いて開放しないで二重にnewしても動作しました(メモリーリーク)
便利なアセンブラって事を思い出しました。w
0818デフォルトの名無しさん2016/05/23(月) 03:14:06.12ID:eWgYvVNc
>>817
便利なツール使えば検出してくれるよ
0819デフォルトの名無しさん2016/05/23(月) 09:30:01.65ID:7s+pfWOr
>>801
それは出来る。
0820デフォルトの名無しさん2016/05/23(月) 21:46:15.68ID:V4lIoCTU
>>815
>>790の文面は『stringのアドレス』となっていても
実際のコードはstringが管理している領域のポインターを覚えているのだから
何故それが無効になったかを補足しないと質問者がモヤモヤする恐れが僅かに存在するから
0821デフォルトの名無しさん2016/05/23(月) 22:30:48.10ID:V4lIoCTU
>同じ変数pにnewで領域確保したのは異常

というメモリ管理の常識を覆えすクソみたいな仕様が規格に追加されたことを思い出した
0822デフォルトの名無しさん2016/05/23(月) 23:41:54.97ID:0BO+DHCS
初心者ですC++でスレッドAがあるとこまで行ったらスレッドB開始させAを停止させて
スレッドBがあるとこまで行ったらスレッドAを再開させるにはどうするのがベストなの?
環境はwin32 Win32APIでもC++だけでもいい方法があったら教えて
でも2chなんかじゃまともな返しこなそうその場合C++のいい質問サイト教えて
0823デフォルトの名無しさん2016/05/24(火) 00:00:21.00ID:+SiSXtjc
>>822
それスレッド使う意味無くね?
0824デフォルトの名無しさん2016/05/24(火) 00:12:43.40ID:FmhjQBy2
>>820
それとSS
0825デフォルトの名無しさん2016/05/24(火) 00:13:06.42ID:FmhjQBy2
それとSSO関係ないよね
0826デフォルトの名無しさん2016/05/24(火) 00:22:46.70ID:NuLhgynv
>>823
ごめん説明間違ったかももっと正確にいうと"Bのある処理をAのフラグで開始させて"かな
詳しく言うと長くなりそうだから言わんけど仕方なくマルチスレッド使わざるおえない状況 でも全然わからん
とりま"Bがあるとこまで行ったらAを再開させる"のベストな方法がわからない 詳しいなら教えてください
0827デフォルトの名無しさん2016/05/24(火) 00:33:07.78ID:kjz0y2x3
>>822
Win32APIが出るてことはVCだから
MSDNフォーラムでたずねるのが良い
0828デフォルトの名無しさん2016/05/24(火) 00:58:58.93ID:FmhjQBy2
>>826
mutexとcondition_variableと何らかの変数で出来る。

http://cpprefjp.github.io/reference/condition_variable/condition_variable/wait.html
0829デフォルトの名無しさん2016/05/24(火) 00:59:23.21ID:ETPtdjuV
>>826
それはまさに条件変数のつかいどころじゃね
条件変数はc++11なら標準ライブラリにある(std::condition_variable)
使い方はググればでてくる
0830デフォルトの名無しさん2016/05/24(火) 01:12:37.18ID:kjz0y2x3
>>826
>マルチスレッド使わざるおえない状況 でも全然わからん
俺もマルチスレッド分からんないんだけど、コピペでやるならともかく
まず、マルチスレッドを少しは勉強しないことにはどうしようもないんじゃないのか。
0831デフォルトの名無しさん2016/05/24(火) 01:13:08.13ID:NuLhgynv
>>827 >>828 >>829
ありがとマジ助かる 詳しくはもう寝ないといけんから明日というか今日になっちゃうんだけど
Win環境でマルチスレッドやる場合c++11かWin32APIのマルチスレッドどっちがベストなの??
速さとかスレッドの管理とかで
0832デフォルトの名無しさん2016/05/24(火) 01:18:26.33ID:NuLhgynv
>>830
今リアルタイムで勉強してる… 排他制御が必要なとこ必要じゃないとことかね
ほんと危ないねマルチスレッドは
0833デフォルトの名無しさん2016/05/24(火) 01:31:22.29ID:FmhjQBy2
>>831
c++11のthreadはWindows環境ならwin32を使用して実装されてるから速さはC++11がWin32を越えることはないmsvcのランタイムライブラリの実装の質次第
気になるならベンチマークでも作ってみれば?

管理はC++11の方が楽 Win32はC言語APIだから途中returnとかでunlockわすれてデッドロックとか慣れてないとなりがちだけどC++11の方はRAIIでlockとかunlockできるから
0834デフォルトの名無しさん2016/05/24(火) 07:05:29.64ID:mI5a3HBZ
>>825
SSOが無ければ無効にならないことが期待できるんだから、関係無いってことは無いだろ
http://codepad.org/y3wgNmpt
0835デフォルトの名無しさん2016/05/24(火) 07:32:55.63ID:7si/lGiy
>>822
SuspendThreadとResumeThreadかな
あるいはコルーチン的なものをやりたいのかな
0836デフォルトの名無しさん2016/05/24(火) 09:07:19.56ID:+9luGJWT
>>832
スレッドAとBでお互いの実行タイミングを制御したいでいいの?
0837デフォルトの名無しさん2016/05/24(火) 09:39:30.39ID:0HWQ/i8x
>>834
期待しちゃいかんだろ
0838デフォルトの名無しさん2016/05/24(火) 11:11:11.01ID:FmhjQBy2
>>834
それたまたま同じアドレスで確保されたかヒープにゴミが残ってるだけで未定義動作なんだけど
さすがヒサンな人だなぁ
0839デフォルトの名無しさん2016/05/24(火) 11:16:37.65ID:DKqX4Sva
>でも2chなんかじゃまともな返しこなそう

こんなクズによくレス返すやつがいるなw
0840デフォルトの名無しさん2016/05/24(火) 13:16:22.19ID:K90OG2AK
>>839
おまえみたいな煽りだけの無能のこと言ってるんだよ失せろカス
0841デフォルトの名無しさん2016/05/24(火) 13:33:15.17ID:H5cxpY8A
本人乙
0842デフォルトの名無しさん2016/05/24(火) 13:49:43.32ID:K90OG2AK
いや普通に本人だよ 外にいるから詳しくレス返せんけどね
0843デフォルトの名無しさん2016/05/24(火) 20:48:29.63ID:mI5a3HBZ
>>838
codepadはムーブの無いC++98か
なるほど、理解した
0844デフォルトの名無しさん2016/05/24(火) 21:11:14.49ID:0HWQ/i8x
詳しく調べる気はないけど昔のlibstdc++のstringはCOW実装だったからSSOにならないサイズならそれが効いてるとかはあるかもしれないけどね
たとえmoveが有効だとしてもリアロケーション後の状態について余計な仮定しちゃダメだよ
0845デフォルトの名無しさん2016/05/24(火) 21:49:28.89ID:0rn85x5N
>>833
ありがとなんも考えずWinAPI使ってたけどいろいろ考えてより安全そうなC++11の方で書き直すの検討するわ
>>835
その中ならSuspendThreadとResumeThreadかなこれ考えたけどたぶんしっかり管理しないとまずいだろうから
ベストな方法なのかよくわからない むしろevent?待機関数?の方でうまいことできないかと思ったんだけど何使えばいいかわかんないんだよね
まぁ今使ってるどっかのサイトでみたwhile(flag==0){}だけ書いて使うよりましな気がする
まだ調べてないけどcondition_variableらへんなら簡単にできるのかな?
>>836
うんAがあるとこまできたらBの特定の処理やらせてA再開させたい
0846デフォルトの名無しさん2016/05/24(火) 22:29:00.56ID:T7JCD34P
>SuspendThreadとResumeThreadかな

またまたご冗談を
「ダメ!絶対」の類だろそれ
0847デフォルトの名無しさん2016/05/24(火) 22:36:57.60ID:NcOn82rz
>>843
往生際悪いな
現行のC++ではstd::stringのmoveはnoexceptじゃないからstd::vectorのresize処理でmoveは使われないよ
0848デフォルトの名無しさん2016/05/24(火) 22:47:50.62ID:YIrQj88w
>>846
どして?
0849デフォルトの名無しさん2016/05/24(火) 23:18:27.50ID:0rn85x5N
>>846
「ダメ!絶対」なの?具体的にどう使えばいいかまだ考えてないけど適切に使えばいけそうな気はするけど
知ったかじゃなくて詳しい人なら合法なおすすめの方法教えてください
0850デフォルトの名無しさん2016/05/24(火) 23:32:28.73ID:FmhjQBy2
>>849
適切な位置で無駄なく止める方法が無いからお勧めしない
>>828 のリンク先にcondition_variableの使い方書いてあるからそれ読んだらいいよ
0851デフォルトの名無しさん2016/05/25(水) 00:10:40.60ID:amNKmmnw
>>850
理解した。サンクス
0852デフォルトの名無しさん2016/05/25(水) 00:35:42.82ID:ww7whTPS
>>847
規格(23.3.6.5/1)にはis_nothrow_move_constructible<T>::value==falseな場合であっても、
moveコンストラクタを使っちゃイカンという規定はないと思うぞ。
いずれにせよmove結果のstringの文字列ポインタが同じである保障などはどこにもないけど。
0853デフォルトの名無しさん2016/05/25(水) 01:01:43.05ID:ww7whTPS
てかstd::is_nothrow_move_constructible<std::string>::value
はtrueじゃん
0854デフォルトの名無しさん2016/05/25(水) 17:39:31.57ID:8pMELv+y
chat *c1 = new char[10];
genID(9,c1);
delete [] c1
ってお行儀よくdelete []しないと壮絶にメモリーリークする(させた)
char *genID(int len){
char *id=new char[len+1];
...色々
return id;
}
って書いて
printf("%s\n",genID(10));
をループさせてgenID内で確保した領域を失念してたらジャブジャブメモリーリークww
VS2015使っていたので
http://hwada.hatenablog.com/entry/20080304/1204609100
のメモリーリーク検出を使ったら、リーク数が膨大過ぎてリーク出力が終わらなかった。orz

ようやくIDを登録して重複を弾きながらID毎に一意の番号を返すプログラムができた
変数名とかラベルをintの番号で管理できる
"aaa" -> 1
1 -> "aaa"みたいに使う
勉強も兼ねて組んでみた
0855デフォルトの名無しさん2016/05/25(水) 18:28:32.35ID:SWdr3iFV
やっぱり2chなんかじゃまともな返しこなからC++のいい質問サイト教えて
0856デフォルトの名無しさん2016/05/25(水) 18:38:34.84ID:8+OpaV01
stackoverflow
0857デフォルトの名無しさん2016/05/25(水) 18:45:14.29ID:dwHnrEg2
テラテイル
0858デフォルトの名無しさん2016/05/25(水) 19:20:53.52ID:dN6Ungbk
知恵袋
0859デフォルトの名無しさん2016/05/25(水) 19:50:39.59ID:Hv1ZKWmi
C言語何でも質問掲示板
0860デフォルトの名無しさん2016/05/25(水) 20:35:35.50ID:I3XxdNkJ
質問です。

WindowsXPの頃に作った簡単なプログラムがWindws7で動きません。
ソースを紛失していて、実行ファイルしかないのですが、
動作としては、文字列入力フィールドがあって、
そこにDOS上で動く別のプログラム名を入力すると、そのプログラムをDOS窓を呼び出して実行するという簡単なものです。
XPでは問題なく使えていたのですが、Windows7では、DOS窓が開いただけで別プログラムが実行されません。

文字列操作でstrcat()とか使ってるので、それ関係かな?とも思いますが、
Windows7を入れた2台のPCのうち、1台は動かないのですが、もう1台では動きます。

動かないPCは、クリーンインストゥールしたPCなので、他の要因で動かないということは無いと思います。
Windows7のOS上で動くPCと動かないPCがあるということです。
システム構成は3770Kと3770で、ほぼ同じと言えます。
これはやはりプログラムを書き直しする必要があるでしょうか?回避策はあるでしょうか?
0861デフォルトの名無しさん2016/05/25(水) 20:44:24.28ID:8+OpaV01
片方がWindows 7の32 bitでもう片方が64 bitだったりしない?
DOSで動くプログラムは64 bit環境下では動かない。
0862デフォルトの名無しさん2016/05/25(水) 20:51:02.10ID:I3XxdNkJ
>>861
Windows7は、どちらも64bitです。

DOS窓で動かすプログラムは、自分でDOS窓を呼び出してコマンド入力すると動きます。
自作プログラムでコマンドを送ると、動かないというわけです。
文字列操作関係の障害とは思うのですが。
0863デフォルトの名無しさん2016/05/25(水) 20:57:21.56ID:8+OpaV01
DOS窓ってコマンドプロンプトの事?

実行ファイル同士の相対パスは同じ?
0864デフォルトの名無しさん2016/05/25(水) 20:58:56.68ID:pZYZ14wu
ユーザ権限やろ
文字列とか全く関係ないし
他のプログラム呼び出すプログラムは簡単ではない
0865デフォルトの名無しさん2016/05/25(水) 21:01:22.50ID:1fRRpIXD
ShellExecute にしろ CreateProcess にしろ管理者権限いるんだっけか?
0866デフォルトの名無しさん2016/05/25(水) 21:01:58.98ID:8+OpaV01
あるいはランタイム不足とか。

クリーンインストールした方では動かず、ごちゃごちゃしてる方では動くんだよね。
.NET FrameworkとかVisual Studio Runtimeとかはちゃんと入ってる?
というかエラーメッセージは出てる?
0867デフォルトの名無しさん2016/05/25(水) 21:02:07.03ID:I3XxdNkJ
>>863
同じパスで動かしていますのでOKです。
>>864
ユーザー権限かもしれませんね?
どこかに設定ありましたっけ?
0868デフォルトの名無しさん2016/05/25(水) 21:12:41.93ID:I3XxdNkJ
あ、症状がすこしわかりました。

文字列入力フィールドに、外部プログラム名を入力するのですが、
自作プログラムでは、自動でスイッチを追加するようにしてます。

例:
[hogehoge]
と、入力すると、
[hogehoge -A -g]
と、スイッチ付きでコマンドが出力されてDOS窓で実行される。
hogehogeプログラムは、[hogehoge]だけだと実行されない仕様。

動かないPCのほうで、
[hogehoge -A -g]
と、スイッチまでまとめて入力すると動きました。

ということは、やはりstrcat()で、
[hogehoge][ ][-A][ ][-g]と連結するあたりで、不具合が生じていると思われます。

>>866
MFCなんですが、ライブラリが他のソフトによって更新されてるのかもしれませんね?
0869デフォルトの名無しさん2016/05/25(水) 21:18:07.94ID:1fRRpIXD
ランタイムの違いで、単純な連結がおかしくなるなんて考えがたいな

・実行フォルダにスペース含んでてスイッチの有無の判断を誤爆した
0870デフォルトの名無しさん2016/05/25(水) 21:19:17.06ID:xoXxd0b5
スペースを入れたつもりが,全角空白だった
0871デフォルトの名無しさん2016/05/25(水) 21:24:48.19ID:xRl3BmuU
エスパー呼んできて
0872デフォルトの名無しさん2016/05/25(水) 21:27:10.10ID:I3XxdNkJ
>>869-870
スペースは、半角スペースで問題ないと思います。

>ランタイムの違いで、単純な連結がおかしくなるなんて考えがたいな
そうですねえ。
不思議ですが。
0873デフォルトの名無しさん2016/05/25(水) 21:42:08.35ID:SLfE9uQ3
最初の文字列をstrcpyすべきところをstrcatして自爆してるプログラムは見たことある
0874デフォルトの名無しさん2016/05/25(水) 21:54:19.59ID:tc536l9f
タスクマネージャからコマンドライン引数まで含めたパスが見れるけど、
これで動かないほうと動いてるほうで違いはある?

http://pasofaq.jp/windows/admintools/vistataskmgrcommand.htm
0875デフォルトの名無しさん2016/05/25(水) 22:16:54.36ID:I3XxdNkJ
>>874
そこでパスが見られるのは初めて知りました。
ありがとうございます。

さっそく見てみたところ、やはり文字列の連結部分に、変な文字バケが入っていました。
それでプログラムがスイッチを認識できなかったと思われます。
0876デフォルトの名無しさん2016/05/25(水) 22:36:53.33ID:tc536l9f
>>875
文字化けは、↓でいうところのどこに入ってる?
[hogehoge][ ][-A][ ][-g]
化けて入っている文字は毎回同じ?

差し支えなければ、タスクマネージャのコマンドラインに表示されてる文字列をそのままここに書いて欲しい
プログラム名は書き換えても構わんから
0877デフォルトの名無しさん2016/05/25(水) 23:04:03.21ID:ppSs3u1I
>>850
ありがととりあえずC++11の方で書き直し始めたけど>>828がよくわらかない
これ結局whileでスレッドの流れ止めてるわけだよね?ってことは別に>>845のwhile一行で問題ない気がするんだけど違うの?
0878デフォルトの名無しさん2016/05/25(水) 23:07:26.98ID:89Cyo5VB
それはMSDNでSuspendThreadの説明を読んだ上で物申しているのだろうか
0879デフォルトの名無しさん2016/05/25(水) 23:10:13.49ID:ppSs3u1I
>>878
ん?誰に何に対して言ってるの詳しく
0880デフォルトの名無しさん2016/05/25(水) 23:12:35.13ID:ORQIc+8+
>>877
違う。
0881デフォルトの名無しさん2016/05/25(水) 23:14:51.24ID:I3XxdNkJ
>>876

[hogehoge]Hlw[ ][-A][ ][-g]

こんな感じで、プログラム名の直後に3〜4文字程度文字化けが入ります。
strcat()で文字を連結してる部分です。
後ろの文字列もstrcat()で連結してますが、問題ないようです。
毎回違う文字になるようです。
何十回か試したところ、文字化けしないで実行されることもありました。

もしかしたら、文字列格納用の配列を初期化し忘れてるかも?
XPだと動いてたのですが。
0882デフォルトの名無しさん2016/05/25(水) 23:25:28.97ID:tc536l9f
>>881
>>もしかしたら、文字列格納用の配列を初期化し忘れてるかも?
そんな感じの動きだね

バッファのサイズがわからないけど
[hogehoge ][ ][-A][ ][-g]
みたいに、入力するファイル名の末尾をスペースで埋めてやれば安定して動くかも

あとできることは、ランタイムを更新したり、互換モードで実行してみるくらいかな
0883デフォルトの名無しさん2016/05/25(水) 23:29:59.50ID:J8vTQ7fe
ソースが無いならバイナリ八苦
0884デフォルトの名無しさん2016/05/25(水) 23:33:29.17ID:ppSs3u1I
>>880
なんでよ…?まだ理解できてないみたいそもそもこの場合lock排他制御とかの必要性がわからないわど詳しいなら教えてください
0885デフォルトの名無しさん2016/05/25(水) 23:39:45.19ID:I3XxdNkJ
>>882
ありがとうございます。

上手くいかないようなら、ソースから書き直すことにします。
0886デフォルトの名無しさん2016/05/25(水) 23:42:15.41ID:gyPde1un
>>884
while一行だとcpu無制限に使うだろ
あともう一つ理由あるけど初心者には理解出来ないだろうから言わない
0887デフォルトの名無しさん2016/05/25(水) 23:48:54.40ID:ppSs3u1I
>>886
うんwhileだとcpu使いまくるから書き換えたくてそもそも質問したんだよね
OSにスレッドの処理の割り当てやめさせるのが本質的で理想だとは思うんだよね
できればもう一つのほうの理由ほんとにあるなら教えてくださいお願いします概略だけでいいので
0888デフォルトの名無しさん2016/05/25(水) 23:51:47.79ID:gyPde1un
>>887
いや、だからcondition_variable::wait使ったらcpu使わないの
0889デフォルトの名無しさん2016/05/25(水) 23:59:01.49ID:ppSs3u1I
>>888
マジで?ありがとlockとかwaitのなかどうなってるのかまったくわからんけど
そうならサンプル通り書くわ とりま書いてみてどうなるか試してみる
0890デフォルトの名無しさん2016/05/26(木) 06:18:45.01ID:UjMbTLsx
自分から頻繁に問い合わせるポーリングは、CPUを使うので避けるべき

普通はイベントを使って、ただ待つだけ。
そして、ある事象が起こったら、相手からコールバックしてもらう
0891デフォルトの名無しさん2016/05/28(土) 05:44:24.51ID:ZBQoLo6f
やっと自分でstd::set 相当のソートされた集合を扱うプログラムが完成した
勉強のためにstd:set の項目を読み込んだら
赤黒木ってなに?な状態、確認したけど最速のアルゴリズムじゃねーか
勝負にならない、しかたないので赤黒木のアルゴリズムで実装してみる
自作のset は探索が O(log N)で登録が O(log N+N/2)位かな
ソート用INDEXへの登録はコピーして移動するから一種のバブルソート
INDEXのお陰で配列みたいなアクセスができる
0892デフォルトの名無しさん2016/05/28(土) 06:19:17.90ID:1gMYSkQh
日記はチラ裏へ
0893デフォルトの名無しさん2016/05/28(土) 08:50:19.33ID:DN9P7VVw
O(log N+N/2)ってなに?
書き方理解してる?
0894デフォルトの名無しさん2016/05/28(土) 09:56:16.68ID:9LifERBh
>>891
(1)std::set相当ということですが、コンテナ要件は満たしていますか?
たとえば、イテレータを返す関数はありますか?

(2)std::mapとそのデータ構造は知っていますか?
インデックスアクセスが必要ならmapのキーをintにするだけでよいと思うのですが

(3)std::unorder_set/std::unorder_mapとそのデータ構造は知っていますか?
0895デフォルトの名無しさん2016/05/28(土) 09:56:59.54ID:EvwqXBgm
log(N)という結論を導き出すための途中計算結果だろきっと
0896デフォルトの名無しさん2016/05/29(日) 00:42:11.12ID:GHX5PbEy
>>890
具体的にどうやんのそれ?condition_variableで書いてみたけど
while一行の十倍以上遅いんだけど…マジ助けて ここマジ速度いるとこだから困る
やっぱWinAPIの方が早いんかな?
0897デフォルトの名無しさん2016/05/29(日) 00:44:54.07ID:GHX5PbEy
あと確かにcondition_variable使ったら無駄なループはなかった
spurious wakeupとかいうの防止のためらしいね でもここまで遅いとなるとベストな方法なのかわからん
0898デフォルトの名無しさん2016/05/29(日) 00:56:14.41ID:lkZpmfRh
>>896
まずコードを晒せよ…
君が抱えている問題の起こる最小限のコードな。
もちろん動くもの。

人に聞く時の常識だぞ…
0899デフォルトの名無しさん2016/05/29(日) 02:03:14.24ID:44Nx9wpP
うん
0900デフォルトの名無しさん2016/05/29(日) 02:08:31.47ID:Ck0Wf5U3
遅いの基準がわからん。
polingに比べてcondの遅延が10倍程度ならそんなものという気もするし。
0901デフォルトの名無しさん2016/05/29(日) 02:19:18.40ID:Ck0Wf5U3
ここだと2倍程度で収まっているな。
環境依存がどれだけか知らんけど。
http://askldjd.com/2010/05/16/spin-wait-vs-condition-variable/
0902デフォルトの名無しさん2016/05/29(日) 02:40:55.51ID:WUv99Md/
https://ideone.com/w9kDKK
適当に比較コード書いた

vc++2015では遅延,cpu負荷は
polling:1144490ns,17%
cond:2012008ns,3%

十倍遅いのはおかしんじゃね
あとideoneの結果は信じないほうがいいと思う
0903デフォルトの名無しさん2016/05/29(日) 03:56:58.04ID:Pf08Insu
何倍とか意味がなさすぎる
0904デフォルトの名無しさん2016/05/29(日) 12:45:14.14ID:uvUIKndN
みんなマジありがと比較とかまでしてくれて やっぱ10倍程度ならそんなものなのか十倍遅いのはおかしいんかね
教えてもらったページのサンプル通り書いたてかまずコピペして書いたつもりなんだけどなぁ
とりあえず今のとこのコードをマルチスレッドのとこだけ抜き出して超簡略化して晒してみる問題があったらどんどん教えてください
変数名とか関数名とか適当だしただの趣味でやってるから公のルールとかしらんから勘弁してくれ
あとまだ一個whileスピンロック?使ってるけど気にしないで
http://ideone.com/qrSOQS
0905デフォルトの名無しさん2016/05/29(日) 14:20:10.37ID:f/sZpflr
flagは同時に読み書きされる可能性があるからmutexでlockするかatomic<bool>を使わないと不味いね
ただそれは当然実行が遅くなる方に動くから、この中だけでは10倍遅くなる理由はわからん
そもそもなんの時間を比べたんだ?
0906デフォルトの名無しさん2016/05/29(日) 15:01:58.63ID:vZz5+wdA
スレッド使うならそれなりに大きな粒度じゃないと同期に時間がかかってかえって遅くなったりするよ
あと、マルチコアCPUで完全にコアが余っている場合、スピンロックのほうが早いよ
ただ、CPUを無駄遣いするというだけであってだね
CPUを無駄遣いした結果、他の仕事ができなくなって巡り巡って遅くなることもあれば
問題にならず、遅くならない場合もある
これはその時のCPUの利用状況によりけりで、マルチタスクOSにおいては、不確定要素で誰もわからない

かなり細かな粒度で同期する場合はスピンロックのほうが良いかもしれない、ががががが、しかし
同期が問題になるほど細かな粒度でマルチスレッドを組むなという話であって
他の人が同期時間をそれほど問題視していないのは、そこに理由がある
同期は時間がかかるものだと最初からわかりきっているから
初めから大きな粒度でスレッドを扱うように設計段階から気を配っている
そうしないと速度が出ないし、マルチスレッドにする意味が無くなってくる
0907デフォルトの名無しさん2016/05/29(日) 15:06:45.81ID:44Nx9wpP
難しいわ
0908デフォルトの名無しさん2016/05/29(日) 15:19:50.13ID:vZz5+wdA
あと、小さな粒度で並列化したいなら、SSEなど、SIMDが用意されている
SIMDはマルチスレッドと比べれば同期処理もいらないし、後の運用が遥かに楽だよ
一つのプログラムカウンタだけ相手していればよいからね
ただ、データ構造を練らなければならないので
最初からそのつもりで作ってないとダメという意味ではマルチスレッドと同じかもしれないが

マルチスレッドは出来るだけ根元の方からごっそりと
枝葉の細かな高速化はSIMDで (というか、SIMDは枝葉にしか使えない)
っていうのが基本でしょう
0909デフォルトの名無しさん2016/05/29(日) 15:48:54.98ID:uvUIKndN
>>905
flagってboolかせいぜいintなんだしスレッドの一方が読み取り専用他方が書き込み専用だしこの場合mutexとかいらないんじゃないの?
比べたのは上のコードから単純にmutexとかlockとかをコメントアウトした奴 ほんとなんでこんな遅くなるかよくわからん
>>906,908
ありがとやっぱ理論的に最速なのはスピンロックなんかな けど今のPCは4コアにIntelのHTついてるだけだからなぁ
てか908難しいなぁもうスピンロックかこれで目をつぶるしかないかも
0910デフォルトの名無しさん2016/05/29(日) 16:04:28.02ID:K6JtIDQD
>>909
たとえboolでもc++では正常に動く保証はない、あるのは同時読み込みの時だけ

てか比べた対象がlockをコメントアウトしたやつって排他処理一切してないってこと?それプログラムとして正常に動作する保証まったくないぞ
排他処理はしなきゃダメ
0911デフォルトの名無しさん2016/05/29(日) 16:19:24.34ID:uvUIKndN
>>910
アライメントされてるわけだしCPUで勝手にアトミックとなるんじゃないの?
どこで問題が生じるか理解できん
0912デフォルトの名無しさん2016/05/29(日) 16:21:05.69ID:uvUIKndN
アラインメントねン抜けちゃった
0913デフォルトの名無しさん2016/05/29(日) 16:24:26.75ID:Zak8dvzg
コンパイラとOS次第のような気もするし
実質的にはアトミックかもしれんけど、かも だけでソレを信じて足元すくわれることもあるから
なんとも以遠
0914デフォルトの名無しさん2016/05/29(日) 16:32:40.45ID:Pf08Insu
たとえアトミックじゃないとしても値が0か非0しかないのに問題があるケースってどんなんだろう
0915デフォルトの名無しさん2016/05/29(日) 16:36:52.24ID:yiOXqgD7
>>914
未定義動作って知ってる?
0916デフォルトの名無しさん2016/05/29(日) 16:42:59.54ID:yiOXqgD7
具体的には超アグレッシブに最適化するコンパイラはflagがそのスレッドから全く書き換えられないと認識され、trueだと無限ループになるからfalseしかありえねーよと、while(flag){}というコード自体削除するかもしれない
0917デフォルトの名無しさん2016/05/29(日) 16:46:32.04ID:uvUIKndN
>>916
せっかくコードあげたんだから読んでよ…
0918デフォルトの名無しさん2016/05/29(日) 16:51:03.32ID:Pf08Insu
>>915
あれか?trueが01010101でfalseが10101010になってるような処理系の話か?
確かにそれは盲点だったわ
0919デフォルトの名無しさん2016/05/29(日) 17:10:00.39ID:+RHbqb5q
$1.10.4
Two expression evaluations conflict if one of them modifies a memory location and the other one accesses
or modifies the same memory location.

$1.10.21
The execution of a program contains a data race if it contains two conflicting actions in different threads,
at least one of which is not atomic, and neither happens before the other. Any such data race results in
undefined behavior.

c++としては保障されません。
特定の環境で動作するかどうかはコンパイラやcpuによって変わるんだから、それぞれの仕様書なりを熟読して保障されてることが確認できるなら使えばいいんじゃない
0920デフォルトの名無しさん2016/05/29(日) 17:20:27.60ID:uvUIKndN
やっぱこの場合排他処理いらんよね? マイクロソフトのサイト見つけたけど
https://msdn.microsoft.com/ja-jp/library/bb310595%28v=vs.85%29.aspx
によると最近のCPUは一回ののバス トランザクションで実行するそうなので
データ壊れることないしいらんと思うんだよね
0921デフォルトの名無しさん2016/05/29(日) 17:34:44.56ID:5/hKFy9c
強いメモリモデルとキャッシュプロトコルによる強い保証の有るインテルCPUしか知らないと問題ないと思ってしまうのだろう
0922デフォルトの名無しさん2016/05/29(日) 17:56:00.51ID:uvUIKndN
>>921
雑学として教えて 具体的にこういう状況で古くなく特殊じゃないCPUとかでアラインメントされたデータが壊れるって
なんのプロセッサなの? Intel以外のCPUとか知らんしGPGPUもやったことないし
てかalignmentって日本語だとアライメントか?アラインメントか?混乱してきたまぁこれはどっちでもいいけど
0923デフォルトの名無しさん2016/05/29(日) 18:37:00.71ID:cHIEhEmq
バス調停の話?
0924デフォルトの名無しさん2016/05/29(日) 18:37:25.95ID:jMgBTeKS
>>911
フラグの読み込みと,フラグの書き込みの両方があるのが普通
でないとフラグの意味がない
そしてフラグの読み込みとフラグの書き込みはアトミックでないといけない
0925デフォルトの名無しさん2016/05/29(日) 18:46:43.75ID:uvUIKndN
>>924
どういう意味?ごめん何がいいたいかよくわからん
0926デフォルトの名無しさん2016/05/29(日) 18:52:44.29ID:jMgBTeKS
>>925
フラグを読むだけじゃないのでは?実は後になって書き込みをしているのでは?
そうでないとフラグの意味がないのでは?
0927デフォルトの名無しさん2016/05/29(日) 19:00:09.12ID:uvUIKndN
>>926
ん?flag普通に読み書きしてるけど?CPUでアトミックになるから大丈夫でしょって話でしょ
わけわからん
0928デフォルトの名無しさん2016/05/29(日) 19:05:17.25ID:jMgBTeKS
>>927
読みと書きの異なる命令を両方を順に行うのでは普通はアトミックにならないのでは?
それともフェッチ・アンド・アッド?コンペアアンドスワップ?
これは「普通に読み書き」ではないだろうね

結論:フラグをスレッド間で共有するのなら排他制御は必要
0929デフォルトの名無しさん2016/05/29(日) 19:05:24.63ID:+RHbqb5q
https://ideone.com/S3lzqE
また比較コード書いた

vc++2015,corei7-6700で遅延
polling_atomic
1055236ns
polling_atomic2
1245457ns
polling
1045074ns

なぜpolling_atomic2が遅いのかわからんが
atomic<bool>でもboolでもそんなに速度変わらない、別の時にはpollingのほうが遅くなったし
だったらatomic<bool>使えばいいでしょ、環境依存なしで動作保証されるんだから
0930デフォルトの名無しさん2016/05/29(日) 19:22:58.57ID:Xg0gIt10
>>927
主語をはっきり書かないと色々混乱する
> ん?flag普通に(スレッド1で)読み(スレッド2で)書きしてるけど?
なら
> CPUでアトミックになるから大丈夫でしょって話でしょ
は正しいと思う
0931デフォルトの名無しさん2016/05/29(日) 19:25:01.59ID:+RHbqb5q
結論:boolみたいな、atomicな型があるならatomic<T>を使う、
それ以外のクラスのインスタンスとかはmutexとかで排他制御する
何もしないという環境依存の処置はありえない

異論ありますか?
0932デフォルトの名無しさん2016/05/29(日) 19:26:02.63ID:Pf08Insu
>>929
だーから、そんな非現実的な粒度の小さすぎるコードで速度比較なんてなんの意味もないって
0933デフォルトの名無しさん2016/05/29(日) 19:30:38.52ID:Pf08Insu
>>931
神経質的にポータブルであることが要求される案件ならそうだね(遠い目)
0934デフォルトの名無しさん2016/05/29(日) 19:36:45.30ID:uvUIKndN
>>930,928
あーこういうこと?でいいんかな?コード上げたし上でそれいったからそういう前提で話進んでると思ってたけど
確かに比較される瞬間は怪しいけどでも問題あるバグにはならないと思うんだよね
>>931
C++使う時点で環境依存にならざるおえなくね?
0935デフォルトの名無しさん2016/05/29(日) 19:37:58.51ID:Xg0gIt10
>>931
俺ならこうする
って言う意見なら特に異存はないよ
0936デフォルトの名無しさん2016/05/29(日) 19:41:15.16ID:cHIEhEmq
移植性を考えてコードする事はできるな。
0937デフォルトの名無しさん2016/05/29(日) 19:48:53.81ID:+RHbqb5q
>>932
粒度ってどういう意味で使ってるの?粒度って処理が適切な単位で分割されているって意味でしょ
>>934
>C++使う時点で環境依存にならざるおえなくね?
意味わからんc++が使えるっていうのはc++の規格に沿っているって意味で
規格に沿ってれば俺の方法では環境によらないんだが
0938デフォルトの名無しさん2016/05/29(日) 19:53:21.37ID:jMgBTeKS
>>930
フラグとして使うのならば,スレッド1で読み,スレッド1で書き込む,となるだろう
その読み書きでアトミックでなければ,いろいろと問題がおきるのでは?排他制御ができてないのでは?
0939デフォルトの名無しさん2016/05/29(日) 20:04:16.48ID:Pf08Insu
>>937
1つのflagを変化させるだけの処理なんて非現実的で粒度が小さすぎるからそんなものの処理速度を比較したって全然無意味だって言ってるの分かんない?
>>929のコードには他にも突っ込みどころ満載だけどね
例えば
std::this_thread::sleep_for(std::chrono::seconds(1));
の精度について何も考えてないぽいところとか
こんなもので速度比較なんてバカバカしいと言ってるだけ
0940デフォルトの名無しさん2016/05/29(日) 20:04:52.52ID:Xg0gIt10
>>938
> フラグとして使うのならば,スレッド1で読み,スレッド1で書き込む,となるだろう
ならない
単純にスレッド2が書き込むまでスレッド1が待つケース
0941デフォルトの名無しさん2016/05/29(日) 20:09:43.14ID:jMgBTeKS
>>940
待つって‥満足な排他制御も使わずにどうやって実現するんだ?
0942デフォルトの名無しさん2016/05/29(日) 20:29:39.71ID:+RHbqb5q
>>939
100回試したとしても精度がよくないことはわかってるよ
でもなにもデータがないまま語るよりは全然いいだろ
批判してないで粒度、精度が高いプログラムっていうのを自分で書いて実験結果を見せてくれよ
0943デフォルトの名無しさん2016/05/29(日) 20:34:31.74ID:wNaC0f5W
>>942
>100回試したとしても精度がよくないことはわかってるよ
>でもなにもデータがないまま語るよりは全然いいだろ
それをデタラメって言うんですよ。
0944デフォルトの名無しさん2016/05/29(日) 20:40:03.06ID:Xg0gIt10
>>941
スレッド1が単純にビジーループで待てばいいだけ
資源確保じゃないから君が思ってるレベルの排他制御は不要

>>942
粒度厨はスルーでいいかと
0945デフォルトの名無しさん2016/05/29(日) 21:14:32.94ID:8Jl23sl6
>>942
>批判してないで粒度、精度が高いプログラムっていうのを自分で書いて実験結果を見せてくれよ
確かにそうだよね。
0946デフォルトの名無しさん2016/05/29(日) 21:22:48.20ID:5/hKFy9c
弱いメモリモデル全般にマルチCPU環境では何の同期も無しに書き込みすると読みとるスレッドに反映されないことは日常茶飯事
排他制御もメモリバリアもないビジーループはクソ
0947デフォルトの名無しさん2016/05/29(日) 21:25:21.54ID:yiOXqgD7
ビジーループでいいなんて場合かなり限られると思うけどな。
例えばハードウェアと実行環境が固定されてい て、そのプログラムがコアを使いこなしていないかつ、他のプログラムの動作を妨げてもいいとか
0948デフォルトの名無しさん2016/05/29(日) 21:43:17.80ID:5/hKFy9c
>>947
ビジーループを持ち出さないといけないような特殊な場面だからこそCやC++が登場するんだろ
ビジーループでも100ナノ秒超えたら同期オブジェクトでの待機に切り替えるみたいな判断は当然必要
0949デフォルトの名無しさん2016/05/29(日) 21:52:50.40ID:uvUIKndN
>>944
結局やっぱ上記のコードで排他制御は不要って結論で正解だよね
てか聞いてもいないケース持ち出してきてこれは違うって言いだすのやめてくれ
0950デフォルトの名無しさん2016/05/29(日) 21:58:16.72ID:AaQnAGiu
話そらしてるな
0951デフォルトの名無しさん2016/05/29(日) 21:59:19.58ID:yiOXqgD7
>>949
お前の想定する環境で問題ないなら別にいいけどなぜそこまでatomicを使いたくないのか解らんわ
Intelのintとかatomicなのが保証されてる場合は実行コスト無いぞ?
0952デフォルトの名無しさん2016/05/29(日) 22:13:28.24ID:Xg0gIt10
>>946
排他制御は関係ないだろ
0953デフォルトの名無しさん2016/05/29(日) 22:14:37.13ID:uvUIKndN
>>951
何を勘違いしてるかしらんが使いたくないなんて一言も言ってないぞ 
技術的にこの環境でatomicないとどういうバグがなぜ発生しうるのか?結局不要なのか?の結論がしりたいだけであって
ビジーループについても速さを考えるかcpu使用の問題を考えるかいろいろ考えて
なにが今回のケースや環境にあってるかで採用するか決めるつもりだしね
あと移植性に関しても今回のケースの話ではない
0954デフォルトの名無しさん2016/05/29(日) 22:20:41.75ID:jYTx1y8a
対象の環境をどうするかってのは作る人次第でいろいろあるんじゃね?
例えば、VS2008から2015まで互換性があるコードじゃないとならんとか。
どこの環境で必要になるか分からんような互換性のことを挙げるくせに
C++11は当然使えると思ってるようなところは違和感あるわ。
0955デフォルトの名無しさん2016/05/29(日) 22:24:45.69ID:uvUIKndN
>>954
それ言えてるw
0956デフォルトの名無しさん2016/05/29(日) 22:26:34.09ID:uhlxBvmX
C++11使えない環境案外多くて萎える
0957デフォルトの名無しさん2016/05/29(日) 22:35:43.71ID:yiOXqgD7
そりゃC++11で書き直して10倍遅いってのが話の発端なんだから使えるの前提に決まってるじゃん
0958デフォルトの名無しさん2016/05/29(日) 22:35:44.17ID:vZz5+wdA
粒度が小さすぎて測定しても意味ない、の話だけど
本来想定しているスレッドBで実行したい処理が何かあって
それが結構な時間がかかるなら
同期にかかる時間はそれに比べて無視できるって話だぞ
当たり前に、1秒とか時間がかかるのならスピンロックは論外だぞ

同期にかかる時間だけを100万回測定して
スピンロックの方が早いから、じゃースピンロックでって話にはならないぞ
スピンロックを使ってよいのは、マルチスレッドにする意味がないぐらい
短い時間で処理が終わる場合だけだぞ

俺ならそんなスピンロックでも良いような
短い時間で終わる事が確定している処理を別スレッドに投げたりしないし
もしくは、もっと大きな粒度にする
要するにどちらに転んでもスピンロックなんかまず使わねー
0959デフォルトの名無しさん2016/05/29(日) 22:48:44.85ID:1g2uTEkW
C++11つかうと一気に実行時間が10倍に?!
0960デフォルトの名無しさん2016/05/29(日) 23:00:18.83ID:44Nx9wpP
ここではlinuxでシコシコ派はいないのか
0961デフォルトの名無しさん2016/05/29(日) 23:08:57.18ID:HnF0l+my
>>960
おるで
0962デフォルトの名無しさん2016/05/29(日) 23:20:49.76ID:uvUIKndN
>>958
だから前も言ったけどマルチスレッド使わざるおえない状況なんだってもう絶対に絶対にここじゃ詳しく書かんけどね
本来マルチスレッドにする意味がないぐらい短い時間の処理を短い時間で終わらせたいケースなの
目的は並列処理による高速化じゃないしそこに書かれてるのは全部考えてる
てか粒度粒度ってなんなんだよマジで
0963デフォルトの名無しさん2016/05/29(日) 23:21:16.64ID:44Nx9wpP
>>961 
どもw
0964デフォルトの名無しさん2016/05/29(日) 23:28:02.48ID:HnF0l+my
>>962
並列処理による高速化以外が目的なら、
スレッドじゃなくてプロセス使った方が綺麗に書けるんじゃね?
目的が見えてこないけど。
0965デフォルトの名無しさん2016/05/29(日) 23:33:04.77ID:8Jl23sl6
>>962
俺も粒度(スレではりゅうどではなくつぶどと読むのが正しい)なによだけど、
きっと粒度ってなんだよって言う時点でマルチスレッドを使っては
いけないレベルなんじゃないのか。
クレクレじゃなく少しはマルチスレッド基礎を勉強しろよって言われるんじゃないのか。
0966デフォルトの名無しさん2016/05/29(日) 23:36:25.28ID:Pf08Insu
>マルチスレッドにする意味がないぐらい短い時間の処理
まさかその「処理」の度にスレッドを起こそうとしてるのか?
0967デフォルトの名無しさん2016/05/29(日) 23:37:33.22ID:Ck0Wf5U3
もう自己目的化しているようにしか聞こえない。
0968デフォルトの名無しさん2016/05/29(日) 23:42:26.78ID:XzZ2BH8C
そんなケース全く思いつかないわ。
もう動いたらokということにして好きにしたらいいんじゃね?
0969デフォルトの名無しさん2016/05/29(日) 23:43:16.86ID:uvUIKndN
>>964
まぁありがとプロセス間通信ってこと?それさらに遅くなりそうだから怖いし…
メモリ共有してないとのちのち困りそう
>>965
そうじゃなくて粒度粒度言ってる奴はなんなんだって話だよ
>>966
だから違うって
0970デフォルトの名無しさん2016/05/29(日) 23:49:56.02ID:8Jl23sl6
>>969
>マルチスレッドにする意味がないぐらい短い時間の処理
をマルチスレッドにすると本来やりたい処理よりスレッドの同期とかの方の時間が長くなるから
スレッドにする意味がないって言ってんじゃないのか
スレッドの同期とかより長い時間の処理(つぶど)をさせるようにしないと意味なし
こんなことをつぶどがどうのこうのって言っていると思うんだが
0971デフォルトの名無しさん2016/05/29(日) 23:51:53.48ID:Pf08Insu
粒度が高いというのはだな、粒が大きいという事以外にも、それぞれの粒の独立性が高い(相関性が低い)ということもあるのじゃよ
具体的な処理が分からないんじゃ誰も何も言えないよ
1つのフラグを書き換えて無意味な一秒待ちするコードを見せられても
0972デフォルトの名無しさん2016/05/29(日) 23:52:25.12ID:uvUIKndN
>>968
もうこれでいい気がしてきたわ
0973デフォルトの名無しさん2016/05/29(日) 23:54:48.47ID:Pf08Insu
並列処理の経験がないならOpenMPとかインテルのTBBとか使ったほうがマシなんじゃないかな
0974デフォルトの名無しさん2016/05/29(日) 23:55:51.55ID:uvUIKndN
>>970
だからそれはわかってるって… スレッドにわけないとどうしても実現しえない処理があるからスレッドにする意味があるだけで
0975デフォルトの名無しさん2016/05/29(日) 23:56:21.83ID:yiOXqgD7
俺らが全く思いつかないような特殊ケースなんだろ。
MSVC使っててオプション変更しないARM向けにビルドしないならvolatileでいいよ。

https://msdn.microsoft.com/ja-jp/library/12a04hfd.aspx

MSDNですらスレッド間で使うなって書いてある
0976デフォルトの名無しさん2016/05/29(日) 23:57:09.83ID:uvUIKndN
>>973
ありがとちょっと調べてみる
0977デフォルトの名無しさん2016/05/29(日) 23:58:44.02ID:hLdo4DXj
MSVCならPPLもあるぞ
0978デフォルトの名無しさん2016/05/29(日) 23:59:12.05ID:8Jl23sl6
>>972
ずばり(他から見て)どんな糞コードでもお前がそれで良いって判断ならそれで問題ない。
お前のプログラムに採用するか決めるのはこのスレの連中じゃない
0979デフォルトの名無しさん2016/05/30(月) 00:07:24.73ID:eBg5g0aW
>>978
言えてるな でも助かるよこんな100レスに以上にわたって案とかコードとか
俺抜きとかでも議論してくれてて いろいろ考える材料になったわありがととりま寝る
0980デフォルトの名無しさん2016/05/30(月) 01:19:02.55ID:izE0wMtN
>>974
>スレッドにわけないとどうしても実現しえない処理がある
んなの無いよ
0981デフォルトの名無しさん2016/05/30(月) 01:42:22.04ID:osdNY1C4
マルチスレッドを保守するのは無理

安全なマルチプロセスにすべき
0982デフォルトの名無しさん2016/05/30(月) 02:00:19.07ID:AMtRAhxB
シングルスレッドアパートメントにしてアウトプロセスサーバを作る方が良いってこと?
0983デフォルトの名無しさん2016/05/30(月) 06:57:39.12ID:hyGWFe6M
>>919
今回の話には無関係
それは 更新 + 更新or読み出し のケースの話
0984デフォルトの名無しさん2016/05/30(月) 07:02:34.22ID:hyGWFe6M
>>969
> そうじゃなくて粒度粒度言ってる奴はなんなんだって話だよ
だから粒度厨はスルーしろ
って言われてただろ
なんかの本とかを読んで一時的に信者になってる状態みたいだから説得試みても無駄だと思う
0985デフォルトの名無しさん2016/05/30(月) 07:15:23.94ID:oTOIpsxJ
粒度って連呼してるのは「ボクは並行プログラミングは知ってるけど並列(concurrent)プログラミングは知らないのでよくわかりません」
と言ってるだけなので
当該分野の基礎知識が無いのだから仕方がない
0986デフォルトの名無しさん2016/05/30(月) 07:23:30.85ID:NdC8+XxG
>>983
え?今回は更新+読み出しだろ?
0987デフォルトの名無しさん2016/05/30(月) 07:33:34.89ID:NdC8+XxG
>>985
今回の話に並列プログラミングが関係するとも思えないけどね。
パフォーマンスのためにスレッド使うわけじゃないって言ってるわけだし
その割には無駄にパフォーマンスに拘る所が謎だけど
0988デフォルトの名無しさん2016/05/30(月) 07:40:02.54ID:hyGWFe6M
>>986
書き込み + 読み出し
0989デフォルトの名無しさん2016/05/30(月) 08:47:12.93ID:9f9My9NT
もしかしたら複数のsocketからデータを読みに行きたいのかも。
それなら尚の事マルチプロセスプログラミングで良いと思うんだけど。
0990デフォルトの名無しさん2016/05/30(月) 10:39:14.27ID:oNejIaUN
>>988
何が違うの?
てかじゃあどの部分が今回の話してる場所なの?
0991デフォルトの名無しさん2016/05/30(月) 11:09:46.98ID:NdC8+XxG
>>989
そんなのBoost.asio使えばの一言で終わるわ
0992デフォルトの名無しさん2016/05/30(月) 12:44:12.80ID:hyGWFe6M
>>990
更新 = 読み出し + 書き込み
0993デフォルトの名無しさん2016/05/30(月) 16:47:36.56ID:NdC8+XxG
>>992
お前偉そうな事言った割にそんな基本が解ってたら間違える事もないような勘違いしてんだな。
ID:hyGWFe6M がスルー推奨筆頭に
0994デフォルトの名無しさん2016/05/30(月) 17:33:41.34ID:JHrCuxTH
modifyって単語は規格のなかで定義されてる用語って訳ではないからね
でも他で使われている場所を見れば単に変更ぐらいの意味で使ってるのが分かる
0995デフォルトの名無しさん2016/05/30(月) 17:52:18.89ID:hyGWFe6M
基本が解ってたら間違える事もないような勘違い ⇒ >>986 w
0996デフォルトの名無しさん2016/05/30(月) 17:55:12.40ID:hyGWFe6M
>>994
排他の話をしてて、Write と Modify の区別がつかないのは不味いだろ
Modify = Read-Modify-Write
ってわかってるよね?
0997デフォルトの名無しさん2016/05/30(月) 18:01:42.77ID:NdC8+XxG
>>996
やべぇなw
readと、readが競合しない事ぐらい解るよね?

お前のいう変更の定義だと
readとread+writeが競合する事になるわけだけど、read同士は競合しない、つまりreadとwriteが問題なわけ
これで理解できないなら理解力が絶望的に不足してるからスルーするよ
0998デフォルトの名無しさん2016/05/30(月) 18:03:27.28ID:Xl0N1v2s
>>1000取ったやつが決める。
それが2chのルールだが。
0999デフォルトの名無しさん2016/05/30(月) 18:08:53.26ID:5KszwDfD
バ カ
1000デフォルトの名無しさん2016/05/30(月) 18:10:34.67ID:4w65dfRj
戦え・もっと戦え…
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
life time: 286日 11時間 0分 16秒
10021002Over 1000Thread
2ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 2ちゃんねる専用ブラウザからの広告除去
★ 2ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
http://premium.2ch.net/
http://pink-chan-store.myshopify.com/
レス数が1000を超えています。これ以上書き込みはできません。