板検索:
【初心者歓迎】C/C++室 Ver.100【環境依存OK】 (999)
まとめビュー
1
デフォルトの名無しさん[sage]   投稿日:2016/11/06 22:58:02  ID:dU5z27As.net
エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。

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

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

前スレ
【初心者歓迎】C/C++室 Ver.99【環境依存OK】
コメント3件


2
デフォルトの名無しさん[sage]   投稿日:2016/11/06 23:23:55  ID:AHO3vAwR.net
>3-1000は射精魔
コメント1件

3
デフォルトの名無しさん[]   投稿日:2016/11/07 00:30:57  ID:pyn9XiBr.net
>2
訂正しときます
次スレの>3-1000が射精魔
コメント1件

4
デフォルトの名無しさん[sage]   投稿日:2016/11/07 09:27:53  ID:vooGYje+.net
前スレ>999再掲
class A{
int a[2];
A(int b[])
:a(b) //error
{}
};

この:a(b)ってなにか書き方ありますか?

前スレ>1000
無理でした・・・
コメント3件

5
デフォルトの名無しさん[sage]   投稿日:2016/11/07 09:34:35  ID:dSd+kVnH.net(2)
何がしたいのかわからないので回答しようがないな

6
デフォルトの名無しさん[sage]   投稿日:2016/11/07 09:36:19  ID:dSd+kVnH.net(2)
あ、初期化子か
インデントがないから見間違えた

7
デフォルトの名無しさん[sage]   投稿日:2016/11/07 09:38:54  ID:e8hpdnod.net
引数の int b[] って int* b と同じやしなぁ

8
デフォルトの名無しさん[sage]   投稿日:2016/11/07 09:47:42  ID:HQzTq5fm.net
std::array

9
デフォルトの名無しさん[sage]   投稿日:2016/11/07 12:11:29  ID:56hqYy7l.net
C++11以降なら
A(int (&b)[2]) : a{b[0], b[1]} {}

10
デフォルトの名無しさん[sage]   投稿日:2016/11/07 14:52:37  ID:fwwW9lIx.net(2)
だがint b[2][3]はポインタ引数は・・・

11
デフォルトの名無しさん[sage]   投稿日:2016/11/07 14:56:04  ID:6MsAvbZq.net
↑幻覚をみた糖質のつぶやき
コメント1件

12
デフォルトの名無しさん[]   投稿日:2016/11/07 15:00:49  ID:3Xim9e5h.net(2)
>4
C++11以降ならstd::initializer_listが使える

#include <iostream>
#include <initializer_list>
#include <algorithm>

class A {
int a[6];
public:
A(std::initializer_list<int> b) {
std::copy(std::begin(b), std::end(b), a);
}
void print() const {
for (int i : a)
std::cout << i << std::endl;
}
};

int main()
{
A a({10, 4, 2, 8, 5, 66});

a.print();
}
コメント2件


13
デフォルトの名無しさん[sage]   投稿日:2016/11/07 18:18:06  ID:hOJqMng1.net(4)
>12
それinitializer_listに6っこ以上与えたら実行時のアクセス違反になる

>4
C++11以降ならstd::array使うべき
そうすれば普通に書ける

class A{
std::array<int,2> a;
public:
A(const std::array<int,2> &b):a(b)
{
}
};
コメント1件

14
13[sage]   投稿日:2016/11/07 18:21:04  ID:hOJqMng1.net(4)
2行目「6個より多く」だったね

15
デフォルトの名無しさん[sage]   投稿日:2016/11/07 18:44:55  ID:3Xim9e5h.net(2)
>13
いやいくらでも動的に増やせるんだけど初心者スレだから省略した

http://ideone.com/ryEwkt

16
デフォルトの名無しさん[sage]   投稿日:2016/11/07 19:07:23  ID:hOJqMng1.net(4)
要求は固定長の配列であって、動的に増やせるようにしろとは言ってないので
それのコードは非効率にしかならないと思うよ
コメント2件

17
デフォルトの名無しさん[sage]   投稿日:2016/11/07 19:25:01  ID:fwwW9lIx.net(2)
>11
ん?
int b[2][3];をわたせんの?
func(int a[][3]);以外で

18
デフォルトの名無しさん[sage]   投稿日:2016/11/07 19:50:01  ID:Z2RT26Su.net(2)
>16
だからvector使ってないでしょう
unique_ptrのパフォーマンス知らないの?

19
デフォルトの名無しさん[sage]   投稿日:2016/11/07 20:07:47  ID:Z2RT26Su.net(2)
ID:hOJqMng1 の主張の変遷

1.わざと大きい初期化子を与えると実行時にアクセス違反になると主張
→だから動的に対応できるようにした

2.すると今度は非効率的だからarrayを使えという
→arrayが特に効率的なわけではないし、今度は「要求は固定長の配列だ」と言い出す

どう考えても言ってることがコロコロ変わってるんだが
コメント2件

20
デフォルトの名無しさん[]   投稿日:2016/11/07 21:12:34  ID:L762Pvtq.net
!!喧嘩の予感!!

21
デフォルトの名無しさん[sage]   投稿日:2016/11/07 21:25:52  ID:nZ1H9hgf.net
A() : a{b[0], b[1]} {}がダメだった人にC++11を押しつけてどーすんだ
>12に至ってはもとの質問と全然関係ねーし
コメント1件

22
デフォルトの名無しさん[sage]   投稿日:2016/11/07 21:26:20  ID:Rr8tj+hR.net
VC++で、マウスオーバーで色が少し変わって、クリックしたら沈んだみたいになる画像ボタンを作るにはどうしたらいいですか?

23
デフォルトの名無しさん[sage]   投稿日:2016/11/07 22:16:57  ID:hOJqMng1.net(4)
>19
まず効率は動的確保を行うnewとunique_ptrより確実にarrayのほうがいい

そして>4の要求はコードから明らかに固定長でいいと言ってる
これは私の勝手な主張ではなく元の要求がそうなってる
目的を達成するために非効率な動的確保は必要ない

私はアクセス違反になるといったが動的確保にしろとは言っておらず、動的確保にしたのはそっちが勝手にやったこと
アクセス違反を回避するために動的確保にするのは全く割に合わない
だったら長さチェックすればいいだけ

24
デフォルトの名無しさん[sage]   投稿日:2016/11/07 22:20:22  ID:JXtVbtZ4.net
>21で結論でてるじゃねえか
C+11を押し付けてる時点でおまえら全員ダメだ!

25
デフォルトの名無しさん[sage]   投稿日:2016/11/07 23:34:44  ID:lMECrzfj.net
いいぞ、もっとやれ〜♪

26
デフォルトの名無しさん[sage]   投稿日:2016/11/08 00:32:16  ID:t0HdCoBm.net
沸点低すぎワロタw

27
デフォルトの名無しさん[sage]   投稿日:2016/11/08 00:33:05  ID:2SYrs2Uf.net
>アクセス違反を回避するために動的確保にするのは全く割に合わない
こう書かれるべきものが
>16
>それのコードは非効率にしかならないと思うよ
と書かれたため>19が射精した

特に「非効率にしかならない」の「にしか」という表現が前後の繋がりを考えると最悪だ

28
デフォルトの名無しさん[sage]   投稿日:2016/11/08 15:38:54  ID:FW358liz.net(3)
using std;
int main() {
int a;
cout<< "数を入力してください" <<endl;
cin>> a;
cout<<a <<"ですね?" <<endl;
}
aを確実に入力させたくて困っています
ご教授ねがいます
コメント1件

29
デフォルトの名無しさん[sage]   投稿日:2016/11/08 16:03:34  ID:j/2yZvJO.net
まず確実ってなんやねん
数以外だったり未入力は弾くってか

30
デフォルトの名無しさん[sage]   投稿日:2016/11/08 16:26:08  ID:FW358liz.net(3)
そうです
未入力で無限ループみたいに表示されて困っています

31
デフォルトの名無しさん[sage]   投稿日:2016/11/08 16:26:29  ID:Or+T0geg.net
教示ならしてやっても良いが、教授はお断りだ

32
デフォルトの名無しさん[sage]   投稿日:2016/11/08 16:58:49  ID:sBMnjDSh.net
>28
http://ideone.com/dpolU5

一応単なる改行や数字で始まらない文字列は弾くようにした
ただしコメントにも書いてあるけど 123def みたいな数字で始まる文字列を
入力したときは数字だけ返すんでそれが駄目なら自前で作るしかないね
コメント1件

33
デフォルトの名無しさん[sage]   投稿日:2016/11/08 17:22:56  ID:FW358liz.net(3)
>32
getline知りませんでしたが何とかできそうです
ありがとうございます

34
デフォルトの名無しさん[sage]   投稿日:2016/11/10 10:52:07  ID:8ULjF/bN.net(8)
独習C第4版 P197ページの再帰のプログラムなのですが、
#include <stdio.h>

void recurse(int i);

int main(void)
{
recurse(0);

return 0;
}

void recurse(int i)
{
if(i < 10) {
recurse(i + 1);
printf("%d " , i);
}
}

実行結果は
9 8 7 6 5 4 3 2 1 0

の動作がわかりません。10になるまでprintfが実行されずに+1され続けるのはいいのですが、
なぜ10になったらiが戻り始めるのでしょうか?
あまりに初心者な質問ですみません。

35
デフォルトの名無しさん[sage]   投稿日:2016/11/10 11:03:28  ID:6ImFpJhK.net(3)
引数だけ書くと
0+1
1+1
・・・
9+1
ここまではprintfまで来ないまま再帰
9+1でifに入らないからrecurseからリターン
printfがiを表示(9)してリターン
printfがiを表示(8)してリターン
の繰り返し
コメント2件

36
34[sage]   投稿日:2016/11/10 11:07:42  ID:8ULjF/bN.net(8)
>35
早速のレスありがとうございます。

>9+1でifに入らないからrecurseからリターン
ということはmain関数のreturn 0でプログラムは終了してしまうのではないですか?
なぜprintfが呼ばれるのかわからんのですが。(iが減算される理由もわかりません)

37
34[sage]   投稿日:2016/11/10 11:12:33  ID:8ULjF/bN.net(8)
if(i < 10) {
recurse(i + 1);
printf("%d " , i);
}

recurseとprintfは同じifブロックに入っているので、ifが偽なら両方共スキップされると思うのですが、
なぜprintfだけ呼ばれるのでしょうか?
コメント1件

38
デフォルトの名無しさん[sage]   投稿日:2016/11/10 11:20:27  ID:69ogPHI/.net(4)
丁度再帰打ち切り付近の挙動

i=8 で受けた recurse
 recurse(8+1) の呼び出し
 i=9 で受けた recurse
  recurse(9+1) の呼び出し
    i=10 で受けた recurse
    条件合致せず戻る
 printf("%d", i) で 引数の 9 を書く
 i=9 で受けた recurse から戻る
printf("%d", i) で 引数の 8 を書く
i=8 で受けた recurse から戻る

39
デフォルトの名無しさん[sage]   投稿日:2016/11/10 11:28:04  ID:6ImFpJhK.net(3)
>37
9+1で入って偽で抜けたら
8+1で入ってきたif内のrecurseから抜けて次のprintfが実行されて抜ける
8+1で抜けたら7+1で入ってきたif内のrecurseから抜けて次のprintfが実行される
の繰り返し

40
34[sage]   投稿日:2016/11/10 11:40:24  ID:8ULjF/bN.net(8)
>35-39さん
どうも再帰関数とforループがごっちゃになっていたようです。
何となくわかりました。
後は自分で考えてみます。
どうもありがとうございました。

41
デフォルトの名無しさん[sage]   投稿日:2016/11/10 12:42:30  ID:69ogPHI/.net(4)
再帰呼び出し後に書く  recurse(i+1); printf("%d ", i);

書いてから再帰呼び出し printf("%d ", i); recurse(i+1);
の違いとか

呼び出しの出入りを整理する
printf("in:%d\n", i);
recurse(i+1);
printf("out:%d\n", i);
と見えてくると思うよ
コメント1件

42
デフォルトの名無しさん[sage]   投稿日:2016/11/10 13:57:04  ID:gEXUDT4B.net(5)
なんか遠回りな説明ばかりだな
スタックフレームというキーワードを出してやれよ
コメント1件

43
40[sage]   投稿日:2016/11/10 14:01:09  ID:8ULjF/bN.net(8)
>41
>再帰呼び出し後に書く  recurse(i+1); printf("%d ", i);
>と
>書いてから再帰呼び出し printf("%d ", i); recurse(i+1);
>の違いとか

これはこの本の次のページにも書いてありました。
書いてから再帰呼び出しの場合は昇順(1,2,3,4,5,6~)になりますね。

相変わらず曖昧な理解なんですが、
どのiの場合もi=10に達するまではrecurse(i+9)までしか実行されていなくて、
printfは実行されていない待機中の状態だと考えればいいのでしょうか?
それでi=10でif条件文を抜けて、i=9からi=0まで数字が大きい方から順番にまだ実行していなかった
printfを降順で実行していくのでしょうか?

この本(独習C)には
> 引数の値が10に達すると、recurse()の再帰呼び出しから戻りはじめます。関数は、呼び出し元に戻る
>ものなので、recurse()は直前の呼び出し元に戻り、そこでprinf()を文を実行して「9」と表示し、
>さらに前の呼び出し元に戻ります。こうしてrecurse()は、今度は「8」と表示します。 その後も同じ>プロセスが繰り返され、すべての呼び出しから戻った段階でプログラムが終了します。

実行される順番が、最初のi=0からではなく、直近のi=9からなのはなぜなのでしょうか?
コメント2件

44
デフォルトの名無しさん[sage]   投稿日:2016/11/10 14:02:24  ID:69ogPHI/.net(4)
再帰でどう動いてるか理解するのに
スタックフレーム出されても困らないか? 値の保持の実装でそうなってるってだけだし

45
デフォルトの名無しさん[sage]   投稿日:2016/11/10 14:09:10  ID:gEXUDT4B.net(5)
この手の人は、具体的な実装例を見さえすれば、すぐさま疑問が解消されるんだよ
>43でも「待機する」だとか
なんで逆順になるのか分からないとか
言っているが
スタックフレームさえ知れば全ての疑問は解決だし
C/C++するのにスタックフレームさえ知らない状態だと
このさき困難だろう

46
デフォルトの名無しさん[sage]   投稿日:2016/11/10 14:10:50  ID:69ogPHI/.net(4)
おっけー まかせた

47
デフォルトの名無しさん[sage]   投稿日:2016/11/10 14:18:39  ID:gEXUDT4B.net(5)
待機する、って言い方を見るに、何かキューのような物を連想しているようだし
実際、なんで逆順になるか分からないと発言しているわけだが
答えは関数呼び出しはキューではなくスタックだから、と言う他ない
キューやスタックという言葉の意味が分からなかったとしても
どのみちこれらも覚える必要のある最も基本的な事の一つだから
合わせて覚えればよいだろう
コンピュータの基本動作もよくわからないままプログラムを書くということは
多言語ではあり得るのかもしれんが、とりわけここはC/C++スレだからね

48
デフォルトの名無しさん[sage]   投稿日:2016/11/10 14:26:03  ID:gEXUDT4B.net(5)
いや、俺は別に何も説明するつもりはないよ
ただ、スタックフレームというキーワードをだね
そうすれば後は本人が検索するなりなんなり、勝手に調べるだろう
キーワードが分からなきゃ検索も出来ないから、キーワードを出してやれという話
スタックを知らずして再起呼び出しの動作を理解するのは非常に困難というか
質問者は関数呼び出しがキューのようなものであると考えている可能性が高いようだけど
実際にはスタック動作だよ、と
ここを勘違いしていたら、答えにたどりつかないかなぁと

49
デフォルトの名無しさん[sage]   投稿日:2016/11/10 14:29:55  ID:6ImFpJhK.net(3)
>42
最短の説明で教えてあげてくれ任せた

50
40[sage]   投稿日:2016/11/10 14:33:22  ID:8ULjF/bN.net(8)
スタックフレームで検索して見たところ、
http://brain.cc.kogakuin.ac.jp/~kanamaru/lecture/MP/final/part06/node9.html
このページが一番わかりやすそうです。
LIFOなんで新しい関数と引数が上の方に積み上がっていくと考えれば良いのでしょうか?
first outなんで実効は新しい順(つまり今回の例の場合はi=9)ということですね。

スタックフレームという言葉で検索したらおもしろそうなサイトがたくさん出てきました。
皆さん今回はありがとうございました。

51
デフォルトの名無しさん[sage]   投稿日:2016/11/10 14:51:19  ID:IzCfpVGN.net
>43
まず大前提としてプログラムの流れは1本道で別れたりしないし、待機みたいなことも普通しない

そして再帰関数という特別な関数があるわけではない、recurseは普通の関数と何も変わらない

void recurse(int i)
{
if(i < 10) {
recurse(i + 1);
printf("%d " , i);
}
}

この4行目はrecurseという関数を呼び出している
つまり自分自身を呼ぶのでこの4行目の呼び出し後、recurse関数の最初に戻る
ただし引数iは1大きい値で呼ぶ
これを入れ子のように10回繰り返すことになる
コメント1件

52
43[sage]   投稿日:2016/11/10 15:05:17  ID:8ULjF/bN.net(8)
>51
レスありがとうございます。
https://ipa-zone.info/page-2644/
このページに私が使っている独習Cの再帰の部分が丸ごと転載されているんですが(違法?)、

i=0~10と昇順で増加していく前半部分でも呼び出された関数(recurse(1)など)は終了した訳ではないですよね?
後半のi=10から降順で減少していくときにはじめてprintfが実行されて関数が終了すると思うんですが、
LIFOなんで最後に呼び出されたrecurse(9)からrecurese(0)まで降順で残ったprintfを実行していくということではないんですか?

53
デフォルトの名無しさん[sage]   投稿日:2016/11/10 15:15:27  ID:gEXUDT4B.net(5)
>実行は新しい順(つまり今回の例の場合はi=9)ということですね。

難しく考える必要は無い
関数を呼び出すとき、自分が今何をしていたかをそっくりそのまま保存した状態で
新たにスタックを確保して、呼び出した関数を実行する
関数の実行が終わると、使っていたスタックを開放して
呼び出される前に実行していた処理に復帰する
ちょうど君が
1)ビデオを見ていた時に電話がかかってきたら、ビデオを一時停止して電話に出る
2)電話が終わると、ビデオを再生して続きを見る
のと同じで、ビデオの一時停止機能がスタックに相当している
で、君がこの日のことを日記を書くとき
1)のことを重視すれば、ビデオ→電話、って順になるし
2)のことを重視すれば、電話→ビデオ、って順になる
実際にはビデオ→電話→ビデオ、という順で物事は流れているんだが
どこのタイミングを切り取ってくるかで順番が変わるのだ
下から順番に1,2,3,4,5と積み上げて、上から順番に5,4,3,2,1と取り出すとき
積み上げるとき(積み上げる前)に出力すると1,2,3,4,5だし
取り出すとき(取り出した後)に出力すると5,4,3,2,1になる
実際には1,2,3,4,5,4,3,2,1という順で処理は走っているが(積み上げる→取り出す)
前半に着目すれば1,2,3,4,5だし、後半に着目すれば5,4,3,2,1なのだ
コメント1件

54
デフォルトの名無しさん[sage]   投稿日:2016/11/10 15:18:47  ID:17noS2hU.net
長い。あとビデオ見ながら電話に出れるだろ

55
デフォルトの名無しさん[sage]   投稿日:2016/11/10 15:21:50  ID:3AXwvnI0.net
ポインタを返すラムダをstd::functionで取り扱いたくて調べてるのだが
どうしてどの参考例もintやvoidの例しか示していないのだろう
参考例を示すまでもなく誰でも簡単に記述出来ているのだろうか
コメント2件

56
52[sage]   投稿日:2016/11/10 15:39:54  ID:8ULjF/bN.net(8)
>53
レスありがとうございます。参考になりました。

57
デフォルトの名無しさん[sage]   投稿日:2016/11/10 20:21:43  ID:CLfGjB35.net
>55
特に難しくは無いと思う
例えばどんなことをしたいの?
コメント1件

58
デフォルトの名無しさん[sage]   投稿日:2016/11/10 20:31:23  ID:AQTsjJgJ.net(3)
文盲はお帰りください

59
デフォルトの名無しさん[sage]   投稿日:2016/11/10 21:49:48  ID:cv2N5dvt.net
std::function<int*(const int)> create_array = [](const int n)->int*{ return new int[n]); };

でいいんじゃないの
誰かdeleteすんだよと思うけど
コメント1件

60
デフォルトの名無しさん[sage]   投稿日:2016/11/10 22:03:01  ID:AQTsjJgJ.net(3)
>誰かdeleteすんだよと思うけど

自覚があるならそんな変な例を出さなければいいのに
コメント1件

61
デフォルトの名無しさん[]   投稿日:2016/11/10 23:23:35  ID:wCaAZ9DK.net
>60
じゃあお前が適切な答え書いてやれよ

62
デフォルトの名無しさん[sage]   投稿日:2016/11/10 23:41:59  ID:AQTsjJgJ.net(3)
>55の回答はこんな感じでいいだろう
using ptr_type = void *;
std::function<ptr_type ()> f1{ []{ return ptr_type{}; } };

std::function<void *()> f2{ []{ return static_cast<void *>(nullptr); } };
コメント2件

63
デフォルトの名無しさん[sage]   投稿日:2016/11/11 01:01:22  ID:JQalwGbJ.net(2)
>62
散々煽ってたから聞くけど
static_cast<void *>(nullptr)
このキャスト無駄じゃない?
これは変な例ではないの?
コメント1件

64
デフォルトの名無しさん[sage]   投稿日:2016/11/11 01:15:39  ID:tUBqvL6G.net(2)
う〜んどうだろうね
よく見るとラムダの戻り値の型が省略されているし
こういったことがどの段階のC++のバージョンで出来るようになったのか
俺は知らないが、実際の戻り値の型からラムダの型を推測してくれる便利機能
を使っていると思われる
となれば、キャストなしのnullptrでは型がわからないから
ラムダの戻り値の型の推測もできず、コンパイルエラーになるのではないだろうか

65
デフォルトの名無しさん[sage]   投稿日:2016/11/11 01:36:59  ID:tUBqvL6G.net(2)
もしくは、ひょっとしたらnullptrには何らかな特殊な型が与えられているのかもしれんが
それはしらないが、ともかくvoid*型ではないのは確かなので
その場合でもstd::function<void *()>への代入で問題を起こすんだろう
nullptrに型が有るのか無いのか、俺は知らんし、興味もないんだけどね
コメント1件

66
デフォルトの名無しさん[sage]   投稿日:2016/11/11 01:48:43  ID:v3r+B2af.net(2)
>57>59>62
vsで試してて
std::function<void *()>
のような書き方をするとテンプレートがエラーを出していたので
関数ポインタのような特殊な記述が必要になるのかと思って調べていたのですが
原因が分かりました

仮で書いていたラムダ式の中の返り値を
return NULL;
にしていたのでこれがintなためエラーが出ていたようです
テンプレートの奥のほうで型の不一致を出していたので
<>内の記述ばかり疑っていました

というかNULLって今まで(void *)0だと思ってました・・・
まさかただの0だとは
普段はコンパイラが暗黙に変換してるんだね・・・

67
デフォルトの名無しさん[sage]   投稿日:2016/11/11 01:56:19  ID:v3r+B2af.net(2)
自宅のvs2015communityで実験したところ

std::function<void *(void)> f0 = [](void) { return NULL; };
std::function<void *(void)> f1 = [](void) { return (void *)NULL; };
std::function<void *(void)> f2 = [](void)->void * { return NULL; };
std::function<void *(void)> f3 = [](void) { return nullptr; };

だとf0のみエラーです
gccとかでも同様なんですかね
コメント2件

68
デフォルトの名無しさん[sage]   投稿日:2016/11/11 02:04:25  ID:JQalwGbJ.net(2)
>65
nullptrの型はnullptr_tだよ
だからラムダの戻り値の型はnullptr_tと推論される
ただ問題はvoid *を戻り値としたfunctionに代入できるか

ぶっちゃけ俺も書いてからやっちまったかと思って調べた

規格を調べたところやはり要らなかった
戻り値が暗黙変換できれば代入できると書いてある
つまりラムダの戻り値intでfunctionはdoubleとかもあり
そして当然nullptrはvoid *型に暗黙変換できる
なので要らない

https://ideone.com/EwRvlU

>67の結果とも一致する

69
デフォルトの名無しさん[sage]   投稿日:2016/11/11 07:16:38  ID:hk5EgzxW.net
>63
コンパイルが通るかどうか以前に55は『ポインタを返すラムダを』と言っているのだから、
無いとお題改変になってしまうだろう

>67
当然
int f() {return NULL;}
void *関数() {
 return f();//エラー
}
と同じことなので

70
デフォルトの名無しさん[sage]   投稿日:2016/11/11 08:09:52  ID:JclCvFO1.net(2)
ID:tUBqvL6Gは希にみる健常者

71
デフォルトの名無しさん[sage]   投稿日:2016/11/11 08:32:07  ID:JclCvFO1.net(2)
>nullptrに型が有るのか無いのか
この手の文法で型が無い落とし穴は初期化の { } ぐらいか
int a = {0}; // 「{0}」は式でなく型も無い

72
デフォルトの名無しさん[sage]   投稿日:2016/11/29 23:30:19  ID:7z8mZ0fw.net
さすがにCは時代に取り残された感があるな
新規案件なら埋め込み系を除いて存在意義なし

73
デフォルトの名無しさん[sage]   投稿日:2016/11/30 02:47:51  ID:Ir3oZvjK.net
寂しいですなぁ

74
デフォルトの名無しさん[]   投稿日:2016/11/30 02:56:49  ID:a9ciiDR7.net
う、埋め込み…

75
デフォルトの名無しさん[]   投稿日:2016/11/30 04:02:07  ID:tfyAgmME.net
組み込み系って英語ではembedded なんちゃら だし
よくある間違いでしょ

76
デフォルトの名無しさん[]   投稿日:2016/11/30 05:21:32  ID:sG3uRZRm.net
韓国ではよくあるんだ。

77
デフォルトの名無しさん[sage]   投稿日:2016/11/30 05:53:32  ID:/gnC384r.net
埋めるのは中国の得意とする技術

78
デフォルトの名無しさん[sage]   投稿日:2016/11/30 21:26:32  ID:ncjk4kan.net
linuxのカーネルモジュールてC++で書けるようになったんだっけ?

79
デフォルトの名無しさん[sage]   投稿日:2016/11/30 22:16:09  ID:Yeu32peW.net
ドライバとかはサブシスは普通に書いてるぽい、コアな部分はメンテナがパニクルのでやっぱCかと

80
デフォルトの名無しさん[sage]   投稿日:2016/12/01 11:40:38  ID:OWujHEiH.net
実際ひと目でいいからソース見てみ
一生C++なんか使わねーという主張がにじみ出てるよ

81
デフォルトの名無しさん[sage]   投稿日:2016/12/01 12:49:06  ID:yfw1GD74.net
C++使わなくていいならそれに越したことはないからね

82
デフォルトの名無しさん[sage]   投稿日:2016/12/01 13:16:49  ID:VWu2OAFy.net
c++は個人差が大きすぎるようです。議論も出来ない。
方向がコンフリクトしたら大変なのは ここ見てればわかる。

83
デフォルトの名無しさん[sage]   投稿日:2016/12/03 01:01:12  ID:62YFpmrs.net
C++はマングリングとかややこしいから

84
デフォルトの名無しさん[sage]   投稿日:2016/12/03 20:56:34  ID:nmEGc+VH.net
健全でない言葉が含まれているため表示しません 内容を確認する

85
デフォルトの名無しさん[sage]   投稿日:2016/12/11 20:30:30  ID:CL+E9lTu.net
C++初学者です。

既存のCのライブラリに次のような関数が有るんだけど
bool SendData(uint32_t * txData, uint32_t * rxData, uint16_t length);

ラッパーで引数をuint16_tのポインタに変更したもを作りたいと考えています。
bool SendData(uint16_t * txData, uint16_t * rxData, uint_16_t length);

単にラッパーの中でバッファを持って変換してやれば良いとも思ったけど、
組み込み用途なんで速度や消費メモリ的にそれは避けたいです。
newやdeleteは無しでスタックのみを使用できれば、なお良いのですが、
良い方法が思いつきません。

何かスマートな方法は有りませんか?

86
デフォルトの名無しさん[sage]   投稿日:2016/12/11 20:55:16  ID:Cd8ql2jy.net
元関数の length が uint32_t 単位での個数という仮定
→ uint32_t より小さい粒度は取り扱えない
→ uint16_t で取り扱える個数は偶数個に限定される
→ ポインタのキャストと length を /2 で渡すだけ
コメント2件

87
デフォルトの名無しさん[sage]   投稿日:2016/12/11 21:42:00  ID:74mAoGAM.net
uint16_tの方がラッパーなの?
どちらにしろ元の関数をそのまま使うなら変換は必要だね。

スタックが使われるかどうかはしらないけどClangコンパイラなら
可変長配列(VLA)っていうのがC++でも使えたはず。
サイズが大きすぎるとオーバーフローするけど。newと兼用してみるのも手。
コメント1件

88
85[sage]   投稿日:2016/12/12 22:47:53  ID:lLNqHCIY.net
>86
なるほど、
渡すデータを1つ置きにすれば良いわけですね。
渡すデータを組み立てるときにそうすれば良いですし変換のコストは少なそうです。
多少汚いとこが関数外に出ちゃいますが今回のケースでは現実的な方法だと思います。

>87
残念ながら使用しているコンパイラはclangではないですし、
VLAは今回の用途には重そうですね。
便利そうなので、PC用のプログラムを作るときに使えるかもしれません。

ひとまず>86さんの方向で考えてみます。
お二人ともありがとうございました。

89
デフォルトの名無しさん[sage]   投稿日:2016/12/13 07:43:47  ID:vJwCdf+q.net(2)
組み込みでスタックに可変長のデータ領域確保するとか頭大丈夫?
コメント1件

90
デフォルトの名無しさん[sage]   投稿日:2016/12/13 18:19:51  ID:692Oa1tt.net
>89
組み込みのことは知らないんだけど、サイズチェックして分岐するのはどうなん?

if (length * sizeof(uint32_t) < 32767) {
  uint32_t list[length];
  Test(list, length);
}
else {
  uint32_t list = new uint32_t[length];
  Test(list, length);
}
コメント1件

91
デフォルトの名無しさん[sage]   投稿日:2016/12/13 19:22:51  ID:vJwCdf+q.net(2)
>90
どうなのって言われても好きにしろよとしか言えないけど...
個人的には各々のテストも必要になるその手のコードは書かない

92
デフォルトの名無しさん[sage]   投稿日:2016/12/15 21:00:06  ID:iypiqTM3.net
ガチの初心者でプログラミング勉強したいと思ってるんですが
プログラミング勉強するとなるとどんなものから作り始めればいいですかね?
ちなみにCの基本的なこと(if,for文やファイル入出力)くらいしか知りません
コメント2件

93
デフォルトの名無しさん[sage]   投稿日:2016/12/15 22:16:52  ID:esEF0eVo.net
やっぱり画像が出たら楽しいから画像ビューアとかが良いんじゃないかな
画像が動いたらもっと楽しいって言うんならゲームもよいんじゃない?
音関係も楽しいんだが、サウンドプログラミングは結構専門知識がいるうえ
デバッグが難しいから最初は手を出さないほうが良いよ

ま、画像ビューアや動画プレイヤーが楽しいよ
ちょっとした実用性もあるし
コメント1件

94
デフォルトの名無しさん[sage]   投稿日:2016/12/15 22:22:14  ID:KqXo4C+P.net
Cであることに特に意味がないのなら別の言語の検討をすすめる

95
デフォルトの名無しさん[sage]   投稿日:2016/12/16 06:44:53  ID:cbHo8vE5.net
javaも悪くないと思いますよ。

96
デフォルトの名無しさん[sage]   投稿日:2016/12/16 08:53:37  ID:hCzygT3G.net(2)
>92
プログラミングを習得した延長線上に何を作りたいか決まってる?
コメント1件

97
デフォルトの名無しさん[sage]   投稿日:2016/12/16 08:59:07  ID:2kpKp/Uz.net
>92
作りたいプログラム(今ならアプリケーションというのかな)の
イメージが先にないとアドバイスしにくい時代なのよ。

まずコンソールに hello, world を表示して、続いて標準入出力、
ソートやらリンクド・リストやらのアルゴリズムを習得して…
という順序を踏んでも、「マウスをクリックすると何かしてくれる」ような
今様のプログラムには少しも近づかないんだな、これが。
コメント1件

98
デフォルトの名無しさん[sage]   投稿日:2016/12/16 09:22:43  ID:R8KZSjOU.net(3)
>96
ゆくゆくはカメラを使って画像処理的なものをしてみたいと思ってます
具体的にはまだ決まってませんが…
コメント1件

99
デフォルトの名無しさん[sage]   投稿日:2016/12/16 09:23:43  ID:R8KZSjOU.net(3)
>97
なるほど
将来的にやりたいことをしっかり考えたうえで何を学ぶべきか考えたほうがいいんですね!

100
デフォルトの名無しさん[sage]   投稿日:2016/12/16 09:30:19  ID:R8KZSjOU.net(3)
>93
なるほど!
参考になりますm(__)m
コメント1件

101
デフォルトの名無しさん[sage]   投稿日:2016/12/16 09:52:11  ID:hCzygT3G.net(2)
>98
じゃあとりあえずGUIが必要だから
そこらへんからかな?
コメント1件

102
デフォルトの名無しさん[sage]   投稿日:2016/12/16 11:19:48  ID:O1fw7E0o.net
>101
わかりました!
ありがとうございます!

103
デフォルトの名無しさん[sage]   投稿日:2016/12/18 22:40:31  ID:rTzEq7cO.net
c++でGUIな何かを作るときどうやるのが普通?どうやるのがおすすめ?
趣味嗜好全開でいいから教えてくれ
コメント1件

104
デフォルトの名無しさん[sage]   投稿日:2016/12/18 22:46:05  ID:eNcCSvTp.net
ビルド時間とバイナリサイズが気にならないならwxWidgets

105
デフォルトの名無しさん[sage]   投稿日:2016/12/18 22:56:35  ID:TyHJy95g.net
真面目にその条件なら.NETだけどそれなら言語はC#でやった方がよいと思う
自分は自分用のWIN32APIを使ったGUI用のライブラリ作ったけど完全に時代遅れだとは思ってる

106
デフォルトの名無しさん[sage]   投稿日:2016/12/18 23:56:09  ID:psse/iGW.net
wxWidgetsよさそうやね
クロスプラットフォームってのがいい

107
デフォルトの名無しさん[sage]   投稿日:2016/12/19 08:41:19  ID:K+bb4qm0.net
vcを使うという事ですか

108
デフォルトの名無しさん[sage]   投稿日:2016/12/20 08:43:24  ID:/4ZK922w.net
>103
ターゲットのOSとかPC/ケータイとかライセンスとか軽さとか見比べて
GUIフレームワークを選ぶ

Qt は重いけどマルチプラットフォームかつ見た目がいいから人気
Windowsのみなら C# が迷わなくて済むけどね
時代遅れを気にしないなら VC+MFC の情報は多いw
他にもいろいろある

109
デフォルトの名無しさん[]   投稿日:2016/12/24 19:03:48  ID:Xnn//JuE.net(3)
FILE *fp;をグローバル変数にしてたら落ちまくって、ローカル変数にしたら落ちなくなった現象は何でですかね?
グローバルかローカルか関係ない気がするんですけど。
Windows7、Visual Studio 2015
コメント1件

110
デフォルトの名無しさん[]   投稿日:2016/12/24 19:04:08  ID:Xnn//JuE.net(3)
これで4時間近くハマった。

111
デフォルトの名無しさん[sage]   投稿日:2016/12/24 19:11:41  ID:0UyY/BKM.net
グローバルな FILE *fp の近く(若いアドレス)に置かれた
グローバルな配列の範囲オーバーじゃないかしら。
コメント3件

112
デフォルトの名無しさん[sage]   投稿日:2016/12/24 20:06:31  ID:TihFoldF.net
>109
ファイルの開くのから閉じるのまでが一関数に収まってて、他から呼び出してないなら関係ないと思うけど
閉じ忘れとか?

113
デフォルトの名無しさん[sage]   投稿日:2016/12/24 20:27:17  ID:DNE92dFu.net
fileno とか ferror は確認した?

114
デフォルトの名無しさん[sage]   投稿日:2016/12/24 20:34:23  ID:y7L7nGQ6.net
fp をグローバルにおいたソースで 別のローカル変数をグローバルに置いたら
その変数で副作用起こすんじゃね?

(>111 と同じく範囲突破しての書き込みを疑ってる)

115
デフォルトの名無しさん[sage]   投稿日:2016/12/24 21:00:46  ID:yr6q9nVG.net
fpがどんな値になろうと最悪でもエラー検出するだけだから
落ちるのはまともにエラー判定してないせい

116
109[sage]   投稿日:2016/12/24 21:14:49  ID:Xnn//JuE.net(3)
>111-115
ありがとうございます。

>111さんのおっしゃる通り、メモリの問題でした。
fopenからfreadの間で、
読み込みバッファをmallocで確保してmemsetでゼロクリアしている部分があり、
このクリアするサイズが確保したサイズを上回っていました。
なので、fopen直後のエラーチェックでも問題が起きてないのに落ちていたようです。

//私も一度はこれを疑って確認したんですけどね。
//レスもらってから改めて確認したらこのような状況になってました。

根本的な解決ができて良かったです。

117
デフォルトの名無しさん[sage]   投稿日:2016/12/25 01:18:26  ID:vsDUBYtf.net
気付くだけ立派だわなぁ

118
デフォルトの名無しさん[sage]   投稿日:2016/12/25 07:00:04  ID:iLmpV78q.net
mallocで確保した領域の溢れがグローバルな変数を壊すってのは
ちょいと解せない気もする。

DOSの頃なら互いに影響しあうことも普通だったろうけど、
最近のOSだと別に管理してそう。
内部の詳しいことは知らないけど。
コメント1件

119
デフォルトの名無しさん[sage]   投稿日:2016/12/25 09:26:05  ID:SibbJTGE.net
>118
お前はもう少し勉強してから書き込むべき

120
デフォルトの名無しさん[sage]   投稿日:2016/12/25 09:43:40  ID:CGvp0k11.net
エミュとかアドレスを固定してるけどどうやってんの?
コメント1件

121
デフォルトの名無しさん[]   投稿日:2016/12/25 16:56:04  ID:xlX3oF2t.net(2)
質問です
エラーになってしまいます
教えて下さい
C++11です

int n=0;
string hage="s"+n+".png";
コメント1件

122
デフォルトの名無しさん[sage]   投稿日:2016/12/25 17:03:23  ID:YVZO5C9V.net
"s"と".png"はconst char*型なので+は無理

123
デフォルトの名無しさん[]   投稿日:2016/12/25 17:09:24  ID:xlX3oF2t.net(2)
そうなんですか…
ありがとうございました

124
デフォルトの名無しさん[sage]   投稿日:2016/12/25 22:48:16  ID:oxH1mE2q.net
>120
最初に、すべてのアドレス分のメモリを確保すれば?

その先頭アドレスを、エミュレータの先頭アドレス・0 にすればいい
コメント2件

125
デフォルトの名無しさん[sage]   投稿日:2016/12/26 01:40:19  ID:Us2MOZON.net
>121
標準で用意されているのはstringとstring/char/char*間のみ(operator+)
なので+するのをintでなくstringにすればいける
C++11ならto_stringがあるから次ので問題ない
string hage = "s" + to_string(n) + ".png";

細かい書式設定とかしたいならsstreamかsnprintfあたりで
コメント1件

126
デフォルトの名無しさん[sage]   投稿日:2016/12/26 08:42:54  ID:w1n6Bp69.net
>124
それじゃ起動毎に変わるんじゃね?

127
デフォルトの名無しさん[sage]   投稿日:2016/12/26 09:21:17  ID:5lDUjv3x.net
起動毎にホスト上でのメモリ配置が変わっても
エミュレータの駆動機構で >124 のように
エミュレーションする対象の仮想コードのアドレッシング → ホスト環境の実メモリ
の変換テーブル経由なら問題は発生しないべ
コメント1件

128
デフォルトの名無しさん[sage]   投稿日:2016/12/26 12:36:41  ID:bq11e3Cp.net
>125
ありがとうございます!
あとでやってみます

129
デフォルトの名無しさん[sage]   投稿日:2016/12/26 16:52:23  ID:vHVIx8+p.net
ASLRのことなら、無効にする事が出来る

130
デフォルトの名無しさん[]   投稿日:2016/12/27 00:09:30  ID:hMHSnQwo.net
>127を分かりやすく言うと配列みたいなもんだ。
int foo[5];
と宣言すれば、起動毎に確保されるアドレスは違うが、
例えば3番目のアドレスには必ず&foo[3]でアクセスできる。
これと同じ。

131
デフォルトの名無しさん[]   投稿日:2016/12/28 09:29:29  ID:jHXCJg+4.net
OggVorbisの使い方を教えてください。
動的リンクライブラリとしてリンクして、
WAVEデータをリアルタイムでOggVorbis形式(CBR)に変換したいです。
VS2015です。
一応ググりましたがどこから手を付けてよいか分かりませんでした。

132
デフォルトの名無しさん[sage]   投稿日:2016/12/28 11:23:40  ID:BmYU7N0Q.net
https://xiph.org/doc/
ここから必要な文書を探して読んで理解するのが本筋

133
デフォルトの名無しさん[sage]   投稿日:2016/12/31 16:11:48  ID:8v6iajLL.net(2)
ある本の解答例ですが実行すると先頭文字が消えます。これではダメなんでしょうか?
void str_toupper(char *str)
{
while (*str)
*str++ = toupper(*str);
}
コメント2件

134
デフォルトの名無しさん[sage]   投稿日:2016/12/31 16:20:34  ID:ADMXNhyN.net(2)
*str++ = toupper(*str);

これ鼻から悪魔コード
インクリメント演算子で操作された変数が副作用完了点までに複数回参照するのは動作未定義

*str = toupper(*str);
str++;
と分離しないとまずい
コメント2件

135
デフォルトの名無しさん[sage]   投稿日:2016/12/31 17:17:13  ID:Z7Smo6OK.net
*str++ = toupper(*str); でダメなら
*str = toupper(*str++); で動くんじゃない?

……って真に受けるなよ。別の悪魔が出てくるだけだからな。
たとえ期待通りの動作になったとしても、たまたまだからな。
コメント1件

136
デフォルトの名無しさん[sage]   投稿日:2016/12/31 17:24:22  ID:xodGK7fu.net
ポインタを直接インクリメントするのはどうにも性に合わん

137
デフォルトの名無しさん[sage]   投稿日:2016/12/31 17:38:17  ID:nERH8viD.net
通る道なのでやさしくね

138
デフォルトの名無しさん[sage]   投稿日:2016/12/31 18:30:26  ID:K1FrsN4c.net
>133
その本がダメなコードの例としてそれを挙げてるならいいけど、正解としてそれを書いてるのなら、著者の能力とか校正の正確さとか不安になる。
コメント1件

139
133[sage]   投稿日:2016/12/31 19:18:21  ID:8v6iajLL.net(2)
>138
正解例です
>135
下でダメだったので正解を見たら上になってて、そうかとそうかと思ったのですが…
>134
ありがとうございます
初心者なので更に勉強してみます
コメント1件

140
デフォルトの名無しさん[sage]   投稿日:2016/12/31 20:02:29  ID:RP5GqFRc.net
本の題名晒してもいいと思う...

141
デフォルトの名無しさん[sage]   投稿日:2016/12/31 20:11:53  ID:ADMXNhyN.net(2)
古かったとして、古い規格だとしても処理系依存
(こっちのコンパイラはこうなるけど、あっちのコンパイラでは別の結果になるよ) なので、
正解コードとするのはよろしくない

142
デフォルトの名無しさん[sage]   投稿日:2016/12/31 20:17:55  ID:q3l2oU5w.net
なぜダメなのか何がダメなのか理解しとかないと

143
デフォルトの名無しさん[sage]   投稿日:2017/01/01 01:32:25  ID:LgRst/uw.net(2)
>139
まじすか ちょっとひどいですね。 著者が知りたいです。

144
デフォルトの名無しさん[sage]   投稿日:2017/01/01 12:42:18  ID:/LG195GI.net
str_toupperでググると正しいコードはあるけど >133 は見つからないなあ。結局なんて本?

145
133[sage]   投稿日:2017/01/01 14:53:59  ID:OFpbxODd.net
解きながら学ぶC言語(2006年第5刷)ですが、新版見てみたら >134 のように修正されてました

146
デフォルトの名無しさん[sage]   投稿日:2017/01/01 17:19:11  ID:LgRst/uw.net(2)
望洋先生すか あちゃー

147
デフォルトの名無しさん[sage]   投稿日:2017/01/04 01:18:25  ID:frbRBuKj.net
副作用完了点が2つ以上あると鼻から悪魔
コメント5件

148
デフォルトの名無しさん[sage]   投稿日:2017/01/04 01:40:21  ID:8dyTsCQL.net(3)
んなこたーない

149
1/2[]   投稿日:2017/01/04 02:39:58  ID:9INFfbdp.net(3)
このサイトを参考にコードを書いているのですが、レスポンス中に無反応になります。
助けてください。

http://qiita.com/edo_m18/items/41770cba5c166f276a83

このコードとの差異は以下の通りです。
----------------------------------------------------------
read_size = SSL_read(ssl, buf, buf_size);の前に
memset( buf, 0, buf_size );を挿入

write(1, buf, read_size);を
printf("%s",buf);に変更

close(sock);の後に
printf("OK.\n");を挿入

拡張子をcppとし、C++としてコンパイル。
----------------------------------------------------------

この変更したコードのprintf("%s",buf);で不具合が生じます。
不具合パターンは以下の2通りです。
・ 恐らく受信したHTMLの最終部分と思われる</body></html>を出力後、2行ほどの空行、そして0という数字が出力された後、無反応になる。
・ レスポンスヘッダやHTMLコードの途中で無反応になる。
無反応時にはEnterキーもCtrl+Cも効きません。
しばらくすると、効くようになります。
但し、printf("OK.\n");によるOKが出力されませんので、異常終了している可能性が高いです。
コメント1件

150
2/2[]   投稿日:2017/01/04 02:40:11  ID:9INFfbdp.net(3)
環境は以下の通りです。
OS: CentOS 6.4
コンパイラ: GCC 4.4.7
接続先: https://www.youtube.com/

その他、無反応中にnetstat -tanpコマンドで確認すると、
このアプリケーションはESTABLISHEDとなっています。
また、自宅サーバーのHTTPSのサイトへアクセスした場合、HTMLの最後のほうの</body>が出力された後に数秒の間があり、
その後、</html>が出力されて正常に終了します。
この数秒の間も気になります。

よろしくお願いします。

151
デフォルトの名無しさん[sage]   投稿日:2017/01/04 03:14:24  ID:sO2gccKh.net
>149
> printf("%s",buf);に変更

%sは文字列のアドレスを引数として受けてそれを出力する
C言語で文字列とはNUL終端されたバイト列だが
SSL_readは文字列ではなく只のバイト列を扱うからNUL終端なんてしていない
そのために受信した文字列以上のおそらくbufの領域を越えて偶然にゼロに
出くわすまでprintfが出力しているんだろう

付け加えると、サーバーから送られてくるバイト列中にゼロが含まれていると
文字列として扱おうとしたprintfはそこまでで終わりと見做してしまう
例えば2ちゃんはたまにそんなHTMLを返してくることがあっていい加減な作りの
自作アプリなんかが途中までしか表示しないとかいう不具合を出す
コメント1件

152
149[sage]   投稿日:2017/01/04 03:47:33  ID:9INFfbdp.net(3)
>151
ありがとうございます。
初歩的なミスでお恥ずかしい。
バイナリデータとしてファイルに出力したところ正常に動作しました。(ファイルの内容にも問題ありませんでした)
恐らくマルチバイト文字の途中か何かで切れていたのでしょう。

153
デフォルトの名無しさん[sage]   投稿日:2017/01/04 08:50:07  ID:hKIlPOcN.net
マルチバイトなんか関係ない
> write(1, buf, read_size);を
> printf("%s",buf);に変更
すんなって事だよアホウ


154
デフォルトの名無しさん[sage]   投稿日:2017/01/04 09:47:31  ID:87+T0pXS.net
もしくは1.1sだな

155
デフォルトの名無しさん[sage]   投稿日:2017/01/04 09:53:13  ID:dvUWMEVx.net(3)
printf("%.*s", read_size, buf);  なら少しだけ
それでも read_size に至る途中に \0 あったら駄目だし
標準出力に送りたいんなら fwrite(buf, read_size, 1, stdout); こうなるかな

156
デフォルトの名無しさん[sage]   投稿日:2017/01/04 09:54:39  ID:dvUWMEVx.net(3)
元質問みてなかった わーすーれーてー

157
デフォルトの名無しさん[sage]   投稿日:2017/01/04 12:32:23  ID:xue+qv3N.net(2)
「んなこたーない」
っていつも書き込みする人がいるけど
もっと具体的な回答してほしい。

「んなこたーない」って答えるくらいだから何かしらの反論や回答持ってるんだろうけど
もっと具体的に言ってくれなきゃ分からない。
コメント3件

158
デフォルトの名無しさん[sage]   投稿日:2017/01/04 12:37:37  ID:FLMu+DIB.net
そういうのはとりあえず否定したいだけだからスルーでいいよ
回答なんか持って無いと思うし
コメント1件

159
デフォルトの名無しさん[sage]   投稿日:2017/01/04 13:56:51  ID:x5I82FL9.net
0x00がないと、どこまでもぉ って事だけで。

160
デフォルトの名無しさん[sage]   投稿日:2017/01/04 15:05:14  ID:CkccjIZ7.net
俺はとりあえずこんなのを提案する()


do {

memset( buf, 0, buf_size );
read_size = SSL_read(ssl, buf, buf_size-1);
printf("%s",buf);

} while(read_size > 0);



do {

memset( buf, 0, buf_size );
read_size = SSL_read(ssl, buf, buf_size);

for(int i=0; i < read_size; ++i){ printf("%c",buf[i]); }

} while(read_size > 0);

161
148[sage]   投稿日:2017/01/04 15:11:07  ID:8dyTsCQL.net(3)
>157
さすがにこれは説明要らんだろうと思うよ・・・。

「副作用完了点が2つ以上」って、 str++; str++; こんなのでアウトってことだからね。

162
デフォルトの名無しさん[sage]   投稿日:2017/01/04 17:51:37  ID:ku1IYB1y.net
んなこたーない

163
デフォルトの名無しさん[sage]   投稿日:2017/01/04 18:08:39  ID:issqqmbF.net
do while()って嫌いだから使わん

164
デフォルトの名無しさん[sage]   投稿日:2017/01/04 18:10:34  ID:dvUWMEVx.net(3)
マクロのおまじないでも?

#define FOO() do { あーだこーだ } while(0)

165
デフォルトの名無しさん[]   投稿日:2017/01/04 18:15:56  ID:pxTed+R/.net(2)
>147
言いたいことはわかる気がするが、その文面は明らかに間違っているでしょ。

エスパーすると、
「副作用完了点と副作用完了点の間で、同一の変数を複数回変更する」
と、鼻から悪魔、かな?

166
デフォルトの名無しさん[]   投稿日:2017/01/04 18:17:44  ID:pxTed+R/.net(2)
まだ甘いか。
「ある副作用完了点と、次の副作用完了点の間で、同一の変数を複数回変更する」
かな?

167
片山博文MZ ◆T6xkBnTXz7B0 [sage]   投稿日:2017/01/04 18:21:17  ID:83LRywdJ.net
gotoで地獄へ行くのをdo/break/whileに書き換えることができる。
...
goto hell;
...
goto hell;
...
hell: ...
return 0;
↓↓↓
do {
...
break;
...
break;
...
} while (0);
...
return 0;

168
デフォルトの名無しさん[sage]   投稿日:2017/01/04 19:49:00  ID:wOLmnoYC.net
>157
人としての最低限の知能を持ち合わせて調べ直せば本人なら気付くレベルの時しか言っていないのでいつも本人からの訂正レスを待っているのだが、
何故か絶対に自分の発言を撤回したがらないようだ

169
デフォルトの名無しさん[sage]   投稿日:2017/01/04 21:37:54  ID:lUhJzh+Z.net
言われた方は言われた方で同じこと思ってるんだろ。だから具体的に指摘しなきゃ話が進まない。

170
デフォルトの名無しさん[sage]   投稿日:2017/01/04 22:12:54  ID:zg5YylVI.net
ピンポイントで間違い指摘されてんだから自分こそ根拠を述べろよ。
「副作用完了点が2つ以上」なんてどこにもねーんだから。
わかないよ〜ホレホレって荒らしたいだけ?

171
デフォルトの名無しさん[sage]   投稿日:2017/01/04 22:45:56  ID:by3GIgBn.net
>157
さすがに >147-148 だと >147 の方に説明責任があると思う

172
デフォルトの名無しさん[sage]   投稿日:2017/01/04 23:27:27  ID:6PKdRVzk.net
MISRA-C研究会が書いている、MISRA-C 2004(C90) の本をみっちり、勉強しろ!

研究会のメンバーでさえ、規格に詳しい人がいないのだから、
日本人では、規格に詳しい人はいない

トヨタでも、MISRA-Cの遵守率が5%しかない。
こういう素人が作る、医療機関・産業機械は怖くて使えない。
アプリのバグで、すぐに人が死ぬ

コンパイラを作る方も、あやふやな解釈をしているから、
紛らわしい書き方を避けて、かなり安全に、コーディングしないと危険

極端に言えば、1文1文、分離して書くこと。
バグが多く出る箇所は主に、マクロ・複合文・型違いの3つ
コメント1件

173
デフォルトの名無しさん[sage]   投稿日:2017/01/04 23:45:39  ID:xue+qv3N.net(2)
> 勘違いしてないか?
とか
> 日本語おかしくないか?
とか言ってあげれば>147も自分の間違いに気づけたんじゃないかなって思う。
コメント2件

174
デフォルトの名無しさん[sage]   投稿日:2017/01/04 23:48:11  ID:NgyPecWp.net
お前らちょっと温泉でも行ってこい

175
デフォルトの名無しさん[sage]   投稿日:2017/01/04 23:48:33  ID:8dyTsCQL.net(3)
>173 ちっとも具体的じゃないが、それでいいの?正直なにが違うのかわからん。
(日本語としてはまったく問題ないしな。)
コメント1件

176
デフォルトの名無しさん[sage]   投稿日:2017/01/05 00:16:26  ID:kU82p3Tw.net
> >147
> 副作用完了点が二つ以上存在すること自体は問題ないだろ。
> 複数の副作用完了点で同じ変数を変更、参照するんのが問題なんだよ。
> 安易な気持ちで書き込みすんな。一生ROMってろ。

ネラーならこれくらい言えないとな。

>175
「んなこたーない」だけだと単に否定したいだけの書き込みみたいで、荒らしなのか普通の指摘なのか曖昧。
>158みたいに受け取る人もいるし。
>173は具体的じゃないけどまだましなほうでしょ。

177
デフォルトの名無しさん[sage]   投稿日:2017/01/05 07:15:07  ID:Tn1lGUp3.net(2)
副作用完了点が2つ以上あると鼻から悪魔
 ↓
× んなこたーない
○ 勘違いしてないか?

理由:「んなこたーない」だけだと単に否定したいだけの書き込みみたいで、荒らしなのか普通の指摘なのか曖昧

178
デフォルトの名無しさん[sage]   投稿日:2017/01/05 07:20:28  ID:IruuUmgl.net
一応技術板なので「んなこたーない」って言われたら鼻から悪魔の例を出せばすむ話
まあ例を考えてる時に自分の間違いに気づくと思うが...

179
デフォルトの名無しさん[sage]   投稿日:2017/01/05 07:35:58  ID:Tn1lGUp3.net(2)
嵐かどうかは別として間違いの指摘かどうか曖昧でわからない奴はヤバい

180
デフォルトの名無しさん[sage]   投稿日:2017/01/05 09:10:38  ID:yWb7mDiI.net(4)
if (*str++ && *str++ && *str++)
&& と if の条件式の終わりは副作用完了点だけど問題を起こすコードではない
※ 役にたつコードかはしらんw

181
デフォルトの名無しさん[sage]   投稿日:2017/01/05 11:34:50  ID:nSwRuxqn.net(3)
大学の授業で、client.cというファイルとserver.cのファイルを渡されて
このプログラムを解析して、何でも良いから通信するプログラムを作れと言われたんですが
何をやればいいのかさっぱりです。
サーバとクライアントでファイルが2つに分かれてるってことは
プログラミングのテストをするにも2台PCを持ってないとできないってことでしょうか
何でもいいのでアドバイスください。。。
コメント2件

182
デフォルトの名無しさん[sage]   投稿日:2017/01/05 11:37:47  ID:Xc98514b.net
>181
PC 1台でも出来ます
コメント1件

183
デフォルトの名無しさん[sage]   投稿日:2017/01/05 11:44:42  ID:yWb7mDiI.net(4)
server のプログラムを実行しておいて
接続先を 127.0.0.1 (または localhost) にした client のプログラムを実行すれば桶

後は実行OSの事情次第(FWの警告をスルーする等)

184
デフォルトの名無しさん[sage]   投稿日:2017/01/05 11:51:25  ID:33EuaIzL.net
>181
client.exe server.exe生成
→server.exeを起動し通信待機
→client.exeを起動し通信開始
でいいよ

185
デフォルトの名無しさん[]   投稿日:2017/01/05 11:55:16  ID:nSwRuxqn.net(3)
>182-184
親切にありがとうございます。
Linux環境でプログラムしているのですが
server.cをコンパイル&実行すると待機中のせいか何なのかわからないのですが
コンソール上で他のコマンドが打てなくなってしまうので2台PCが必要なのかと迷っていたのですが、1台でもできるのですね。
どうやったら待機中でもclientのコンパイル済みファイルを実行することができるのでしょうか。。
コメント2件

186
デフォルトの名無しさん[sage]   投稿日:2017/01/05 12:00:04  ID:CkAWate/.net
んなこたーない
って前々から他のC++スレでも使われていたけど、
自分からは何も根拠を示さず、ただ周りからの反論を煽りたいだけのレス
みたいな受け取られ方が少なからずされていたように感じるんだけど。

コミュニケーションって難しいな。

187
デフォルトの名無しさん[sage]   投稿日:2017/01/05 12:06:51  ID:yWb7mDiI.net(4)
>185
bash だったら
末尾に & つけて呼び出すとバックグランドで実行するみたいよー
# server [enter]
 : 待機中でだんまりさんw

# server & [enter]
 : すぐ次の入力待ちになる server は裏で実行中
#
コメント1件

188
デフォルトの名無しさん[sage]   投稿日:2017/01/05 12:25:39  ID:nSwRuxqn.net(3)
>187
できました!
ありがとうございます助かりました

189
デフォルトの名無しさん[sage]   投稿日:2017/01/05 13:10:33  ID:Goea0txf.net
nohup をつけるともっと幸せになれるよ

nohup server &

190
デフォルトの名無しさん[]   投稿日:2017/01/05 13:26:13  ID:NumGywN/.net
馬鹿がnohupなんか付けたらいつまでもプロセス残るだろ
不完全なサーバーアプリケーションのプロセスをいつまでも残すということは
セキュリティ的に問題外

191
デフォルトの名無しさん[]   投稿日:2017/01/05 14:20:26  ID:wksprrkU.net
0xFFFFFFの変数がif(n > 0)で真になるんだがなんだコレ?
クソムカツクな死ねよ
コメント2件

192
デフォルトの名無しさん[sage]   投稿日:2017/01/05 14:25:53  ID:yWb7mDiI.net(4)
64bit (2の補数の)符号付で 00FF FFFF は正なんだけど
48bit の符号付整数での比較を望んでいるんだろうか?

193
デフォルトの名無しさん[sage]   投稿日:2017/01/05 15:39:10  ID:60LIuvs1.net
48bitでも32bitでも正ですが

194
デフォルトの名無しさん[sage]   投稿日:2017/01/05 17:24:14  ID:5KDyH/yc.net
>191
何だこれと言われても言語仕様としか言いようがない
auto n = 0xFFFFFF;
if (n>0)//必ず真

195
デフォルトの名無しさん[sage]   投稿日:2017/01/05 18:52:01  ID:sOp8JEWl.net
逆になぜ偽になると思ったのかが知りたいな。

196
デフォルトの名無しさん[sage]   投稿日:2017/01/05 18:58:22  ID:25Qby3+x.net
auto n = 0xFFFFFF;
*reinterpret_cast<int*>(&n) > 0
コメント1件

197
デフォルトの名無しさん[sage]   投稿日:2017/01/05 19:26:42  ID:ivHnG5Le.net
int が 24bit ってダメなんだっけ?

198
デフォルトの名無しさん[sage]   投稿日:2017/01/05 19:41:33  ID:/zQeSTVL.net
あー あほしたー bit数を数え間違ってるし

199
デフォルトの名無しさん[sage]   投稿日:2017/01/05 21:38:57  ID:AK28m3f5.net
>196のオツムのレベルは>191と同等

200
デフォルトの名無しさん[sage]   投稿日:2017/01/05 23:28:47  ID:sjDvcQUe.net
>185
別の端末・別の仮想デスクトップなどを、起動すればいい

201
デフォルトの名無しさん[]   投稿日:2017/01/08 01:15:08  ID:+QuxnNhY.net(2)
■ 質問概要
ファイルに書き込んでも反映されない。

■ 環境
CentOS 6.4
GCC 4.4.7

■ 質問詳細
fopenに"r+"を指定して開いたファイルに、fputsでテキストデータを書き込んでも反映されません。
fcloseしていないことが、恐らく原因だと思います。
このアプリケーションは起動時にfopenでファイルを開いて常駐し、
アプリケーション終了時にfcloseするように開発しており、fcloseすると反映されます。
常駐型のアプリケーションで逐次ログ出力するため、
書き込むたびにファイルを開いたり閉じたりしないようにしています。
fcloseしなくても読み取りだけはできるようにしたいのです。
Apacheの挙動を見ると、ログファイルがこうした動作になっているようです。
(Apacheのソースは読んでいません、ログファイルを操作しようとした際の挙動などからによる推測です)
どうすればいいでしょうか。

調べたところ、fflushで希望の動作ができそうですが、
使い慣れてないものを使うのは副作用が怖く、
また、説明に「強制的」等の文言があるため、この文言があるだけでも非常に不安です。
こうした目的でfflushを利用しても問題ないのでしょうか。
そもそもfflushでいいのでしょうか。
https://linuxjm.osdn.jp/html/LDP_man-pages/man3/fflush.3.html
コメント1件

202
デフォルトの名無しさん[sage]   投稿日:2017/01/08 01:21:15  ID:Zdr2NPEX.net
大丈夫だから使え
コメント1件

203
デフォルトの名無しさん[sage]   投稿日:2017/01/08 01:24:31  ID:T3Q1+h8z.net
flushは時間がかかるから頻度が高い場合は気をつけて。

204
201[sage]   投稿日:2017/01/08 01:54:37  ID:+QuxnNhY.net(2)
>202-203
ありがとうございます。
時間がかかるんですね。
では、頻度が高い場合はfputsの度ではなく、
一定時間おきにfflushするように実装したいと思います。

205
デフォルトの名無しさん[]   投稿日:2017/01/08 03:35:33  ID:eh6WgorM.net(2)
A = (framecount / 10) % 4

すみません、上記の式の意味を教えてください。
毎度、Aに入る値がしりたいです。

206
デフォルトの名無しさん[sage]   投稿日:2017/01/08 03:39:14  ID:Nqw0FnK6.net
(framecount を 10 で割って) それの 4で割った余り 0〜3 の値になる

framecount
0〜 9 → 0
10〜19 → 1
20〜29 → 2
30〜39 → 3
40〜49 → 0
50〜59 → 1
:
コメント1件

207
デフォルトの名無しさん[]   投稿日:2017/01/08 03:43:39  ID:eh6WgorM.net(2)
>206
こんな深夜に即レス、感謝
ありがとうございます!

208
デフォルトの名無しさん[sage]   投稿日:2017/01/08 04:24:28  ID:c5pY166L.net(2)
>201-204
普通は、ファイルを閉じる際、自動的にflushされる

それに何もしなくても、OSのデフォルト設定で、
dirty Page Cache を、5秒ごとにflushして、メモリとディスクを同じ状態に保つ

USB・SSDの書き込み回数を減らしたい人は、書き込み間隔を15〜30秒に設定している人もいる。
commit=15

Linux I/O のお話 write 編
http://d.hatena.ne.jp/naoya/20070523/1179938637
コメント2件

209
デフォルトの名無しさん[sage]   投稿日:2017/01/08 11:20:03  ID:OpAcES4h.net(3)
char buffer[256];
scanf(%s,buffer);
printf(
コメント1件

210
デフォルトの名無しさん[sage]   投稿日:2017/01/08 11:28:02  ID:OpAcES4h.net(3)
すみません、誤送信してしまいました
質問させてください。

char buffer[256];
scanf(%s,buffer);
printf("finish---_n");
という記述で、文字入力をした後、何回リターンキーを押しても
finishが表示されない、つまりscanfが終了しないような状態になっているのですが
何か特別な条件でscanfが終了しないことってあるものなのでしょうか?
ちなみに、コードのscanfの行だけコメントアウトすると普通にfinishが表示される状態です。
あと、新規で.cファイルを作って短いコードにしてコンパイルしても問題なく動いてくれています。
コメント1件

211
デフォルトの名無しさん[sage]   投稿日:2017/01/08 11:43:58  ID:nyR751xv.net(5)
>210
問題が再現できる最少コード書いてみて
コンパイル通るコード
コメント1件

212
デフォルトの名無しさん[sage]   投稿日:2017/01/08 11:52:30  ID:OpAcES4h.net(3)
>211
先日も少し教えてもらったのでまた聞きに来てるのが恥ずかしいのあ
ですが、サーバとクライアントでの通信のプログラムです。

server.c
http://codepad.org/epmTQJ0
client.c
http://codepad.org/uhR4zEL3

gcc -o s server.c
gcc -o c client.c
./s&
./c
で実行しています。
サーバ側のscanfで止まってしまうみたいなのですが
サーバ側のscanfをコメントアウトすると通るみたいです。

213
デフォルトの名無しさん[sage]   投稿日:2017/01/08 12:07:20  ID:nyR751xv.net(5)
server側がnot foundだわ
リンク確認してみて
コメント1件

214
デフォルトの名無しさん[sage]   投稿日:2017/01/08 12:15:37  ID:9g4d0om9.net
>213
アップし直しました
http://codepad.org/ye5GDqp8
確認不足ですみません;;

215
デフォルトの名無しさん[sage]   投稿日:2017/01/08 12:35:39  ID:nyR751xv.net(5)
Wait for Connection...Connected.
s1---------
C->S: %s
Server:

実行結果はここで止まって
s2---------
まで進まないって事?
コメント1件

216
デフォルトの名無しさん[sage]   投稿日:2017/01/08 12:38:46  ID:Cjw+tP2S.net
>215
そうですね
Serverの後にscanfがあるので入力してみると

Server: uuu
aaaaa
iiii
uuu

とかになって、Enterキーを打っても次に進んでくれません

217
デフォルトの名無しさん[sage]   投稿日:2017/01/08 13:15:24  ID:nyR751xv.net(5)
送受信で変数を別々にしてみて
scanf -> sendはbuffer1
recv -> printfはbuffer2
みたいに

38, 39 40行目にブレークポイント置いてやってみて
コメント1件

218
デフォルトの名無しさん[sage]   投稿日:2017/01/08 13:46:50  ID:uGSXn6++.net(2)
サーバをフォアグラウンドにしてから入力すればいいだけな気がする。
いったんCtrl-zでクライアントを停止して「bg」でバックグラウンドで再開、
「jobs」でサーバのジョブIDを調べて「fg %[ジョブID]」してから入力すれば、
反応するんじゃないかな。
コメント1件

219
デフォルトの名無しさん[sage]   投稿日:2017/01/08 15:47:42  ID:/TmTqYIS.net
>217
ありがとうございます
やってみましたがどうもうまくいかなさそうです
>218
ありがとうございます。
いちおうやってみたのですが、ぼくがりしょしんしゃすぎてこうどなれすすぎてりかいできません(^q^)
バックグラウンドとフォアグラウンドの使い分けが良く分からないです。

手順を整理すると、
1. サーバをバックグラウンドで開始
2. クライアントをフォアグラウンドで開始
3. クライアントを停止
4. クライントをバックグラウンドで再開
5. サーバをフォアグラウンドで開始
6. クライントをフォアグラウンドで開始
ということでしょうか???頭がパーン!!
コメント1件

220
デフォルトの名無しさん[sage]   投稿日:2017/01/08 16:06:06  ID:nyR751xv.net(5)
>219
ブレークポイントが39で止まる
→続行して入力しても40のブレークポイントに来ない
こんな状況なの?
コメント1件

221
デフォルトの名無しさん[sage]   投稿日:2017/01/08 16:09:35  ID:uGSXn6++.net(2)
難しいようなら、&で起動するのはやめて、ターミナルを二つ起動して
片方でサーバを、もう片方でクライアントを実行するほうが楽だと思う。
コメント1件

222
デフォルトの名無しさん[sage]   投稿日:2017/01/08 16:24:16  ID:7aUjJ3jB.net
同意

223
デフォルトの名無しさん[sage]   投稿日:2017/01/08 17:02:49  ID:C9GVPqMv.net
>208
それレイヤーが違う話だよ

224
デフォルトの名無しさん[sage]   投稿日:2017/01/08 17:48:30  ID:bwuU6ymI.net
質問者の提示したURLに書かれている注意事項すら読まない奴を相手にレスするとは

225
デフォルトの名無しさん[sage]   投稿日:2017/01/08 19:21:35  ID:d7tAym4Y.net
>220
そんな感じでした
>221-222
ターミナル2つ起動したら簡単にできました。。
ターミナルって2つ開いて操作したりするものだったんですね
Linux初心者すぎて分かってませんでした
助かりましたありがとうございます

226
デフォルトの名無しさん[sage]   投稿日:2017/01/08 22:54:37  ID:c5pY166L.net(2)
端末も複数、起動できる

仮想デスクトップを知っているか?
デスクトップも、複数起動できる

普通、C/S通信プログラムでは、2つ端末を起動する

>209-210
2chのバグだろう

書き込み確認画面が出る際、" を使うと、そこで文字列の終了とみなされる。
" の代わりに、\" とエスケープすれば、どうだろう?

それか、書き込み確認画面が出たら、1度キャンセルすれば、確認画面は出ないようになった
コメント1件

227
デフォルトの名無しさん[sage]   投稿日:2017/01/11 13:06:08  ID:X1FDgEas.net
>208といい>226といい、わざと嘘を書いてるのか?

228
デフォルトの名無しさん[]   投稿日:2017/01/12 04:36:13  ID:8CizHZGj.net
MSVCはいつまで__cplusplusの定義199711Lのままなんだ

229
デフォルトの名無しさん[sage]   投稿日:2017/01/12 07:09:10  ID:edOk7o4H.net
変えると暴動が起きるこら変えない
とライブラリ開発者のSTL氏が言っていた

230
デフォルトの名無しさん[sage]   投稿日:2017/01/12 12:09:34  ID:xegpw56Z.net
1だと思ってた

231
デフォルトの名無しさん[sage]   投稿日:2017/01/15 00:31:14  ID:7/DzGkQz.net(2)
別ファイルで作成した関数を使用するときは、そのヘッダーファイルの
インクルードだけでなくプロトタイプ宣言も必要ですか?
インクルードだけでもコンパイルは通るし実行も出来るのですが、
そういう警告が出てくるので気になりました

232
デフォルトの名無しさん[sage]   投稿日:2017/01/15 00:34:44  ID:H7ag5TAh.net
警告文をコピペしてくれると話が早いような

233
デフォルトの名無しさん[sage]   投稿日:2017/01/15 00:51:14  ID:e3PYrJk6.net
そのヘッダーファイルの中でプロトタイプ宣言はされているんじゃないのか
警告の原因は別のことだろ

234
デフォルトの名無しさん[sage]   投稿日:2017/01/15 01:02:35  ID:7/DzGkQz.net(2)
インクルードするファイルを間違えてたみたいです
お騒がせしました

235
デフォルトの名無しさん[sage]   投稿日:2017/01/19 22:46:56  ID:knltoro2.net
新しくクラスとそれに関連した処理などを実装するとき
ヘッダー側でクラスの定義、ソースファイル側にクラス内のメンバ関数の実装部などを書きますよね
その時メンバ関数はどんな場合でもヘッダー側に書かずにソース側に書くものですか? たとえば

//ヘッダー側です
class A{
private:
 int num;
public:
 int ReturnNum(void){
  return num;
 }
};

処理はたった一行ですけどこの場合もint ReturnNum()の実装部はソースファイル側にint A::ReturnNum()のように移すべきですか?
ネット上のプログラムをいくつか見てみたらこのようにメンバ変数をただ返すだけの処理ならヘッダー側に書いてあるものも少なくなかったのでどっちが好ましいんだろうと気になりました
コメント1件

236
デフォルトの名無しさん[sage]   投稿日:2017/01/19 23:08:04  ID:ipEwSksA.net
プログラムは普通すべて「ソースファイル」に書くものです
「ヘッダー」に書くのはコンパイラー開発者だけです

237
デフォルトの名無しさん[sage]   投稿日:2017/01/19 23:11:24  ID:ydMYZ/gE.net
クラスもヘッダに書きますけどぉ

238
デフォルトの名無しさん[sage]   投稿日:2017/01/19 23:55:32  ID:A0Yl7Ujc.net
> その時メンバ関数はどんな場合でもヘッダー側に書かずにソース側に書くものですか?
別にどんな場合でもソース側に書くというわけではない

ヘッダに書くのもソースに書くのも一長一短はあり絶対的にどっちがいいというものではない
君が違いを理解し何を重視するかを意識すれば
君にとってどっちが好ましいかは自然とはっきりする

239
デフォルトの名無しさん[]   投稿日:2017/01/20 00:23:32  ID:7sj2OAGi.net
なんか禅問答が始まったかと思ったわ

240
デフォルトの名無しさん[sage]   投稿日:2017/01/20 01:12:20  ID:/ixeQkYS.net
短いメソッドなら、ヘッダに、inline 指定して書くと、
関数化せずに、inline にしてくれる可能性が高い

まあ、言語では保証していないけど。コンパイラ依存
コメント1件

241
デフォルトの名無しさん[]   投稿日:2017/01/20 05:11:02  ID:vaOLIJJw.net
クラス定義で定義されたメンバ関数は暗黙にinlineになるね。
(『プログラミング言語C++第4版』p.464 16.2.8 クラス内関数定義)

class SomeClass {
public:
  int a() {return a_;} // 暗黙のinline指定
private:
  int a_;
}


…という話を書くために厚い本を調べてたら

class SomeClass {
public:
  int a();
private:
  int a_;
}

inline int SomeClass::a() // 明示的にinline指定
{
  return a_;
}

と書く方法も載ってた。 >240 は後者の説明だったのね。

242
デフォルトの名無しさん[sage]   投稿日:2017/01/20 07:10:06  ID:Nvso2zBq.net
>235
本体側に書くのが原則 特にシステムが大きくなる場合
よほどの理由がある場合(インライン化して高速化するなど)はヘッダに書くこともある

243
デフォルトの名無しさん[sage]   投稿日:2017/01/20 08:09:40  ID:B05iL6IP.net
『〜のが原則』
『理由がある場合〜こともある』
俺の会社のルールは世界普遍的 思考

244
デフォルトの名無しさん[sage]   投稿日:2017/01/20 16:53:52  ID:abKD9bRi.net(3)
inlineにするのはほとんどその時の気分みたいな?
なんかマクロみたいだな。inlineにすっかみたいな。
コメント1件

245
片山博文MZ ◆T6xkBnTXz7B0 [sage]   投稿日:2017/01/20 17:10:04  ID:XdmbS/hB.net
>244
関数呼び出しのオーバーヘッドの回避と、定数畳み込みなどの最適化が期待できる場合にインライン化する。
コメント2件

246
デフォルトの名無しさん[sage]   投稿日:2017/01/20 17:38:00  ID:abKD9bRi.net(3)
>245
そんな感じ

247
デフォルトの名無しさん[sage]   投稿日:2017/01/20 20:04:23  ID:1c/0Zcpc.net
>245
インラインにしても劇的に速くなった経験が無いんですが、コツは有りますか?

248
デフォルトの名無しさん[sage]   投稿日:2017/01/20 20:57:25  ID:pNkrp0ep.net
効果が出るのは
・小さい
かつ
・短時間に非常に多数呼び出される
関数だけだよ。
しかも、まず劇的ではない。

249
デフォルトの名無しさん[]   投稿日:2017/01/20 21:15:10  ID:esT1VQmf.net(3)
inlineキーワードはヘッダに実装書くときなどに使用するものでインライン展開を狙った最適化の為に書くものではない
コメント2件

250
デフォルトの名無しさん[sage]   投稿日:2017/01/20 21:15:23  ID:abKD9bRi.net(3)
もしかしてコンパイラの方で展開してるとか はないかなぁw

251
デフォルトの名無しさん[sage]   投稿日:2017/01/20 21:57:28  ID:aetIobRP.net
>249
インライン関数の話の途中でinlineキーワードの関数の話を始めて、いきなりどうした

252
デフォルトの名無しさん[sage]   投稿日:2017/01/20 22:07:56  ID:CICAdfuU.net
>249
上にもあるけどヘッダに実装書いたら暗黙でインライン指定されるから、そこにinlineキーワードを使用するのは無意味
やはりinlineは最適化のためでしょう
コメント1件

253
デフォルトの名無しさん[sage]   投稿日:2017/01/20 23:11:34  ID:LsENUQp+.net(2)
ベクトルとか行列のライブラリを使った時は全部インラインにしたな
1/60秒にかなりの回数呼ぶし
ライブラリとかもインラインで書かれてる

254
デフォルトの名無しさん[sage]   投稿日:2017/01/20 23:12:36  ID:LsENUQp+.net(2)
×使った ??作った

255
デフォルトの名無しさん[]   投稿日:2017/01/20 23:27:28  ID:esT1VQmf.net(3)
>252
んなわけない
コメント1件

256
デフォルトの名無しさん[sage]   投稿日:2017/01/20 23:34:20  ID:ITfb1kXg.net
>255
んなこたーない

257
デフォルトの名無しさん[]   投稿日:2017/01/20 23:36:05  ID:esT1VQmf.net(3)
ヘッダに書いたら暗黙でinlineって
#includeの機能しらんとしか思えないんだが

258
デフォルトの名無しさん[sage]   投稿日:2017/01/21 00:40:48  ID:dThE4/1u.net
ちょと混じっちゃったね。
関数を定義されたヘッダーが複数のソースに呼ばれちゃったら、実体が
いっぱい出来ちゃうもんね。

259
デフォルトの名無しさん[sage]   投稿日:2017/01/21 01:48:12  ID:RmTA4cQd.net
江添はなんて言ってる?

260
デフォルトの名無しさん[sage]   投稿日:2017/01/21 07:06:45  ID:5NCJ8rOL.net
forceを信じるのだ

261
デフォルトの名無しさん[sage]   投稿日:2017/01/21 08:35:23  ID:P1/rV56D.net
インライン関数はODR回避のためだと思っていた
C++17(予定)のインライン変数もそんな感じ
コメント1件

262
デフォルトの名無しさん[sage]   投稿日:2017/01/21 11:00:41  ID:wrzS/cSB.net
ODRって何?

263
デフォルトの名無しさん[sage]   投稿日:2017/01/21 11:17:05  ID:J7ipYv9j.net(2)
単一定義則 One Definition Rule の略語

264
263[sage]   投稿日:2017/01/21 19:43:36  ID:J7ipYv9j.net(2)
「単一定義規則」の方が検索にかかりやすい言葉かも。

265
デフォルトの名無しさん[sage]   投稿日:2017/01/22 08:28:10  ID:5o7PrILb.net
>261
そうそう。最適化目的でinline付けても普通無視されるからね。

266
デフォルトの名無しさん[sage]   投稿日:2017/01/22 14:37:23  ID:hBhrTyQG.net

267
デフォルトの名無しさん[]   投稿日:2017/01/24 12:50:54  ID:ZplzBBh2.net(2)
Windows上で、APIを使わずに、コマンドプロンプト上だけで結果が
ほしいような、C言語のプログラムを作るのに便利な開発環境はありますか?
VIsualStudioは重すぎてあまり使いたくありません。
どうぞよろしくお願いします。
コメント2件

268
デフォルトの名無しさん[sage]   投稿日:2017/01/24 13:20:58  ID:qjTW56fl.net(2)
msys2

269
デフォルトの名無しさん[]   投稿日:2017/01/24 13:39:24  ID:ZplzBBh2.net(2)
msysって、どういうものですか?
コメント1件

270
デフォルトの名無しさん[sage]   投稿日:2017/01/24 13:58:35  ID:qjTW56fl.net(2)
>269
コンパイラツールチェインとターミナルとライブラリ管理のパッケージツールを纏めたものです
エディタは無いし ビルドツールはautotoolsとかcmakeとかを使います
ただ単体ファイルをコンパイルして実行するだけなら
gccを叩くだけなので ご要望に沿うかと

271
デフォルトの名無しさん[sage]   投稿日:2017/01/24 14:14:08  ID:tjYeiy24.net
重いのがイヤなら code::blocks はどうかね
http://demura.net/lecture/12713.html

272
デフォルトの名無しさん[sage]   投稿日:2017/01/24 20:33:35  ID:bAAm8CCs.net
>267
自分もvisual studio が重いのと好きなエディタ使いたいのと、
でもGUIでファイル管理とかコンパイルエラー行へのジャンプをしたかったの自分でそういうツールを作った。TTVC Developer っていうのだけど
ネット上に公開してるけど反応無いので本当に良くできてるかどうかは
わからんが、自分的には便利だとは思ってる

273
デフォルトの名無しさん[sage]   投稿日:2017/01/24 20:39:04  ID:2gaKjsEX.net
俺はqt creator使ってるな
VSよりマシってくらいだが

274
デフォルトの名無しさん[sage]   投稿日:2017/01/24 20:46:07  ID:HHZbO6eg.net
>267
notepad.exe
cl.exe
link.exe

275
デフォルトの名無しさん[]   投稿日:2017/01/24 21:22:57  ID:nvNd8iP1.net
Bash on Ubuntu on Windws

276
デフォルトの名無しさん[sage]   投稿日:2017/01/24 21:41:00  ID:1ohBhH6C.net
あれβとれたっけ?

277
デフォルトの名無しさん[sage]   投稿日:2017/01/27 01:10:08  ID:c6wkRwWW.net(2)
*p++ って 参照してからインクリメントですよね。
某書に*(p++)と等価って書いてあったけど。
ん 同じか

278
デフォルトの名無しさん[sage]   投稿日:2017/01/27 01:47:57  ID:JFq0FevS.net
同じだよ
その括弧かあってもなくても実際にインクリメントがされるタイミングには影響しない

279
デフォルトの名無しさん[sage]   投稿日:2017/01/27 02:43:45  ID:c6wkRwWW.net(2)
すまん 評価してからインクリメントは同じだもんね。
コメント1件

280
デフォルトの名無しさん[sage]   投稿日:2017/01/28 22:24:20  ID:fbuNIeJW.net
>279
いいってことよ

何気に愉快なIDだな

281
デフォルトの名無しさん[sage]   投稿日:2017/01/29 14:28:58  ID:XKehhdE4.net(3)
質問です。
VisualStudio2015でReleaseビルドをしていたところ、生成されたEXEに気になる点がありました

if(false){
printf("hogehoge");
}

という処理を書いたところ、このprintfは到達不可能なのに、EXEの中に"hogehoge"という文字列が含まれていたのです。
※再現コードなのでhogehoeをprintしてなんの意味があるのかというコードですが

到達不能なのが明らかな部分は最適化で削除されるものだと思っていたのですが、何かしらの私の不手際でしょうか?
最適化は /O2オプションです
コメント3件

282
デフォルトの名無しさん[sage]   投稿日:2017/01/29 15:19:11  ID:DfD+S+Qh.net
>281
/O4とかは?
コメント1件

283
デフォルトの名無しさん[sage]   投稿日:2017/01/29 15:31:20  ID:2ZaFXkbr.net
オプションによる不確定なものをどうして不手際と思ったのか謎
/O2 /GF-なら残る可能性高いし
コメント1件

284
デフォルトの名無しさん[sage]   投稿日:2017/01/29 17:04:30  ID:XKehhdE4.net(3)
アドバイスありがとうございます

>282
VisualStudioには無いようです。GCCにはあるようですが、ぐぐった限りだと効果はないようなことが散見されました

>283
「不要なコードを削る」というのは、一番単純で効果が高そうなので、まっさきに確実に全除去してくれるだろうと思い込んでいたためです
この手のコードが最適化で消えないと、ifdefだらけになりそうなのですが、何か対策はないものでしょうか?

285
デフォルトの名無しさん[sage]   投稿日:2017/01/29 18:59:23  ID:K+/fnyLa.net
何かの理由があって残してるという事はないのかな・・・
コメント1件

286
デフォルトの名無しさん[sage]   投稿日:2017/01/29 19:49:35  ID:6wGEJq5M.net
>281
普通に削除されて文字列もなくなるけど?

287
デフォルトの名無しさん[sage]   投稿日:2017/01/29 23:12:58  ID:XKehhdE4.net(3)
>285-286
ご返答ありがとうございます。

どうも文字列をあれこれ変えて、消えたり消えなかったりとよくわからない状況になってきました。
とりあえず、VS2015での最小コードを作れましたので貼り付けます

int main()
{
char text[] = "foofoo";
printf("hogehoge");
if (false) { printf(text); }
return 0;
}

こうすると以下の挙動になります。
このまま: exeにhogehoge, foofooの両方が含まれているのを確認できる
printf("hogehoge");を削除: hogehoge, foofooの両方がEXEから消える
※単に0を返すだけの結果固定関数になるため、変数の割り当てすらしなくなるから?

288
デフォルトの名無しさん[sage]   投稿日:2017/01/29 23:42:21  ID:DuISdTe+.net
VS2015の環境を持っていないんで見当違いかも知れんが…。

#include <stdio.h> か #include <cstdio> を書いてみる。
char text[] = ... を const char text[] = ... にしてみる。

これらを(独立して)変えてみたら状態が変わらんかな?
printf()による副作用の可能性を考慮してtextを消さないのかも知れん。


もちろんprintf(&quot;hogehoge&quot;)を呼び出しても
引数になってないtextが読み書きされるはずはないんだけど。
コメント1件

289
デフォルトの名無しさん[sage]   投稿日:2017/01/30 00:05:47  ID:iVXSa+56.net
>288
アドバイスありがとうございます
すいません。最小コードといいつつincludeをきちんと書いておりませんでした
#include <stdio.h>を最初に書いております
cstdioに変えてみて、各種パターンやってみましたが、変化は見られませんでした

次に、以下です
const char ではfoofooは消えませんでした
const static char に変えたところ、消えました

printfが、中でスタック消費量でも利用しているのかな…と馬鹿なことを考えて
char text〜をグローバル空間に出してみましたが、foofooは消えずです
コメント1件

290
デフォルトの名無しさん[sage]   投稿日:2017/01/30 13:26:01  ID:NFw8h2uH.net
>289
グローバル変数にするのは最適化されにくくなるだけ。
とりあえずこれで

#include <stdio.h>
int main(){
printf("hogehoge");
if(false){
printf("foofoo");
}
return 0;
}

データセグメントが消えるかどうかは最適化の
目的じゃないと思うが、"foofoo"が残るか見てみると

VS2015
cl /Ox /Fa hoge.cpp きえない
cl /O1 /Fa hoge.cpp きえた
cl /O2 /Fa hoge.cpp きえた

GCC-3.4.5
gcc -S hoge.cpp きえた

まあ所詮VC

291
デフォルトの名無しさん[sage]   投稿日:2017/01/30 17:50:38  ID:X+M9ocjS.net
つまり>281は嘘つきってこと?

292
デフォルトの名無しさん[sage]   投稿日:2017/01/30 19:47:42  ID:p0U51Ig/.net
exeの中身まで気が回りませんわ

293
デフォルトの名無しさん[sage]   投稿日:2017/01/30 22:08:56  ID:mpXbeHjF.net
exeにビルド時のフルパスが埋め込まれてるとイラっとする

294
デフォルトの名無しさん[]   投稿日:2017/01/30 22:20:13  ID:XMGcU10o.net
デバッグビルドなら普通でしょ

295
デフォルトの名無しさん[sage]   投稿日:2017/01/31 02:46:33  ID:SZ8YrWi+.net
リリースビルドにして、最適化オプションを指定すれば?

296
デフォルトの名無しさん[sage]   投稿日:2017/01/31 09:17:11  ID:r8Cb1+5o.net
デバッグ情報を含めなければいいだけだしな

297
デフォルトの名無しさん[sage]   投稿日:2017/02/01 01:15:31  ID:lC8eLy+G.net
あるクラスに引数で渡されるオブジェクトのconstではない参照を持ちたいんですけどどのようにやればいいでしょうか
ポインタはなるべく使いたくないのですが
class A {
public:
void setParam(Param&);
private:
Param& m_param;
}
状況としては
あるクラスBがクラスAみたいなParamの参照を持つクラスを複数持っていて
クラスBがvector<Param>でParamの実体を持っているという感じです
コメント1件

298
デフォルトの名無しさん[sage]   投稿日:2017/02/01 01:25:10  ID:V+KME3Sb.net(2)
ライフタイムと循環参照のもたらす悪夢を
全部避けられるように熟考しながら
shared_ptr / weak_ptr をどうぞ
Welcome to C++ nightmare!!
コメント1件

299
デフォルトの名無しさん[]   投稿日:2017/02/01 01:36:32  ID:nwC60mRJ.net
shared_ptrの何が難しいのか判らん。
shared_ptr程度で悪夢とか言ってたらswiftも使えなくない?

300
デフォルトの名無しさん[sage]   投稿日:2017/02/01 02:15:37  ID:V+KME3Sb.net(2)
まぁ良く調べて使ってねってのを脅し効かせた程度です 
他の言語で参照カウント型のsmart_ptr解ってるなら 確かに大丈夫

301
デフォルトの名無しさん[sage]   投稿日:2017/02/01 12:17:29  ID:RxSebrTI.net(3)
Windows10でBluetoothを使ったCOM通信を行いたく、
プログラムのほうはCOMポート通信のつもりで書き、
OSの設定でBluetoothに仮想COMポートを追加しました。

Androidとは問題なく接続・通信できたのですが、
Windows10同士ではうまくいきませんでした。
これは仮想COMポート作成するときに、どちらのPCも「受信」(相手側が接続を開始する)にしていたからだと思い、
片方を「送信」に変更しようとしました。
しかし、この場合は接続先PCを指定しなくてはならないのですが
対象PCが選択リスト内に出てこなくて作成することができません。
ペアリングはできているにもかかわらずです。

どうすればWin10PC同士でBluetoothを介したCOMポート接続・通信ができるでしょうか?

302
デフォルトの名無しさん[sage]   投稿日:2017/02/01 12:30:13  ID:HL/HxBhd.net(2)
直接の解はわからないけど、ぐぐって見つかったので確認
ポート開くとき "\\\\.\\COM○○" (○は数字 \はエスケープ込み)
って開いてる?

ポート番号が1桁の場合に限り "COM○"でも開けるらしいけど、
そのコードの延長で 2桁渡すとそれは開けないから
コメント1件

303
301[sage]   投稿日:2017/02/01 12:49:42  ID:RxSebrTI.net(3)
>302
あ、はい。それはやってます。

今、わかったのですが、
一旦ペアリングを解除して、改めて「送信」COMポートを追加しようとすると、
先程までペアリングしていた対象PCが選択できるようになりました。

しかし今度は「選択されたデバイスでシリアルポートサービスが実行されていません。」と出て作成されません。
相手側に「受信」のCOMポートは作成済みなのですが…。

304
デフォルトの名無しさん[sage]   投稿日:2017/02/01 13:25:07  ID:HL/HxBhd.net(2)
http://kokufu.blogspot.jp/2014/02/windows-bluetooth-spp-server.html
これとかの雰囲気だと
「受信」で作った側のPCのソフトを先に立ち上げて接続待ちにして(SPPサーバー)
「送信」で作った側のPCを後追いで接続 かなぁ
力になれなくてすまん
コメント1件

305
301[sage]   投稿日:2017/02/01 14:06:25  ID:RxSebrTI.net(3)
>304
いえいえ!
色々と調べていただいて参考になりました。

どうもシリアル接続サービスをサポートしていないようです。
今回の条件ではあまり好ましくないのですが、
WiFiを使ったソケット通信で妥協することにします。

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

306
デフォルトの名無しさん[sage]   投稿日:2017/02/01 14:21:22  ID:+8V+I8xy.net
>298-300
ありがとうございます
帰ったら勉強してみます

307
デフォルトの名無しさん[]   投稿日:2017/02/01 20:39:39  ID:3j6uP7e4.net
>297
参照をメンバで持ちたい時は、コンストラクタでの初期化以外は無理。

class A {
public:
A(Param& x):m_param(x){}
private:
Param& m_param;
};

308
デフォルトの名無しさん[sage]   投稿日:2017/02/02 01:04:42  ID:CAgg+EtY.net(2)
shared_ptr,weak_ptrのことで質問なのですが
自クラス2つを引数に取る+演算子をオーバーロードしているクラスMatrixを使って
func(std::weak_ptr<Matrix> m1, std::weak_ptr<Matrix> m2){
mat = m1 * m2;

}
みたいにやりたいんですが、オペランドに一致する演算子がないと言われます
shared_ptr,weak_ptrに入れた場合どのようにしてオーバーロードされた演算子を利用できますか?
コメント1件


309
デフォルトの名無しさん[sage]   投稿日:2017/02/02 01:27:35  ID:FXYEZ0RW.net
>308
weak_ptr から shared_ptr を作って、それを通して参照すればいい
・・・んだけど、それ weak_ptr::expired() な場合にどうするつもりなん?
コメント1件

310
デフォルトの名無しさん[sage]   投稿日:2017/02/02 02:04:10  ID:CAgg+EtY.net(2)
>309
ありがとうございます
weak_ptrを使っている理由は
funcはあるクラスのメンバ関数で、引数で渡されたポインタの所有権をクラスが持たないこと示すためにweak_ptrを使っているのですが
weak_ptr::expired()な場合は想定していません
コメント1件

311
デフォルトの名無しさん[]   投稿日:2017/02/02 02:21:14  ID:ExAPXdhA.net
>310
なんか根本的に勘違いしてる感が
const referenceの関数見たら中でポインタ持ち続けちゃう心配とかしてんの?

312
デフォルトの名無しさん[sage]   投稿日:2017/02/02 02:21:18  ID:EB2HJN86.net
スマートポインタはポインタのように振る舞うものだから
*や->でポインタの指す値にしなければならないよ

313
デフォルトの名無しさん[sage]   投稿日:2017/02/02 10:51:03  ID:335RX4F5.net
VS2015で.objを.libに変換してリンクできなくて悩んでいます
そういうことはできないのでしょうか?


複数のC++ファイルをビルド→.objが複数できる

新しいEXEプロジェクト作る→main()を用意→そこの.vcxprojを編集して複数の.objをincludeする→ビルドで正常な.exeできる(exeサイズ10MB)
 include方法は<Object Include="abc1.obj" /> <Object Include="abc2.obj" />・・・

新しいスタティックライブラリプロジェクト作る→そこの.vcxprojを編集して複数の.objをincludeする→ビルドで.libができる(libサイズ100MB)
→新しいEXEプロジェクト作る→main()を用意→追加のライブラリで.libをリンクする→ビルドで動かない.exeできる(exeサイズ1MB)

動かない.exeのビルド時はリンカーエラーなど出ません
exeサイズが期待しているよりも小さく、実行時に例外で強制終了します
コメント1件

314
デフォルトの名無しさん[sage]   投稿日:2017/02/02 12:49:56  ID:cH1kwi7M.net
例外を具体的に
コメント1件

315
デフォルトの名無しさん[sage]   投稿日:2017/02/02 13:18:13  ID:Nq0thOwX.net
>314
> ハンドルされない例外がスローされました:読み取りアクセス違反。
> xxxxx が nullptr でした。
xxxxxはポインタ変数

exeサイズが小さいからリンクできてるように見えてリンクできてないのかなとは思うけど
libの追加方法を#pragma comment(lib,"")にしてもうまくいかずでどうしたらいいものか

316
デフォルトの名無しさん[sage]   投稿日:2017/02/02 18:40:08  ID:qO0hDPsp.net
>313
> vcxprojを編集して複数の.objをincludeする
なんか色々勘違いしてないか?
コメント2件

317
デフォルトの名無しさん[]   投稿日:2017/02/02 18:48:07  ID:S7kpFPUA.net
>316
そういう実験してるんでしょ。
それを他人に聞いて何か返ってくると思ってるのが間違ってる感があるけど。
コメント1件

318
デフォルトの名無しさん[sage]   投稿日:2017/02/02 19:11:39  ID:Eu4e1EaI.net(2)
>316
objからlibを作って動くならそれがいいのだけどその方法が分からない
lib.exeでobjからlibを作って使っても同じ状況

319
デフォルトの名無しさん[sage]   投稿日:2017/02/02 19:16:04  ID:WkIFQVuy.net(2)
>317
普通とは違うことをしているなと思ったが、実験しているのか
vcxprojを編集してソースコードではなくobjを用いるVSプロジェクトを作りたいのかな

320
デフォルトの名無しさん[sage]   投稿日:2017/02/02 19:18:03  ID:qhXDtbED.net
.c, .cpp から .lib 作るプロジェクト -(A)
そいつをリンクしつつ、 .c, .cpp から実行ファイルを作るプロジェクト -(B)
(参照設定とか依存関係とかで (A) を使うぜ俺 って指定する)
コメント1件

321
デフォルトの名無しさん[sage]   投稿日:2017/02/02 19:38:57  ID:WkIFQVuy.net(2)
こんな感じだろ
ソースからobj生成: VSプロジェクトでなくていい
VSプロジェクト
1. objからexe作るVSプロジェクト (結果OK)
2. objからlib作るVSプロジェクト (3.がNGで、本当にうまくlib作れたかわからず)
3. 上のlibからexe作るVSプロジェクト (exeが例外でNG)
コメント1件

322
デフォルトの名無しさん[sage]   投稿日:2017/02/02 19:51:53  ID:Eu4e1EaI.net(2)
>321
まさにその状態
>320の(A)が作れればいいけど、objファイルは数百プロジェクトの600ファイルぐらいあるから試そうにも数日かかりそうで避けたい
今は全プロジェクトまとめたソリューションあるけどリビルドだけで1時間以上かかる。簡単にexe作れるようにしたいというのが原点

323
デフォルトの名無しさん[sage]   投稿日:2017/02/02 20:22:53  ID:k638XiO/.net
そこまで行ったらDLLに分けるだろう

324
313[sage]   投稿日:2017/02/03 13:56:09  ID:3xPmzf3n.net(2)
4番をやってみましたが結果OKでした
1. objからexe作るVSプロジェクト (結果OK)
2. objからlib作るVSプロジェクト (3.がNGで、本当にうまくlib作れたかわからないが、4がOKで作れてる可能性高い)
3. 2のlibからexe作るVSプロジェクト (exeが例外でNG)
4. 2のlibからobjを抽出して、そのobjからexe作るVSプロジェクト (結果OK)

作業の前提条件として下の2つは意味が同じと思っているのですが、違いがあるのでしょうか?
cppをコンパイルしてobjにし、objをリンクしてexeを作る
cppをコンパイルしてobjにし、objをlibに変換してからリンクしてexeを作る
コメント1件

325
デフォルトの名無しさん[sage]   投稿日:2017/02/03 13:56:30  ID:OeN1TpCU.net
Ubuntu16.04,gcc5.4.0で,書籍を参考に下記のプログラムを
コンパイル(gcc program.c -lalut -s -o program)したところ,
「'nullptr' was not declared in this scope」というエラーになりました
何が間違っているのか教えてください

---program---
#include<AL/al.h>
#include<AL/alc.h>

int main() {
//OpenAlの初期化
//デバイスを開く
ALCdevice* device = alcOpenDevice(nullptr);

//コンテキストを生成
ALCcontext* context = alcCreateContext(device, nullptr);

//生成したコンテキストを操作対象にする
alcMakeContextCurrent(context);

//OpenALの後始末
//操作対象のコンテキストを解除
alcMakeContextCurrent(nullptr);

//コンテキストを破棄
alcDestroyContext(context);

//デバイスを閉じる
alcCloseDevice(device);
}

326
デフォルトの名無しさん[sage]   投稿日:2017/02/03 14:06:26  ID:S9UE3yae.net
nullptrはC++11からの機能だからですね
"gcc" -> "g++ --std=c++11"を使ってください

元のコンパイルは-lalutを指定していますが
そのプログラムならOpenALだけで大丈夫なので 下記で通ります
ライブラリをpkg-configに探させてるだけです

g++ --std=c++11 program.c `pkg-config openal --libs` -o program
コメント1件

327
デフォルトの名無しさん[sage]   投稿日:2017/02/03 14:55:43  ID:xVLuMTde.net
>324
一般論で言えば同じはず。
ファイルサイズが小さいのなら正常にリンクできてない。
使ってない関数やクラスをリンクしてるわけじゃないよね
コメント1件

328
デフォルトの名無しさん[sage]   投稿日:2017/02/03 15:42:48  ID:3xPmzf3n.net(2)
>327
使ってるのも使ってないのもある

libの追加方法は二通り試したけどどちらもビルドエラーはでないけど実行時NG
どちらもlibの追加を省略すると外部シンボルが見つからないエラーでビルドが通らない

プロジェクトのプロパティの「追加の依存ファイル」から→実行時NG
ソースファイル中に「#pragma comment(lib,"")」から→実行時NG

329
デフォルトの名無しさん[]   投稿日:2017/02/04 00:14:20  ID:z/XsYQOx.net
何もしていない普通の一般人の自宅に隠しカメラを取り付け
それをネットでリアルタイム配信

仲間という人間に対する盗聴盗撮生ネット配信の会

しかけたカメラの映像
乗っ取っているPCの画像をリアルタイムで生配信中
集団で仲間の私生活を覗いて楽しんでいる

そんなことが今この国では行われています

330
デフォルトの名無しさん[sage]   投稿日:2017/02/04 05:54:43  ID:/r5Uxr2+.net
libでリンク解決してもダイナミックリンクにしてれば実行時にパス内に見つからずにエラー
スタティックリンクにしないと
コメント1件

331
デフォルトの名無しさん[sage]   投稿日:2017/02/04 09:51:58  ID:GdM1I4zb.net(2)
久々にプログラミングしようと思うんですけど
USBカメラがあるからそれを使って監視カメラにしたいんだが
ピクセルデータが取れればあとは簡単だと思うんだけど、その前に
この適当に昔買ったバッファローのUSBからデータ取り出す事って可能なんですか?
コメント1件

332
デフォルトの名無しさん[sage]   投稿日:2017/02/04 10:24:35  ID:94H9RTyk.net
>330
lib作るときのプロジェクトタイプはスタティックライブラリにしているけど、それとは別に設定であるのでしょうか?

>331
「usbカメラ キャプチャ c++」で検索すると色々な方法が見つかるよ。よほど変なカメラ出ない限り仕様は同じだから使える
コメント1件

333
デフォルトの名無しさん[sage]   投稿日:2017/02/04 10:55:19  ID:GdM1I4zb.net(2)
>332
ありがとうございますだ

334
デフォルトの名無しさん[sage]   投稿日:2017/02/04 21:25:32  ID:uqEM2LY/.net(2)
int a = 0;
int *b = &(1+a);
これが出来ないのはなぜですか?
1+aの計算結果というのはメモリ上のどこかにあると思うんですが
コメント3件

335
片山博文MZ ◆T6xkBnTXz7B0 [sage]   投稿日:2017/02/04 21:28:28  ID:sK4bvJ1n.net
>334
CPUのレジスタには物理アドレスが無い。
コメント1件

336
デフォルトの名無しさん[sage]   投稿日:2017/02/04 21:31:18  ID:3pCbKNVT.net
&1 を許すとややこしいことになりそうだ

337
デフォルトの名無しさん[sage]   投稿日:2017/02/04 21:38:25  ID:wIflvrKT.net
>334
計算結果はレジスタに入っててメモリには入ってないんじゃない?

338
デフォルトの名無しさん[sage]   投稿日:2017/02/04 21:52:37  ID:uqEM2LY/.net(2)
>335-337
なるほど、勘違いしてました
ありがとうございます
コメント1件

339
デフォルトの名無しさん[sage]   投稿日:2017/02/05 19:35:43  ID:ktep0Dpi.net
>326
遅くなりすいません
できました
ありがとうございました

340
デフォルトの名無しさん[sage]   投稿日:2017/02/05 22:43:20  ID:F2ePDpTS.net
>337
レジスタがメモリじゃないかのようなアホレスだな

341
デフォルトの名無しさん[sage]   投稿日:2017/02/05 23:03:58  ID:wagcFIA6.net
レジスタのアドレスって・・・

342
デフォルトの名無しさん[sage]   投稿日:2017/02/06 01:31:32  ID:DI3VdQ+9.net
アドレスのないレジスタはCでアクセスできないからな
アセンブリでしてねになるからね

343
デフォルトの名無しさん[]   投稿日:2017/02/06 03:41:00  ID:oG8S/cPb.net(2)
って言うかレジスタ関係なくね?
右辺値に対してアドレス取ろうとしてるから駄目なわけで。

344
デフォルトの名無しさん[sage]   投稿日:2017/02/06 05:58:55  ID:GvVdGH4O.net
>334 の質問に対して「右辺値」を出すのは大げさじゃないかな。
もちろん正しいんだけど、詳細に踏み込みすぎというか、
その話はもっと理解が深まってから、というか。

「過去に自分がこの疑問を持ったときに、どんな説明をされたら
すっきり腑に落ちて先に進めただろうか」と思い返しながら回答してるんだろう。
コメント1件

345
デフォルトの名無しさん[sage]   投稿日:2017/02/06 08:21:18  ID:87jFG7WV.net
そもそも >338 で本人納得してるのに
> レジスタがメモリじゃないかのようなアホレスだな
とか
> 右辺値に対してアドレス取ろうとしてるから駄目なわけで。
とかは知ったか自慢にしか見えない
コメント2件

346
デフォルトの名無しさん[sage]   投稿日:2017/02/06 08:58:46  ID:L0zP1ki7.net
間違った説明で相手を納得させておいて開き直りとはこれいかに

347
デフォルトの名無しさん[sage]   投稿日:2017/02/06 13:17:28  ID:WLH8uv6+.net
>345
本人の納得は無関係
その二つどっちも誤り
コメント1件

348
デフォルトの名無しさん[sage]   投稿日:2017/02/06 20:21:28  ID:VJg+IRhi.net(2)
>345
> その二つどっちも誤り
でもどう誤ってるかは書けないんだよね w
コメント1件

349
デフォルトの名無しさん[sage]   投稿日:2017/02/06 20:22:09  ID:VJg+IRhi.net(2)
>348>347 宛だったわ

350
デフォルトの名無しさん[]   投稿日:2017/02/06 20:58:58  ID:oG8S/cPb.net(2)
>344
でもさ、レジスタって言語と関係ないじゃん?

351
デフォルトの名無しさん[sage]   投稿日:2017/02/06 21:52:01  ID:w07g0Jpo.net(2)
registerは予約語なのに無関係は無いわ

352
デフォルトの名無しさん[sage]   投稿日:2017/02/06 22:13:36  ID:rtwfNknd.net
>registerは予約語なのに無関係は無いわ
規格のどこを読んだら「register」キーワードと「レジスター」との関連が読みとれるんだか

353
デフォルトの名無しさん[sage]   投稿日:2017/02/06 23:29:15  ID:w07g0Jpo.net(2)
規格厨には理解しろと言っても無理だ

354
デフォルトの名無しさん[sage]   投稿日:2017/02/06 23:45:37  ID:+fmEnPzx.net
>int a = 0;
>int *b = &(1+a);

っていうのが今intになってるからレジスタがどうとか言えるけど
intじゃなくて自分で定義したクラスとかだったらどうなんだって話だな
レジスタだからアドレスが取れないっていう説明はアレすぎないかい?
そもそもレジスタだけで済ませるかどうかはコンパイラの自由ってのもあるし
コメント1件

355
デフォルトの名無しさん[sage]   投稿日:2017/02/06 23:48:30  ID:tIYhS76V.net
一生懸命だなあw

356
デフォルトの名無しさん[sage]   投稿日:2017/02/07 00:11:08  ID:STnejiJM.net
俺が思うにさ
最適化でレジスタに配置されてメモリに実体が確保されない変数ってのは
普通にありふれているわけじゃないですか
で、それらの変数のアドレスを取得するように
コードを書き換えたら、コンパイルエラーになるんですか?ってね
その場合ちゃんとコンパイラはメモリに実体を作るような動作になる
だからレジスタ云々はオプティマイズの話であって本質的に全く関係ないだろうと
レジスタに配置されているからアドレス取得できませんって意味不明で
だったらメモリに実体を作ればいくらでもアドレス取得できるだろって話なんだよ

どちらかというとこれは変数の寿命の関係でそうなっているんだよ

357
デフォルトの名無しさん[sage]   投稿日:2017/02/07 00:12:13  ID:vsDAW+dO.net
初心者向けの簡易な説明に外野がつまらない茶々入れて大騒ぎするなよ。

358
デフォルトの名無しさん[sage]   投稿日:2017/02/07 00:25:30  ID:pfKer2X+.net
>最適化でレジスタに配置されてメモリに実体が確保されない変数ってのは
>普通にありふれているわけじゃないですか

本当にありふれてるのか?

359
デフォルトの名無しさん[]   投稿日:2017/02/07 00:48:05  ID:PI0qtNzz.net
winsock(UDP)を使ったプログラムを作っています。
ほぼできたのですが、数100回繰り返すと徐々に通信が
遅くなっていきます。
通信するたびに、オープンとクローズを繰り返しているのですが、
その辺に原因がありそうでしょうか・・・。
コメント1件

360
デフォルトの名無しさん[sage]   投稿日:2017/02/07 02:25:04  ID:e2fTv1VF.net
メモリを解放していないから、使用メモリがドンドン大きくなっていくとか?

プロセスの使用メモリを、チェックすれば?

361
デフォルトの名無しさん[sage]   投稿日:2017/02/07 07:22:03  ID:ff698yUf.net(2)
>354
> そもそもレジスタだけで済ませるかどうかはコンパイラの自由ってのもあるし
その自由さのために言語仕様でできないようにしてるだけでしょ

362
デフォルトの名無しさん[sage]   投稿日:2017/02/07 07:23:26  ID:ff698yUf.net(2)
>359
再現性あるならどこが遅くなってるかを調べたら?

363
デフォルトの名無しさん[sage]   投稿日:2017/02/07 07:43:41  ID:AbeSLyAt.net
>その自由さのために言語仕様でできないようにしてるだけでしょ

根拠は俺の「こうだったらいいな」
この理屈で行くとアドレスをとれる変数は
レジスタに乗せてはいけないことになるな

364
デフォルトの名無しさん[sage]   投稿日:2017/02/07 11:15:58  ID:bjgueVwS.net
register云々してるやつはCかC++か区別して書け
コメント1件

365
デフォルトの名無しさん[sage]   投稿日:2017/02/07 11:47:58  ID:+LdvU0fQ.net(2)
class A
{
 public:
  int xxx;
  void yyy();
};

class B : protected A  ←protectedのままにしたい
{
 public:
  void yyy() {  __super::yyy();  }
};

B bbb;
bbb.xxx = 0;   ←アクセスできない
bbb.yyy();    ←使える

xxxをclassBの内部を変えることでアクセスできるようにする方法ない?

366
デフォルトの名無しさん[sage]   投稿日:2017/02/07 11:52:35  ID:Ex9Qk6T0.net
public:
using A::xxx;
コメント1件

367
デフォルトの名無しさん[sage]   投稿日:2017/02/07 11:57:42  ID:+LdvU0fQ.net(2)
>366
おお!yyy()もそれでいけるね。サンクス

368
デフォルトの名無しさん[sage]   投稿日:2017/02/07 19:45:06  ID:R+lISOuU.net
>364
register変数のアドレスを取る話をしてるわけじゃないのに
いきなりどうした

369
デフォルトの名無しさん[sage]   投稿日:2017/02/08 19:54:01  ID:zyGgo9zG.net
俺,register使ったことないが
register int a = 0;
int *b = &a;
とすると、b経由で割り当てられたCPUレジスタにアクセスできるのか?
コメント1件

370
デフォルトの名無しさん[sage]   投稿日:2017/02/08 20:15:16  ID:x9WXoVQQ.net(2)
cではregister指定された変数のアドレスは取れない
c++では取ってもいいが、取ると普通はレジスタではなくメモリ割り当てになる

そもそもregister指定しても必ずレジスタ割り当てになるわけではない
今のコンパイラの多くはregisterを無視してるらしい

371
デフォルトの名無しさん[sage]   投稿日:2017/02/08 20:21:15  ID:6Dg3FALd.net(2)
>369
それ面白いけど実装がめちゃくちゃ大変だし、そもそもメリットないだろ

372
デフォルトの名無しさん[]   投稿日:2017/02/08 20:38:12  ID:Z1e//95W.net(2)
C++では次のC++17(今年出る予定)から機能削除、かつ将来のためにキーワードは予約だよ

373
デフォルトの名無しさん[sage]   投稿日:2017/02/08 20:41:11  ID:039KZGQ+.net
register int a = 0;
int *b = &a;
これで b が a を格納してるCPUレジスタをポイントすると、
b++ とかした時に、どのレジスタを指すの? て話で困るんじゃないか。

int& b = a;
という具合に参照で受ければ何とか…。
コメント2件

374
デフォルトの名無しさん[]   投稿日:2017/02/08 20:43:52  ID:Z1e//95W.net(2)
>373
そんなの普通の変数だって未定義動作じゃん
コメント2件

375
デフォルトの名無しさん[sage]   投稿日:2017/02/08 20:47:07  ID:6Dg3FALd.net(2)
>373
> b++ とかした時に、どのレジスタを指すの? て話で困るんじゃないか。
ax 指してたら bx を指すようになる
dx 指してる時に b++ したらお約束の鼻から悪魔でいいだろ

376
デフォルトの名無しさん[sage]   投稿日:2017/02/08 21:02:48  ID:x9WXoVQQ.net(2)
なんでx86前提なんだよ
実際出来ないんだから議論の意味ないが、出来たとしても実装依存だろ
コメント1件

377
デフォルトの名無しさん[sage]   投稿日:2017/02/08 22:06:39  ID:r8a3b7fC.net
>374
おい馬鹿
int aho{};
int *p{&aho};
p++;
これが未定義動作などと規格のどこに書いてある?
コメント1件

378
デフォルトの名無しさん[sage]   投稿日:2017/02/08 22:23:33  ID:t4XC3Oio.net
p++ が動作未定儀か否かとは関係ない話だと思うが

ポインタの指し先を求めず、ポインタの演算と差分
 int a;
 int* p = &a;
 int* q = p + 1;
 q-p;

で 実体の要素数+1 までは正しく差分が取れることを保障している ってどっかであった記憶
コメント1件

379
デフォルトの名無しさん[]   投稿日:2017/02/09 02:31:40  ID:lnTHGhne.net(2)
>377
>378
んなこた知っとるわ。どのレジスタを指すのかって言ってんだからポインタの先を参照する事前提だろ?
そうじゃなきゃ単に無理やり割り当てたアドレスに+1にすればいいだけ。指し示す先に何があるかなんて関係ない。
コメント1件

380
デフォルトの名無しさん[sage]   投稿日:2017/02/09 03:48:37  ID:WRm++DjL.net(3)
int i;
int *ip=&i;
ip+1はほんとにあるんかい?
いやあるんだろうけどw

381
デフォルトの名無しさん[sage]   投稿日:2017/02/09 06:05:01  ID:4sYnDBFk.net
同等なレジスタを32個とか内蔵してて番号で区別する
RISCチップだと不自然でもない気がしてきた。
コメント1件

382
デフォルトの名無しさん[sage]   投稿日:2017/02/09 06:22:52  ID:ZHuRANtU.net
>379
>374 については?
普通の変数だって(指し先参照してないのに)未定儀動作とか言っちゃってるんですけど

383
デフォルトの名無しさん[sage]   投稿日:2017/02/09 06:42:00  ID:RO+sEjyT.net(2)
>376
> なんでx86前提なんだよ
お前の言うように実装依存なんだから例に決まってるだろ
68k なら d0, d1, ... ってもっと分かりやすいし他のプロセッサでも適当に決めりゃいいだけ
てか、ネタに突っ込むならもっと面白い奴にしてくれ

384
デフォルトの名無しさん[sage]   投稿日:2017/02/09 07:01:49  ID:RO+sEjyT.net(2)
>381
for(register int* r = &_r0; r < &_r32; r++){
*r = 0;
}
で、全レジスタがクリアできるとか便利かも
で r が _r3 辺りに割り当てられててバグるところまでがセットだよな w

385
デフォルトの名無しさん[sage]   投稿日:2017/02/09 12:57:20  ID:DuGTx+Z0.net
レジスタってそう多くないから別に…
SPARCのレジスタウィンドウ合わせて128個とかならまあ

386
デフォルトの名無しさん[sage]   投稿日:2017/02/09 14:24:27  ID:ZeoIDdik.net
つ ゼロページレジスタ

387
デフォルトの名無しさん[sage]   投稿日:2017/02/09 16:59:44  ID:m9bylyVb.net(2)
register int a = 0;
int *b = &a;
としたとき、Cではアドレスが取れないって話だったが、C++では取れる
が、次期規格でregisterは無視されるようになる・・・って話だよね

ま、仮にアドレスを取ったとしても何も問題ないように思うが
というのも、CPUの演算は通常レジスタに対してしかできないし
一方でアドレスが取れるのはメモリにあるものだけなので
普通の変数もレジスタとメモリの間を最新の値が行ったり来たりしているのが通常で
コンパイラは矛盾が起きないようなコードを吐き出すように出来ている
だからregister指定要らないよねって話になってるだろう

そもそも、可能な限りレジスタに配置する、というのがあいまいで
レジスタは有限個なのでregister指定しても必ずしもレジスタのみに配置されるかどうか
分からないしCPUにもよる
ここで、アドレスを取ったらレジスタのみに配置することが出来ないのだから
register指定であっても、「可能な限りレジスタに配置する」が出来ないということで
普通の変数扱いということで問題ない

388
デフォルトの名無しさん[sage]   投稿日:2017/02/09 17:03:46  ID:XjHAaCWU.net
>次期規格でregisterは無視されるようになる・・・って話だよね

文盲は去れ
長文で荒らすな

389
デフォルトの名無しさん[sage]   投稿日:2017/02/09 17:18:48  ID:m9bylyVb.net(2)
>372 名前:デフォルトの名無しさん[] 投稿日:2017/02/08(水) 20:38:12.66 ID:Z1e//95W [1/2]
>C++では次のC++17(今年出る予定)から機能削除、かつ将来のためにキーワードは予約だよ

は噓ということ?

390
デフォルトの名無しさん[sage]   投稿日:2017/02/09 17:24:14  ID:WRm++DjL.net(3)
registerってのを使わなきゃいんでないのw

391
デフォルトの名無しさん[sage]   投稿日:2017/02/09 17:31:18  ID:aUQtcCRM.net
規格なんて知らんがレスから想像するとこうじゃないのか?

今の規格は「可能ならレジスタに割り当てろ」で、実際のコンパイラは無視してるのが多い
事実上機能してないから次期規格では仕様変えてregister変数やめる

392
デフォルトの名無しさん[sage]   投稿日:2017/02/09 17:50:34  ID:55oKC5Ju.net
C++ではすでにregisterは無視されてて、17からはエラーになるってことだろ

393
デフォルトの名無しさん[]   投稿日:2017/02/09 18:47:17  ID:lnTHGhne.net(2)
C++11の時点でdeprecatedになってて
C++17で書いたらエラーになる
キーワードはいつか規格で何かに再利用するかもしれないから予約したまま(ユーザーが関数名などに使用出来ないまま)。
コメント1件

394
デフォルトの名無しさん[]   投稿日:2017/02/09 19:03:26  ID:QPpApk6a.net

395
デフォルトの名無しさん[sage]   投稿日:2017/02/09 20:05:28  ID:IuYXl6Zl.net
>393
registerについては、再利用の可能性というより、混乱の元だから今後は誰も触れてくれるなってところかな。

396
デフォルトの名無しさん[sage]   投稿日:2017/02/09 20:34:41  ID:wAatsUnZ.net
今、キーワードとして問題ないからそのままにしておくってことだろ
一旦キーワードでなくしてしまうと将来また使いたくなった時に大混乱するから

397
デフォルトの名無しさん[sage]   投稿日:2017/02/09 20:46:05  ID:WRm++DjL.net(3)
C++17なんてもあるのか。 ついてけんわぁ

398
デフォルトの名無しさん[sage]   投稿日:2017/02/10 12:36:17  ID:yPTk9ivW.net
register使うなら今のうち

399
デフォルトの名無しさん[sage]   投稿日:2017/02/10 16:29:47  ID:gDFEqThI.net
C++17以降のregisterは、ガチャガチャチーン!とbeep音を鳴らします

400
デフォルトの名無しさん[sage]   投稿日:2017/02/11 17:45:33  ID:B6KA1QDA.net
Mingwのgccでこんなのためしたら結構はやくなるのね。C++だと速度変わらんかったけど。
#include <windows.h>
#include <stdio.h>
int main(void) {
register int i;
DWORD t;
t = GetTickCount();
for(i=0 ; i <100000000 ; i++);
printf("%d\n",(int)(GetTickCount()-t));
return 0;
}
コメント1件

401
デフォルトの名無しさん[sage]   投稿日:2017/02/11 17:50:28  ID:o1zrWG0U.net(2)
registerネタどんだけ続けるんだ

402
デフォルトの名無しさん[sage]   投稿日:2017/02/11 18:02:59  ID:Ka66uAeU.net
>int main(void) {
> register int i;

変数を先頭で宣言しないと精神の安定が保てない病気
コメント1件

403
デフォルトの名無しさん[sage]   投稿日:2017/02/11 18:27:32  ID:2x1BPms4.net(2)
っくっだらないとこでも叩いておかないと精神の安定が保てない病気

404
デフォルトの名無しさん[sage]   投稿日:2017/02/11 18:51:03  ID:jl0P82O4.net
インデントや{}のスペース・改行でも自分のやり方と違うと喚きそうだなw
コメント1件

405
デフォルトの名無しさん[sage]   投稿日:2017/02/11 19:53:33  ID:7HNC8OW9.net
>404
違和感がでるよね。
会社でこれがうちのスタイルって強制され、それになじむと
そうじゃないスタイルのものは気持ち悪いって感じるようになった

>for(i=0 ; i <100000000 ; i++);
最近のコンパイラはまじめにやらないで、コンパイル時にiは使ってないあるね
処理省くニダってして実行コード生成してなさそうな気がするが。

406
デフォルトの名無しさん[sage]   投稿日:2017/02/11 19:59:07  ID:nnf0vKBy.net
K&R2 あたりにあわせておけば問題ないのでは?
というか,K&R2 から大幅に変えさせられるのは苦痛だな

407
デフォルトの名無しさん[sage]   投稿日:2017/02/11 21:18:53  ID:vquAI+Jk.net
21世紀にもなってK&Rとか何の冗談
変化が苦痛な老人はすっこんでて
コメント1件

408
デフォルトの名無しさん[sage]   投稿日:2017/02/11 21:22:09  ID:e+WRwiZx.net

409
デフォルトの名無しさん[sage]   投稿日:2017/02/11 21:51:35  ID:o1zrWG0U.net(2)
21世紀に相応しいスタイルを是非教えてくれ

410
デフォルトの名無しさん[sage]   投稿日:2017/02/11 22:42:56  ID:2x1BPms4.net(2)
可能な限りC/C++使わない
それが21世紀スタイル
コメント1件

411
デフォルトの名無しさん[sage]   投稿日:2017/02/11 22:58:24  ID:nOWXV3w9.net
>410
おいおい、でも、それが正しいな。

412
デフォルトの名無しさん[sage]   投稿日:2017/02/12 02:53:21  ID:guRObziH.net
正しいけど"可能な限り"の範囲がまだまだ足りない
組み込みの世界はC言語が強過ぎて未だにC++すら使えない環境がざらにあるしな

413
デフォルトの名無しさん[sage]   投稿日:2017/02/12 08:33:11  ID:XNCDxJ48.net(3)
>407
C/C++ くらいなら,K&R2 に準拠にさせてよー C#, Java も,とはいわないからさー
コメント1件

414
デフォルトの名無しさん[]   投稿日:2017/02/12 08:43:31  ID:MRPxQTsD.net
>413
C++を入れるなよ
コメント1件


415
デフォルトの名無しさん[sage]   投稿日:2017/02/12 10:10:03  ID:nF2JpTw9.net
結局C言語で全て済んでしまうからね。他は趣味。はっきりわかんだね

416
デフォルトの名無しさん[sage]   投稿日:2017/02/12 14:01:05  ID:XNCDxJ48.net(3)
>414
いっしょだよ,C++ も普通に K&R2 に似せて書くのが一番いい

417
デフォルトの名無しさん[sage]   投稿日:2017/02/12 15:47:27  ID:CF268nsq.net
>402 の「ブロック先頭で変数を定義するのは時代遅れ」ていう
指摘を受けての流れじゃないかな。

最初の使用の直前まで変数定義を遅らせることができる、
というC++での改良や、それを取り込んだC99以降で
わざわざK&R2版の書き方に制限されるのは困るという話。

おそらく、K&R2に似たスタイルが良いという主張も
「新しく追加された便利機能は使った上でK&R風のスタイル」
という意図なんだと思う。
コメント1件

418
デフォルトの名無しさん[sage]   投稿日:2017/02/12 15:59:10  ID:rZ/K+l3Q.net
>400はiの宣言を先に、tよりも先にすることで、何を試したのかってのをわかりやすくしてんだろ
K&Rなんかにこだわるよりもこういうソースの方がいいわ

419
デフォルトの名無しさん[sage]   投稿日:2017/02/12 17:25:00  ID:XNCDxJ48.net(3)
>417
当然だ

420
デフォルトの名無しさん[sage]   投稿日:2017/02/13 00:11:12  ID:ebN6PGVD.net
使う直前に変数を宣言してるとたまにgoto出来ないerrorが出るのが面倒くさい

421
デフォルトの名無しさん[sage]   投稿日:2017/02/13 11:51:26  ID:M86uydzz.net
ブロックの違う同名変数の取り違えでトラブってるのを見てから
宣言位置が不揃いなのもよくないと思うようになった

422
デフォルトの名無しさん[sage]   投稿日:2017/02/14 01:24:51  ID:xlM9Sf4d.net
それは宣言位置の問題じゃなくて、1ブロックが大き過ぎることが原因じゃないか?

423
デフォルトの名無しさん[sage]   投稿日:2017/02/14 08:51:02  ID:SrPWZnE2.net
スコープ違う同名の変数を書いたら間違えた
 ↓
宣言位置をスコープの先頭に揃えておけば俺はきっと気づけたんだ!

これがバカの思考
コメント1件

424
デフォルトの名無しさん[]   投稿日:2017/02/14 09:10:51  ID:MfKEp5BT.net(2)
お前等が宣言位置を先頭に揃えておかなかったから俺が間違えたんだ

とまでいかなければまだ許せる。

425
デフォルトの名無しさん[sage]   投稿日:2017/02/14 09:11:22  ID:H0Zx0irg.net(2)
スコープ違う同名の変数を書いたら間違えた
 ↓
次から気をつけよう!
 ↓
またミス

>423はこのタイプ

426
デフォルトの名無しさん[]   投稿日:2017/02/14 09:16:00  ID:MfKEp5BT.net(2)
423じゃないが間違えたことないな
どうやったら間違えるのか教えて欲しいくらい

427
デフォルトの名無しさん[sage]   投稿日:2017/02/14 09:25:27  ID:he6YB8dM.net
多分ブロックごとコピペしてたまたまエラーが出なかったんだろ

428
デフォルトの名無しさん[sage]   投稿日:2017/02/14 09:37:58  ID:tRUBGDEd.net
世の中には1関数が1000行を超える糞コードが存在するからな
そんな糞コードに後から修正入れようとすると信じられないようなミスも起こる

429
デフォルトの名無しさん[sage]   投稿日:2017/02/14 10:07:10  ID:H0Zx0irg.net(2)
関数の長さと糞さは別だな
無理に短くしてあちこち飛ぶコードの読みにくさったらありゃしない
コメント1件

430
デフォルトの名無しさん[]   投稿日:2017/02/14 10:25:24  ID:ze+N1Rxh.net
短いからといって読みやすいはとは限らないが、
長いと読みにくいのは確実なので無関係ではないな

431
デフォルトの名無しさん[sage]   投稿日:2017/02/14 12:52:20  ID:8LvI494R.net
>429
1行目と2行目で矛盾してるぞ

432
デフォルトの名無しさん[sage]   投稿日:2017/02/14 15:01:49  ID:Y4N6R9g2.net(2)
短く を目標にはしないが、長いと
どうしても何かの力を感じてw
短くしたくなるわなぁ

433
デフォルトの名無しさん[sage]   投稿日:2017/02/14 15:19:01  ID:t9BEI7G/.net
必死にprivate関数で小分けにしてた頃を思い出すわ
気にしなくなってprivate関数の存在価値がよく分からなくなった

434
デフォルトの名無しさん[sage]   投稿日:2017/02/14 15:31:24  ID:Y4N6R9g2.net(2)
privateとその長さは関係ないと思うが

435
デフォルトの名無しさん[sage]   投稿日:2017/02/14 17:04:37  ID:lntB2yLX.net(3)
俺も429派かなぁ
特に再利用するようなものでもないのに関数に小分けにしてもあまり意味がないし
仮に1000行あったとしても、制御構造が単純で上から下へ逐次実行するだけだったり
プログラムの読みにくさと関数の長さは根本的に関係ないと思う
関数の長さに関係なく単純に、
仕様が複雑で、ややこしいことしている箇所は、やはりややこしい
難しいアルゴリズムを使っている個所は、やはり難しい

436
デフォルトの名無しさん[sage]   投稿日:2017/02/14 17:07:50  ID:lntB2yLX.net(3)
そうはいっても100行を超える関数はさすがに書いたことないけどな
クラスビューとかでジャンプできなくなるから作業性に問題が出る

437
デフォルトの名無しさん[sage]   投稿日:2017/02/14 17:12:21  ID:lntB2yLX.net(3)
100行と書いたけど、それは1000行のまちがいだ
100行を超える関数は普通に書くことがあるな
新しいC++になってからラムダが関数内関数の代わりに使えるようになったから
こういったものを駆使すると長い関数を書いても比較的に問題が出にくくなったってのはある
メソッドにするとクラス空間が汚れるから関数内関数の方がよい場合も多々

438
デフォルトの名無しさん[sage]   投稿日:2017/02/14 19:47:15  ID:vv2eSSm9.net
100行超える関数はほとんど書かないけど、
100行超えるコメントはしょっちゅう書くな。

439
デフォルトの名無しさん[sage]   投稿日:2017/02/15 01:17:06  ID:xbLGAB7Z.net
名付けに困らないくらいの単位で処理を纏めて上にポイだな
無名ネームスペース大活躍

再利用しなくても処理を分けとくとバグを潰しやすいし

440
デフォルトの名無しさん[sage]   投稿日:2017/02/16 04:06:20  ID:6VkTpxSR.net(2)
ラムダ 入門 で検索しても簡単なサイトが見つかりません。
どこか良いサイトか書籍はありませんか。

441
デフォルトの名無しさん[sage]   投稿日:2017/02/16 04:13:34  ID:0dItl/ZH.net
入門しなきゃならん奴が使うもんじゃない

442
デフォルトの名無しさん[sage]   投稿日:2017/02/16 04:38:21  ID:6VkTpxSR.net(2)

443
デフォルトの名無しさん[sage]   投稿日:2017/02/16 12:45:23  ID:SkhlZoRn.net
よくわからんもの
ラムダ式、関数オブジェクト

444
デフォルトの名無しさん[sage]   投稿日:2017/02/17 04:01:51  ID:/gNkD5d3.net(2)
#include <iostream>
using namespace std;
int main() {
unsigned char aa=0x31;
cout << hex<<aa <<endl;
return 0;
}
なんで 31 と表示されないのでしょう

445
デフォルトの名無しさん[sage]   投稿日:2017/02/17 05:25:27  ID:Z2r3IJRX.net(2)
たぶん 1 が表示されるでしょ。
aa が char だから出力ストリームでは文字が出る。
数値を出したければ aa を int で定義するか、
cout のところで int にキャストしてやらないと。
コメント1件

446
デフォルトの名無しさん[sage]   投稿日:2017/02/17 07:07:08  ID:39ud/5Wb.net
>aa が char だから出力ストリームでは文字が出る

因果関係がよくからないのですがcharだとなぜ文字がでるの?
コメント1件

447
デフォルトの名無しさん[sage]   投稿日:2017/02/17 07:22:25  ID:fOTzzkTG.net
>446
渡した値の型によって、それをどう表示するかが異なるように作られているから。
printfという関数で出力する場合は、出力したい値のほかにそれをどういう形式で出力するかという情報を別に与えていたけど、iostreamでは、型で自動的に処理してくれる。

448
デフォルトの名無しさん[sage]   投稿日:2017/02/17 07:52:16  ID:+UDZhFA4.net
uint8_tとか使ってるとき嵌るんだよなぁ。

449
デフォルトの名無しさん[sage]   投稿日:2017/02/17 07:53:27  ID:Z2r3IJRX.net(2)
「C++では引数の型や個数が異なる同じ名前の関数をいくつも定義できて
引数の型や個数に応じた別々の動作にできる」
「関数引数の変数値が(Cとは異なり)自動的にはintに格上げされない」
くらいしか説明の文面を思いつかないけど、我ながら分かりにくいな。

coutに対する<<演算子(を実行する関数)が、
charの引数に対しては文字を、intの引数に対しては数値を
出力するよう上手いこと作られている。
ってのは「昔からそう決まっとる」式の押し付けがましい感じだし。

450
デフォルトの名無しさん[sage]   投稿日:2017/02/17 15:18:41  ID:/gNkD5d3.net(2)
>445
ども 書いた後、すぐintでやったらわかった。
"<<" 系の入出力演算子とビットシフトの問題も同じ理由か。

451
デフォルトの名無しさん[sage]   投稿日:2017/02/17 17:04:51  ID:xoJSqgdl.net
VC++の質問です。
フォームのコントロール(ボタンなど)をアンマネージクラスに保持する方法が知りたいです。

// コンストラクタの引数より、ラベルのコントロールをprivateに保存し、setLabelTextでラベルのテキストを変更するクラス
class LineController
{
private:
  System::Windows::Forms::Label^* label_;
public:
  LineControllerSystem::Windows::Forms::Label^% label);
  void setLabelText(System::String^ str); // label_のTextに引数strを設定。
};


最初に表示されるフォームのコンストラクタにて上記のクラスをnewし、そのクラスインスタンスをアンマネージクラスのシングルトンに保存しています。
シングルトンに保存直後に、シングルトン経由でsetLabelTextメソッドを実行した場合は正常label_のTextを変更可能でした。
しかしボタンクリックイベント内にて、同様にシングルトン経由でsetLabelTextをコールするとlabel_へアクセスしたタイミングで「オブジェクト参照がオブジェクト インスタンスに設定されていません。」が発生してしまいます。

本エラーを回避するにはどのような手法をとればよいでしょうか?
追跡参照(%)などを調べているのですが現状解決の糸口が見えません。
シングルトン及び上記LineController自体はできればマネージにしたくないです。。。

452
デフォルトの名無しさん[sage]   投稿日:2017/02/19 11:23:25  ID:2DCCXMeS.net
C++の話題そのものではないのですが
バブルソートとか初歩的なアルゴリズム
を優しく解説している書籍はありませんか。

Amazon見てるのですがもう少し情報がほしいです。
コメント1件

453
デフォルトの名無しさん[sage]   投稿日:2017/02/20 01:05:36  ID:aWzwD2VT.net
>452
ピタゴラスイッチでバブルソートやクイックソートの概念をグラフィカルに紹介してたよ。
それはさておき、本屋の店頭でアルゴリズムとかデータ構造とかがタイトルに含まれる本をパラパラめくって分かり易いのを探すといいかと思う。
コメント1件

454
デフォルトの名無しさん[sage]   投稿日:2017/02/21 00:15:43  ID:OFTvUoLj.net(3)
とあるOSSをとあるシステムに移植していて、
Intel(2013)やGNU(4.9系)ではコンパイルできるのに
そのシステム専用コンパイラではコンパイルできずエラーになります。
ソースコードやヘッダファイルを修正すれば通るだろうというのは経験的にわかっているのですが
どこを修正したらよいかというのを見つけ方がわからないのですが見つけ方のコツみたいなのはあるのでしょうか?
コメント2件

455
デフォルトの名無しさん[sage]   投稿日:2017/02/21 00:32:08  ID:fcoMqi2n.net
エラーメッセージの意味を考えろ

456
デフォルトの名無しさん[sage]   投稿日:2017/02/21 01:18:37  ID:9fQxfYbZ.net(2)
>454
エラーメッセージを見ないことには回答のしようがないと思うぞ

まぁ、専用のコンパイラという言い回しから察するに、C++03程度しかサポートしていない古いコンパイラでも使ってるんじゃないか?
エラーが出ている行の周辺でC++11以降の言語機能か、ライブラリでも使ってんじゃね?
コメント2件

457
デフォルトの名無しさん[sage]   投稿日:2017/02/21 01:18:57  ID:bFUDo/lz.net(2)
>454
ともかく、
そのシステム専用コンパイラ提供しているところに、世界標準のIntel(2013)やGNU(4.9系)ではコンパイル
出来るのにお前のものではできないから出来るようにしたコンパイラをよこせと激しくクレーム
コメント1件

458
デフォルトの名無しさん[sage]   投稿日:2017/02/21 01:32:37  ID:bFUDo/lz.net(2)
>456
C++11いっぱいのコードをC++03に修正するって大変そうだな

459
デフォルトの名無しさん[sage]   投稿日:2017/02/21 06:31:57  ID:OFTvUoLj.net(3)
>456
>457
メッセージは
「オーバーロードされた関数"HOGE"のインスタンスが引数リストと一致しません。」
みたいな感じです
一応C++11準拠でGNU4.9一部互換とされてるコンパイラですが。。。
コメント2件

460
デフォルトの名無しさん[sage]   投稿日:2017/02/21 08:12:09  ID:9fQxfYbZ.net(2)
>459
HOGEが想定している引数型と実際に渡している引数の型を確認
違うやつが犯人

これ以上は情報少なすぎてわからん
コメント2件

461
デフォルトの名無しさん[sage]   投稿日:2017/02/21 15:33:32  ID:rWOcc73c.net
一般論としてどういうことに注意したらいいですかって質問じゃなくて、具体的に解決してもらいたいってことなのかよw

462
デフォルトの名無しさん[sage]   投稿日:2017/02/21 22:19:07  ID:OFTvUoLj.net(3)
>460
intelコンパイラで作ったオブジェクトをnmコマンドで中見て
こうあるべきという形がわかったんであとは頑張ってみる

463
デフォルトの名無しさん[sage]   投稿日:2017/02/21 22:24:52  ID:qEEiXXQS.net
HOGEの中にHAGEが紛れ込んでるんだな

464
デフォルトの名無しさん[sage]   投稿日:2017/02/22 07:28:41  ID:F7TE97aZ.net
>453
有難うございます。
田舎ですので大きな書店には距離があります
が、行ってみます。

465
デフォルトの名無しさん[sage]   投稿日:2017/02/22 11:11:49  ID:T1tKwjPz.net(2)
>459
テンプレートが悪さしてるか const の取りこぼしかデフォルト引数のミスが起きているとエスパー
コメント1件

466
デフォルトの名無しさん[sega]   投稿日:2017/02/22 19:03:10  ID:7bpb3LbA.net
printf("%s",buf);

fputs(buf,stdout);

どっちが好き?

467
デフォルトの名無しさん[sage]   投稿日:2017/02/22 19:20:15  ID:JmFr9wbV.net
違う処理のコードを並べてどっちと言われても
コメント1件

468
デフォルトの名無しさん[sage]   投稿日:2017/02/22 19:49:35  ID:OuXxGo6B.net
>467みたいな人が居るのでprintfかな

469
デフォルトの名無しさん[sage]   投稿日:2017/02/22 20:00:39  ID:G8P7P0/x.net
どっちも最後に使ったの20年ほど前かな
コメント1件

470
デフォルトの名無しさん[sage]   投稿日:2017/02/22 21:09:01  ID:T1tKwjPz.net(2)
puts とか使ったことないわ

471
デフォルトの名無しさん[sage]   投稿日:2017/02/22 21:30:22  ID:Z0Pf8P/J.net
>469
ログ出力・エラー出力がメインでstdoutはあんまり使わないよな

472
デフォルトの名無しさん[sage]   投稿日:2017/02/22 21:36:43  ID:3nEefUGO.net(2)
putsは改行してくれるんで好きだな。fputsも。
コメント1件

473
片山博文MZ ◆T6xkBnTXz7B0 [sage]   投稿日:2017/02/22 21:39:49  ID:mKcPOHkg.net
>472
fputsは改行を追加しない
コメント1件

474
デフォルトの名無しさん[sage]   投稿日:2017/02/22 21:51:09  ID:3nEefUGO.net(2)
>473
あ そうだった。 すまん

475
デフォルトの名無しさん[sage]   投稿日:2017/02/23 00:12:45  ID:oHheANLP.net
細かいのを大量に出したいときはprintfは遅い

476
デフォルトの名無しさん[]   投稿日:2017/02/23 18:17:55  ID:2nyak89s.net(2)
class CL{
CL(int _d, string _s) : d(_d), s(_s)
{

}
public:
int d;
string s;

};
int _tmain(int argc, _TCHAR* argv[])
{
CL *cl = new CL(555, "a");←ここでエラー。なんで?
コメント1件

477
デフォルトの名無しさん[]   投稿日:2017/02/23 18:23:14  ID:sZtROie8.net
>476
こんすとらくたがprivateだから

478
デフォルトの名無しさん[]   投稿日:2017/02/23 18:23:56  ID:2nyak89s.net(2)
そういうことかあ
あざす

479
デフォルトの名無しさん[sage]   投稿日:2017/02/23 21:15:37  ID:JF3nU8GT.net(2)
生成出来ないクラスってやつね。
コメント1件

480
デフォルトの名無しさん[sage]   投稿日:2017/02/23 21:50:10  ID:33+Wu0JT.net
>479
friend なクラスからしか生成しないようにするとかはあるね

481
デフォルトの名無しさん[sage]   投稿日:2017/02/23 21:52:15  ID:JF3nU8GT.net(2)
はい そゆ事。

482
デフォルトの名無しさん[sage]   投稿日:2017/02/23 21:53:15  ID:0FbQfq3V.net
staticメソッドで生成するって形の時に使うことが多い
singletonとか

483
デフォルトの名無しさん[sage]   投稿日:2017/02/23 22:20:39  ID:v0zRNZ3l.net
ctorはpri.でメンバーはpub.って
どういうことなんだ?

484
デフォルトの名無しさん[sage]   投稿日:2017/02/23 22:26:42  ID:I6Uc1mEc.net
一つ前のレスも読めない文盲

485
デフォルトの名無しさん[sage]   投稿日:2017/02/23 22:44:21  ID:SD8t1ALL.net
質問
C/C++でランタイムで現在のメモリの状態
とくにプロセスが使える余っているメモリの量って調べ方はありますか?

486
デフォルトの名無しさん[sage]   投稿日:2017/02/24 08:45:12  ID:SswDvM4l.net
環境すら書かないと言うことは
(実質)環境非依存での方法を聞いてるんだろうな?

487
デフォルトの名無しさん[]   投稿日:2017/02/24 08:54:02  ID:See/JzpM.net(5)
そんなもん無いけどな

488
デフォルトの名無しさん[sage]   投稿日:2017/02/24 09:53:13  ID:0sr6h+Re.net
失敗するまでmallocやnewを繰り返せばええんや
コメント2件

489
デフォルトの名無しさん[]   投稿日:2017/02/24 10:43:32  ID:See/JzpM.net(5)
>488
Linuxじゃ失敗しないよ

490
デフォルトの名無しさん[]   投稿日:2017/02/24 10:53:37  ID:See/JzpM.net(5)
もたろん割り当てるアドレス空間自体が足りなくなったとか、予め上限を設定しておいたとかいうケースは覗いてな

491
デフォルトの名無しさん[sage]   投稿日:2017/02/24 11:09:14  ID:9xRtAprE.net(2)
16byteのメモリを積んだコンピュータで32byteのメモリ確保したら失敗するよね。

それはわかる。

逆に16byteのメモリを積んだコンピュータで7byteのメモリを二回確保して最初の7byteを開放した後に8byteのメモリを確保したら失敗するの?
コメント1件

492
デフォルトの名無しさん[sage]   投稿日:2017/02/24 11:41:21  ID:KhjrQy0g.net(2)
基本的にでっかくメモリ確保というプログラムは作った事がないな。
今はSTLでほげほげ追加してくイメージ。

493
デフォルトの名無しさん[]   投稿日:2017/02/24 11:47:17  ID:See/JzpM.net(5)
>491
>16byteのメモリを積んだコンピュータで32byteのメモリ確保したら失敗するよね。
そうとは限らない。一般的なLnuxの環境依存ではmallocを搭載メモリ以上行っても失敗しない
swap含めて1GBしか積んでいない環境で2GB分malloc可能。確保した領域に書き込んだタイミングで記憶する領域が足りなくなったら色々なプロセスが殺される。oom killerと言われてるもの。
>
逆に16byteのメモリを積んだコンピュータで7byteのメモリを二回確保して最初の7byteを開放した後に8byteのメモリを確保したら失敗するの?
実装による。現代的なコンピューターではページ単位(4KB)とかでカーネルからプロセスへすきなアドレスへメモリを割り当てられるから物理的なアドレスが連続している必要はない。
プロセス内に連続したアドレス空間が残っていない場合は失敗する
コメント1件

494
デフォルトの名無しさん[sage]   投稿日:2017/02/24 11:52:16  ID:NAh96dM2.net
仮想メモリというしくみで色々やってくれるようになって
キャパの限界付近ではややこしくなった印象

495
デフォルトの名無しさん[sage]   投稿日:2017/02/24 12:48:55  ID:KhjrQy0g.net(2)
家鯖は6G積んでるけどそれぐらいは行けるね。
てかkvmやってると、9Gコミットされてるもん。

496
デフォルトの名無しさん[sage]   投稿日:2017/02/24 15:10:06  ID:CcmE3pWB.net
>488
それスワップエリアのサイズ計ってるだけ

497
デフォルトの名無しさん[sage]   投稿日:2017/02/24 15:25:25  ID:nwaeFCKh.net(2)
winならGetProcessMemoryInfoなど

498
デフォルトの名無しさん[sage]   投稿日:2017/02/24 17:26:32  ID:9xRtAprE.net(2)
>493
> 物理的なアドレスが連続している必要はない
なるほど、長年の疑問が解消した。
493の読解力に感謝。
コメント1件

499
デフォルトの名無しさん[]   投稿日:2017/02/24 18:02:34  ID:See/JzpM.net(5)
>498
望む答えだったみたいで良かったわ
熱があって若干朦朧とした頭で読み返さずに書き込んだから今読み返すと誤字とか予測変換で要らない単語入ってたり(一般的なLinux環境)とか、カッコの位置が違う(4KBとかの部分)とかあったけど。

500
デフォルトの名無しさん[sage]   投稿日:2017/02/24 18:52:48  ID:dfRROZm/.net
環境依存ならPostMessageのエラーコードかな
俺はあんま理解してないけど

501
デフォルトの名無しさん[sage]   投稿日:2017/02/24 19:06:57  ID:+aOqx8nq.net
Win32なら信頼のPostMessageだな

502
◆QZaw55cn4c [sage]   投稿日:2017/02/24 22:16:12  ID:4ewDjGBZ.net
またその話題ですか‥

503
デフォルトの名無しさん[sage]   投稿日:2017/02/24 23:03:49  ID:TLhS+9k8.net
はよ10年前のソース出せよ
コメント1件

504
デフォルトの名無しさん[sage]   投稿日:2017/02/24 23:06:00  ID:nwaeFCKh.net(2)

505
デフォルトの名無しさん[sage]   投稿日:2017/02/25 07:21:27  ID:98TUEskp.net
なんで2分ちょいで出てくるかね。

506
デフォルトの名無しさん[sage]   投稿日:2017/02/25 08:14:13  ID:QoR/O5Qa.net
自演

507
504[sage]   投稿日:2017/02/25 08:21:08  ID:Jm21gNIW.net
>503>504 だ。すまんなw

508
デフォルトの名無しさん[sage]   投稿日:2017/02/26 18:42:59  ID:stmjd5mD.net
味噌県のクセにコーミソース以外のソースを使う非国民は去れ

509
デフォルトの名無しさん[sage]   投稿日:2017/03/06 07:57:48  ID:NqblWJNK.net(2)
#define ChannelBlend_SoftLight(A,B) ((uint8)((B < 128)?(2*((A>1)+64))*((float)B/255):(255-(2*(255-((A>1)+64))*(float)(255-B)/255))))
このマクロの
(2*((A>1)+64))
この部分なんですが
なんで(A+128)じゃないんですかね?

510
デフォルトの名無しさん[sage]   投稿日:2017/03/06 08:21:33  ID:1XvIZqGa.net
最初の人がコピペで作ったんでしょ。+128に定義し直してるのもあるよ

511
デフォルトの名無しさん[sage]   投稿日:2017/03/06 08:30:32  ID:cJfBjMIV.net
Aが奇数のときの動作が違うね

512
デフォルトの名無しさん[sage]   投稿日:2017/03/06 10:33:08  ID:NqblWJNK.net(2)
A、Bにはuint8を想定してますから、一瞬オーバーフローの関係かなとも思いましたが
そんなことはなく、特に深い意味はなさそうですね
ありがとうございます

513
デフォルトの名無しさん[sage]   投稿日:2017/03/13 00:19:03  ID:ZWBqluXH.net
仮想関数をオーバーライドするときはどう書くのがいい作法?
void vf()
virtual void vf()
virtual void vf() override
void vf() override

514
デフォルトの名無しさん[sage]   投稿日:2017/03/13 06:06:33  ID:IkDDkkqX.net
ハゲ先生によると最後の void vf() override が良いみたい。
『プログラミング言語C++ 第4版』p.592

加えてoverride指定の不整合をチェックするコンパイラオプションだね。
GCCのVersion 5から使える -Wsuggest-override とか。
他のコンパイラについては知らん。

515
デフォルトの名無しさん[sage]   投稿日:2017/03/13 10:43:38  ID:Kr7xjXLG.net
デストラクターに付けてる人はあんま見たこと無いな
class Derived : Base {
public:
 ~Derived() override {}
};

516
片山博文MZ ◆T6xkBnTXz7B0 [sage]   投稿日:2017/03/13 20:30:08  ID:VNPYsRzK.net(2)
Bcc55でtypeofを実現するのは不可能なのかな?

517
片山博文MZ ◆T6xkBnTXz7B0 [sage]   投稿日:2017/03/13 20:57:04  ID:VNPYsRzK.net(2)
古いコンパイラを使ってる人居る?
コンパイラの名前教えて下さい。

518
デフォルトの名無しさん[sage]   投稿日:2017/03/14 23:30:09  ID:wzywZVIy.net
老人がカセットテープデッキ求めたり
熟女モノのエロ本()を求めるような感じ?

519
デフォルトの名無しさん[sage]   投稿日:2017/03/15 01:04:07  ID:R2Ueow1p.net
古いコンパイラと自覚しつつも使ってるような人はこのスレには来ないだろ
時代遅れの遺物の話じゃ通じないし

520
デフォルトの名無しさん[sage]   投稿日:2017/03/17 11:46:00  ID:pwo5j4El.net
何でA、Bを()しないんだ?

521
デフォルトの名無しさん[sage]   投稿日:2017/03/25 21:37:15  ID:IRaGixDk.net
いまだに関数マクロ使ってるようでは
()したところで五十歩百歩

522
デフォルトの名無しさん[sage]   投稿日:2017/03/25 22:37:56  ID:9zWIhzFx.net
>460
>465
宣言とかいろいろ確認してやっぱソースはおかしくないよねってことで
サポートに調べてもらったら理由はわからないけど正しく動作する修正方法がわかったって連絡があって
最終的には詳細は書けないけどコンパイラのバグだった

523
デフォルトの名無しさん[sage]   投稿日:2017/03/26 08:58:38  ID:4rESVRzB.net
ここはお前の日記を垂れる場所じゃない
「サポートによるとコンパイラのバグだった」で済むのに
アレやってコレやってを書くな低能

524
デフォルトの名無しさん[sage]   投稿日:2017/03/27 10:03:34  ID:wSWIgauQ.net
事後報告あると参考になっていいんだけどな
今回は本人以外に状況がわからないから事後報告されてもw

525
デフォルトの名無しさん[sage]   投稿日:2017/03/30 03:06:01  ID:6sTQLdA2.net
http://codepad.org/KMQH3TsZ

ポインタをメンバに持たせた場合のget/setの書き方が分かりません
getの方は、ポインタを返すときに返した先で値を変えられないようにconstを付けたのですが、
sizePlus10のような関数を呼びたい場合に、const_castを付けて呼ぶことになってしまいました
値の変更をするのでsetを通してやるのが良いと思うのですが、何か良い書き方ありますか?

また、setの方は、一括で設定させることはできるのですが、
data->id、data->sizeの値を個別に設定したい場合、何か良い書き方はありますか?
コメントの部分のようにsetメンバ関数を何個も書く方法しか思いつきません
コメント2件

526
デフォルトの名無しさん[sage]   投稿日:2017/03/30 07:50:43  ID:GtG5BmiK.net
getDataの結果を修正したいのだから
杓子定規にgetDataの戻りにconst付けるのを止めればいいのではないか

そう言えばC++17(ドラフト)もstring::dataの戻りが非constに修正されたような
コメント1件

527
デフォルトの名無しさん[sage]   投稿日:2017/03/30 08:08:59  ID:KJlpKUaR.net
memcpy w

528
デフォルトの名無しさん[sage]   投稿日:2017/03/30 10:48:22  ID:JHpE2Dpf.net
>525
一般論として形でただ覚えるのではなくて意味を理解しよう
理解があやしいから設計の一貫性がなく混乱してるようにみえる
・Dataをポインタで所有するのはなぜ
・ゲッター/セッターを使ってアクセスするのはなぜ
・ゲッターで返す値にconstをつけるのはなぜ
・sizePlus10がData*を受けとるのはなぜ

MyClassの設計方針にあわせるならsizePlus10をDataではなくMyClassを受けとるようにして
void sizePlus10(MyClass & mc)
{
Data newdata = { mc.getData()->id, mc.getData()->size + 10 };
mc.setData(newdata);
}
あるいは別の関数を作って
void MyClassSizePlus10(MyClass & mc)
{
Data newdata = *mc.getData();
sizePLus10(&newdata);
mc.setData(newdata);
}

これが変だとか非効率だとか思うなら
MyClassの設計が要求にあってないのでそっちを変更する
コメント1件

529
デフォルトの名無しさん[sage]   投稿日:2017/03/30 20:11:34  ID:irpIFLVN.net
>528
おまえは質問の意図を理解しよう

>525
そのsetgetでいいんじゃない?ただそのgetは俺だったらreferにするな
ついでにsetget両方使えるようにdata* operator->()みたいなの実装かな。というかむしろそっちでアクセスする方向にするな
あとはattachdetach作っておいてm_dataを置換できるにようにしちゃうな
その手のスマートポインタは至るとこで使われてるからこんなとこで聞かずにどっかのライブラリの参考にしたら?

メンバのコピーはpragma pack1でstructしておいてmemcpy
コメント3件

530
デフォルトの名無しさん[sage]   投稿日:2017/03/30 23:27:09  ID:O3+3nsIM.net
>529
>メンバのコピーはpragma pack1でstructしておいてmemcpy

それをすると何がいいことあるのか?

531
デフォルトの名無しさん[]   投稿日:2017/03/30 23:45:25  ID:s+CP+YQd.net
こういえクソみたいな方法を自慢気に語り出す奴が居るところかC++の最もクソな所だよね
コメント1件

532
片山博文MZ ◆T6xkBnTXz7B0 [sage]   投稿日:2017/03/30 23:51:55  ID:2hi+y029.net
デフォルトコピーコンストラクターとか構造体代入とか知らないんだろう。
コメント1件

533
デフォルトの名無しさん[sage]   投稿日:2017/03/31 00:14:17  ID:5j4NF4+Z.net
>532
>構造体代入とか知らないんだろう
ほうほう、それは何ですか?

534
デフォルトの名無しさん[sage]   投稿日:2017/03/31 01:59:49  ID:OFYzpq31.net
やべえなおい糞コードの臭いがプンプンしやがるぜ

535
デフォルトの名無しさん[sage]   投稿日:2017/03/31 02:09:29  ID:DQgqVTGo.net
>526-529
ありがとうございます

今まではとりあえずget/setを書いてgetにはconstを付けとけば良いみたいな認識でしたが、
想定されるクラスの使われ方に合わせて適宜変更するべきでした

MyClassのようなget/setの分け方をすると、
sizePlus10のような関数やsetで不便になってしまうので、
constを付けないget/set共用のものにしてそれを通してアクセスさせるのが適切でした
( getData()でアクセスする場合、Data * const getData() const { /**/ } みたいな )
とても参考になりました

536
デフォルトの名無しさん[sage]   投稿日:2017/03/31 11:52:48  ID:xItn/dk+.net
>531
くそじゃない方法をおしえて
コメント1件

537
デフォルトの名無しさん[sage]   投稿日:2017/03/31 12:09:56  ID:c13jjk6+.net
C#じゃないからないでしょ

538
デフォルトの名無しさん[]   投稿日:2017/03/31 13:26:56  ID:CbPadW0u.net
>536
コピーは=使え
というだけの話

539
デフォルトの名無しさん[sage]   投稿日:2017/03/31 13:38:11  ID:2wgHKgmk.net
>529
> メンバのコピーはpragma pack1でstructしておいてmemcpy
これ俺も理由知りたい

540
片山博文MZ ◆T6xkBnTXz7B0 [sage]   投稿日:2017/03/31 17:24:06  ID:tvggMnLQ.net(6)
typedef struct MY_STRUCT
{
int ch;
} MY_STRUCT;

MY_STRUCT a,b;
a.ch = 0;
b = a; //代入できる
コメント1件

541
デフォルトの名無しさん[sage]   投稿日:2017/03/31 19:17:35  ID:Xv9Etv1i.net
>529
> おまえは質問の意図を理解しよう

なんか無駄に上から目線だなぁ
って思ったら

> メンバのコピーはpragma pack1でstructしておいてmemcpy

単なる老害だったでござる

542
片山博文MZ ◆T6xkBnTXz7B0 [sage]   投稿日:2017/03/31 19:19:25  ID:tvggMnLQ.net(6)
構造体の代入ができなかったのは大昔のことだ。

543
◆QZaw55cn4c [sage]   投稿日:2017/03/31 19:35:02  ID:BClOXWeK.net
>540
それ,K&R1 から堕落したよね
コメント1件

544
片山博文MZ ◆T6xkBnTXz7B0 [sage]   投稿日:2017/03/31 19:40:25  ID:tvggMnLQ.net(6)
構造体定義を#include <pshpack1.h>と#include <poppack.h>で囲むのは、スピードよりもメモリー効率を優先するときにする。

545
片山博文MZ ◆T6xkBnTXz7B0 [sage]   投稿日:2017/03/31 19:44:56  ID:tvggMnLQ.net(6)
あるいは構造体のレイアウトを分かりやすくするときにパッキングを指定する。

546
片山博文MZ ◆T6xkBnTXz7B0 [sage]   投稿日:2017/03/31 19:46:22  ID:tvggMnLQ.net(6)
>543
堕落ではない。進歩だ。
コメント1件

547
デフォルトの名無しさん[sage]   投稿日:2017/03/31 19:49:13  ID:RKtYGe+y.net
> スピードよりもメモリー効率を優先するときにする
20年くらい前まではそういう老人もいたね
今はメモリレイアウトを固定したい時にしか使わないけど

548
片山博文MZ ◆T6xkBnTXz7B0 [sage]   投稿日:2017/03/31 19:58:28  ID:tvggMnLQ.net(6)
#pragma 直接指定は礼儀が悪い、昔のやり方だ。

549
デフォルトの名無しさん[]   投稿日:2017/04/01 02:25:44  ID:m99QLuku.net
メモリ効率だけの問題なら大抵の場合は順番入れ替えるだけで問題ないしな

550
◆QZaw55cn4c [sage]   投稿日:2017/04/01 07:47:47  ID:1ZzXEpHO.net(2)
>546
サイズが無限にのびるかもしれないものをコピーするなんてだめだよ
昔はね,構造体はポインタを介してしかつかえなかったんだよ
コメント1件

551
デフォルトの名無しさん[sage]   投稿日:2017/04/01 08:31:33  ID:AOt54aKT.net
そうそう
スタックに自動変数とかも言語道断
全部staticじゃなきゃね
コメント1件

552
◆QZaw55cn4c [sage]   投稿日:2017/04/01 13:26:49  ID:1ZzXEpHO.net(2)
>551
スタックに自動変数はあたりまえだよ‥static おじさん,じゃないつもりなんだが‥
構造体はポインタで扱うべきもので,実体をコピーするのはなるたけ避けたいね
C++ では void f(const C &arg) って,可能ならば const と参照の縛りをできるだけいれるよね,余計なコンストラクタを走らせないために

K&R1 は教育的な配慮に優れた実装だと思うんだ‥

553
デフォルトの名無しさん[sage]   投稿日:2017/04/02 14:13:23  ID:SQNmFUeK.net
SOCKADDRが一言
コメント2件

554
◆QZaw55cn4c [sage]   投稿日:2017/04/02 17:06:04  ID:XkKG9LQx.net(2)
>553
手元のソースをみると
clientSocket = accept(serverSocket, (LPSOCKADDR)&clientSockAddr, &addrLen);
とか
if (connect(destSocket, (LPSOCKADDR)&destSockAddr, sizeof(destSockAddr)) == SOCKET_ERROR) {
とか,構造体のポインタを渡しているね
由緒正しき Berkeley socket では,構造体をコピーするなんて教育的ではない書き方は許していないよ

555
デフォルトの名無しさん[sage]   投稿日:2017/04/02 17:31:42  ID:QFdfGGyb.net(2)
つまり>553はK&Rおじさんにも劣る存在

556
デフォルトの名無しさん[sage]   投稿日:2017/04/02 18:21:59  ID:XkKG9LQx.net(2)
K&R1 おじさん,と
K&R2 おじさん
は区別したまえ,若造

557
デフォルトの名無しさん[sage]   投稿日:2017/04/02 19:26:19  ID:QFdfGGyb.net(2)
どっちも時代遅れの老人でしょ
K&Rなんて昔存在したという噂でしか知らない
万葉集とか古事記みたいなもの?
コメント1件

558
デフォルトの名無しさん[]   投稿日:2017/04/02 20:22:15  ID:II71H9Zi.net
func1(a, b)
  int a;
  long b;
{
}

559
デフォルトの名無しさん[sage]   投稿日:2017/04/02 22:22:37  ID:JMz4l+Qd.net
> &destSockAddr,
> sizeof(destSockAddr)

由緒正しきBerkeley Socketも昔はこういう書き方したな
コイツは進歩が20年前で止まってるのか
今この書き方する奴は死刑でいい
コメント1件

560
デフォルトの名無しさん[sage]   投稿日:2017/04/02 23:11:21  ID:zmcqSa2a.net
便乗で申し訳ないが、値渡し、参照渡し、ポインタ渡し、の話で
ポインタ渡しといっても、C++の場合はナマポは嫌われて、スマポを使いましょう
ってことになっていると思うんだけど、これはどう渡すのが普通?
スマポを値渡しするのか、参照渡しするのか
はたまたスマポを剥いで、ナマポで渡すのか
個人的に統一しきれないっつーか
所有権やら生存期間やらリソース管理やらが関係してくるなら
スマポで渡すI/Fじゃないとまずいだろうし
逆にそういうのが関係ないなら、スタック上の自動変数を渡したいとかも考えると
ナマポで渡すI/Fのほうが都合が良かったり、どーなんだろ
一度ナマポに戻すと二度とshared_ptrに変換できないって制限がね
言語側でなんとかせずに、ライブラリで解決しようとした弊害かな
ちょうどよいバカよけなんかも知らんが
コメント1件

561
デフォルトの名無しさん[sage]   投稿日:2017/04/02 23:13:25  ID:6tq4Ne3Z.net
参照一択


562
デフォルトの名無しさん[sage]   投稿日:2017/04/02 23:24:57  ID:xNqaI0VS.net
>スマポを値渡しするのか、参照渡しするのか
>はたまたスマポを剥いで、ナマポで渡すのか
スマポの値渡しと生保は使い分けが必要だが、スマポの参照渡しだけはアホの所業。
とスコットメイヤーが言っていたような

563
デフォルトの名無しさん[]   投稿日:2017/04/02 23:43:46  ID:yhAnz0vw.net
>560
shared_ptrはその名の通り所有権を共有する場合のみ使うもの
で、そういう場合は値渡しでもいいよ。中でmoveすれば
所有権を共有しないなら、nullptrを許容するならナマポそうじゃないなら参照
あんまり無いけど所有権を渡した先に移動させるならunique_ptr

564
デフォルトの名無しさん[sage]   投稿日:2017/04/02 23:58:32  ID:TsXu0WT4.net
所有権渡したくないならunique_ptrで持っている呼び出し元がgetでナマポを渡すかdereferenceして参照渡すかだな

565
デフォルトの名無しさん[sage]   投稿日:2017/04/03 00:00:55  ID:Jbp2gIKE.net
ナマポで渡してもshared_ptrを再取得する方法はあるだろ
まあ前提がいるが

566
デフォルトの名無しさん[sage]   投稿日:2017/04/03 00:34:15  ID:qQvnlfYK.net
うむむ、なるほど
ポインタらしき物にこれだけ多くの種類があってI/Fで縛ってしまうのは
一見面倒そうで、最近の流行というか静的型言語的には
型安全と見るべきなんだろうかしら
安易なGC言語より良いかもしれん、単純に情報量は多い
また一つC++が好きになった
うっかり循環参照したら怖いとか
コンパイラのバージョン違いでSTLやmallocの実装に
差異が有ることを前提に組まなきゃならないとか、玉にキズもあるけれど

567
◆QZaw55cn4c [sage]   投稿日:2017/04/03 06:55:53  ID:VwtRd/3a.net(3)
>559
C/C++ で生書きするなら今もおなじだよ

568
デフォルトの名無しさん[sage]   投稿日:2017/04/03 07:40:50  ID:dyU+EMvQ.net
型に対してじゃないのに括弧つけるの?

569
デフォルトの名無しさん[sage]   投稿日:2017/04/03 08:48:24  ID:WaUkCV9r.net
そこはインデントや{}の位置が人によって違ったりするアレだろ

570
◆QZaw55cn4c [sage]   投稿日:2017/04/03 19:32:41  ID:VwtRd/3a.net(3)
>557
K&R2 は C89 準拠だよ‥C89 が時代遅れだというけれども,いろんなことは C89 のときからやってきていて,C99 で追認された,というだけだよ
コメント1件

571
デフォルトの名無しさん[sage]   投稿日:2017/04/03 20:29:22  ID:5hra1L5C.net
>570
あいわかった
お前は今後「K&R1おじさん」(略して「K&Rおじさん」)な
どうせ定数defineや関数マクロまみれなんでそ
コメント1件

572
◆QZaw55cn4c [sage]   投稿日:2017/04/03 21:53:46  ID:VwtRd/3a.net(3)
>571
略しないほうがいいよ‥
K&R2 おじさん=C89 はまっとうなCer, K&R1 おじさんは時代遅れ,この二つは全然違うよ
コメント1件

573
571[sage]   投稿日:2017/04/03 22:02:42  ID:ldINtwle.net
>572
つまりお主(K&R1おじさん)は
K&R2おじさんが自分と一緒くたにされることを
申し訳ないと感じてるのだな!?

(>543)
> それ,K&R1 から堕落したよね

(>550)
> サイズが無限にのびるかもしれないものをコピーするなんてだめだよ

(>552)
> K&R1 は教育的な配慮に優れた実装だと思うんだ‥

574
デフォルトの名無しさん[sage]   投稿日:2017/04/03 22:14:40  ID:Vb9tETQW.net
voidを返す関数には感心したな

生成されるコードは大して変わらないかも知れんけど

575
デフォルトの名無しさん[sage]   投稿日:2017/04/04 01:00:11  ID:jC2xfRDP.net
関数プロトタイプを除けば、K&R1で十分かもしれないな
voidを返す関数? int でいいんだよ
コメント1件

576
デフォルトの名無しさん[sage]   投稿日:2017/04/04 15:11:19  ID:AeH3x9f/.net
戻り値をどうするかはcallerの勝手だからな

577
◆QZaw55cn4c [sage]   投稿日:2017/04/04 19:47:09  ID:xNF4clmU.net
>575
確かに関数プロトタイプは有用だね,これがないと結構ミスるかもしれないね
void を返す関数?int でいいんだよ

578
デフォルトの名無しさん[sage]   投稿日:2017/04/04 20:27:50  ID:/PIYb7TP.net
int funca01(...);
int funca02(...);
int funca03(...);

579
デフォルトの名無しさん[sage]   投稿日:2017/04/04 23:08:17  ID:YUY8Mb54.net
老人は意味とか概念を理解しようとしないから嫌
「bool? intでいいだろ」
「forループ?本質はgotoと同じ」
「enumなんてintでいいだろ」
ホントもう存在が害悪
コメント2件

580
デフォルトの名無しさん[sage]   投稿日:2017/04/05 00:33:27  ID:DVg/5L4N.net(2)
>550
何が「昔はね」だよw
Qちゃんその当事Cなんて触ってなかったろ?
アンタ最近(たかだか数年?)プログラミングで遊び出しただけの人でしょ
コメント1件

581
デフォルトの名無しさん[sage]   投稿日:2017/04/05 02:38:54  ID:ZJf7oEgw.net
>579
「static const intなんてenumでいいだろ」
こうですね

582
デフォルトの名無しさん[sage]   投稿日:2017/04/05 04:30:52  ID:ni2ET+sb.net
奴らは#defineだ

583
デフォルトの名無しさん[sage]   投稿日:2017/04/05 08:14:48  ID:Bh5NPBNH.net
マジックナンバー直書きでしょ


584
デフォルトの名無しさん[sage]   投稿日:2017/04/05 08:19:06  ID:qVk1sCwA.net
K&Rだと〜
c89だと〜
過去の異物がまだ現役だと信じて話してけるのがうざい
コメント1件

585
デフォルトの名無しさん[sage]   投稿日:2017/04/05 09:06:55  ID:ncDYJBnp.net(2)
それ言うならC自体が。
いまさらC++と互換性のないCを選ぶ理由がない。
コメント2件

586
デフォルトの名無しさん[sage]   投稿日:2017/04/05 10:35:04  ID:k0RY104y.net
>585
C++と互換性のないCってどんなの?

587
デフォルトの名無しさん[sage]   投稿日:2017/04/05 19:40:11  ID:IM5122PI.net
ベターC的な所全般だな
範囲forとか2進リテラルとかスレッドライブラリとか参照とか
Cにはnullptrすら無いし細かいところでは条件演算子が右辺値とか
ようするに別言語
オーバーロードに対するtgmathとかもう糞の臭いしかしない

588
◆QZaw55cn4c [sage]   投稿日:2017/04/05 19:44:22  ID:bDXscs5n.net(5)
>585
たしかに,C99 の数々の改悪は C++ との互換性を考慮していない悪手の連発,ほとほと困ってしまう

>584
C++ とほどほどの交換性のある C89 が最良だよ

589
◆QZaw55cn4c [sage]   投稿日:2017/04/05 19:46:32  ID:bDXscs5n.net(5)
>580
「K&R1 は構造体は基本的にポインタでしか扱えない」制限なんて,使ってもいなかったらわからないだろう?

590
580[sage]   投稿日:2017/04/05 20:02:06  ID:DVg/5L4N.net(2)
え?Qちゃんてサンデープログラマじゃないの?
職業プログラマでもないし
プログラミング暦せいぜい10年未満だと思ってた
コメント1件

591
◆QZaw55cn4c [sage]   投稿日:2017/04/05 20:07:28  ID:bDXscs5n.net(5)
>579
>「forループ?本質はgotoと同じ」
そんなことはいわないとおもうよ,K&R1 の時代から for はあるしね
きがつくと for(;;) { } と break だけで書いてたりするのはあるかもね,while 使いにくいとか,do while なんかマクロの中でしかつかわない,とかさ

enum?
#define でいいとおもうよ‥

592
◆QZaw55cn4c [sage]   投稿日:2017/04/05 20:08:45  ID:bDXscs5n.net(5)
>590
サンデーだよ
でも長いサンデーなんだ‥

593
デフォルトの名無しさん[sage]   投稿日:2017/04/05 21:26:45  ID:Kw8eDt7v.net
ニートじゃ分からんことも多いのでは

594
◆QZaw55cn4c [sage]   投稿日:2017/04/05 22:05:58  ID:bDXscs5n.net(5)
たしかにそのとおりだが,K&R2 = C89 こそ必要十分,ということはわかるよ

595
デフォルトの名無しさん[sage]   投稿日:2017/04/05 22:10:26  ID:mGFW5fgT.net(2)
そういうこと言ってるとそのうち技術についていけなくなるよ
コメント1件

596
デフォルトの名無しさん[sage]   投稿日:2017/04/05 22:22:23  ID:ncDYJBnp.net(2)
C99やC11って、新しい技術とかそういうんじゃないじゃん。

597
デフォルトの名無しさん[sage]   投稿日:2017/04/05 22:40:44  ID:mGFW5fgT.net(2)
規格

598
デフォルトの名無しさん[sage]   投稿日:2017/04/06 10:47:58  ID:jz0x7tjm.net
企画ものは好きじゃないからな

599
デフォルトの名無しさん[sage]   投稿日:2017/04/06 16:35:26  ID:w+UX2Wix.net
ころころ変わるんだから最新もクソも無いわけだが

pakomamaはガチらしいな

600
◆QZaw55cn4c [sage]   投稿日:2017/04/06 20:02:44  ID:Uar4T1Gl.net(2)
>595
別についていけなくてもいいよ,その殆どは自分には要らないものだから
それはそうと,これは!とおもう新しい技術って最近はどんなものがあるの?

601
デフォルトの名無しさん[sage]   投稿日:2017/04/06 20:16:13  ID:kFToYptL.net
まず、C#のasyncだのawaitだのはC++にも欲しいところ
というか、取り入れる方向で議論していたような
どのみちQZには使いこなせない機能だから知らなくてもよいけど
知れば発狂することだろう
コメント1件

602
◆QZaw55cn4c [sage]   投稿日:2017/04/06 20:21:15  ID:Uar4T1Gl.net(2)
まずC#をやらないとね‥でも Java に走ってしまった‥Java に同じようなのはないの?

603
デフォルトの名無しさん[]   投稿日:2017/04/06 22:33:11  ID:Ao1zg6OQ.net
>601
coroutineの事なら根本的な所が違うから勘違いしないようにな

604
デフォルトの名無しさん[sage]   投稿日:2017/04/07 20:08:34  ID:cdWiLUH2.net
馬鹿の特長:目的/機能の違いと実現するための実装の違いの区別がつかない

605
デフォルトの名無しさん[sage]   投稿日:2017/04/08 12:56:12  ID:TFmwEDa6.net
C#のawaitはGUIのスレッドを意識出来るので有用だが
C++のawaitはただ裏で走らせるだけの機能的には劣化版な気がしてならない
コメント2件

606
デフォルトの名無しさん[sage]   投稿日:2017/04/08 13:14:20  ID:bfo0YVHI.net
>605
c++で標準的なgui使うとすると何になるの?

607
デフォルトの名無しさん[sage]   投稿日:2017/04/08 13:49:52  ID:xnWSKOe7.net
>605
そりゃ C++ と C# のポリシーの違いだろ

608
デフォルトの名無しさん[sage]   投稿日:2017/04/09 22:32:13  ID:nTEmq1X3.net
C使ってる人で変数宣言を途中に書く人いる?
やめた方がいい?

609
デフォルトの名無しさん[sage]   投稿日:2017/04/09 23:00:21  ID:gthRNL4S.net
むしろそうして欲しいかな
勿論ブロックスコープは意識してる前提で

610
デフォルトの名無しさん[sage]   投稿日:2017/04/14 09:11:56  ID:ezi5K97R.net
初期のCはブロック先頭しかコンパイルが通らない
コンストラクタも型推論もないのに途中に置くメリットが少ない
初期化漏れというモンスターの隠れ家になりやすい
コメント3件

611
デフォルトの名無しさん[sage]   投稿日:2017/04/14 10:33:55  ID:L6e5ZQwW.net(2)
一応Cで書くときは関数ブロック直後に書いてるけど、それはそれでforで使うiとかを使い回す事になるから、C++みたくプログラマの良識を信じて(ブロックを意識して変数宣言すると信じて)、好きな場所で宣言出来た方が正解なんだろうな。

612
デフォルトの名無しさん[sage]   投稿日:2017/04/14 10:35:17  ID:L6e5ZQwW.net(2)
出来た方がと言うか、今は出来るんだから、した方が正解に訂正。

613
デフォルトの名無しさん[sage]   投稿日:2017/04/14 12:59:25  ID:Hdztr2ik.net
出来ることと乱用していいことはイコールでない
一瞬だけの一時変数を直前で宣言するのならありだけど
関数全体で使うなら頭で宣言すべきだし、そもそも中間で宣言するような長い関数は
短くなるよう見直すべき

614
デフォルトの名無しさん[sage]   投稿日:2017/04/14 13:04:43  ID:xSRtCFhF.net
魔法の言葉
ケースバイケース

615
デフォルトの名無しさん[sage]   投稿日:2017/04/14 19:32:18  ID:UiWlchtO.net
スコープは可能な限り狭く

おじいちゃんの遺言

616
デフォルトの名無しさん[sage]   投稿日:2017/04/14 19:38:55  ID:PNQsiXg9.net
初期化漏れはブロック先頭でしかかけない方が起こしやすいだろう

長い範囲で使う変数でも、変数ははじめて使うところで宣言した方が分かりやすいしバグも減る。

617
デフォルトの名無しさん[sage]   投稿日:2017/04/14 20:04:35  ID:Z/bjVn5R.net(2)
初期化忘れ防止はどこで宣言したってあんま関係ないというか
大差ないだろうな実際
必要になった時点で宣言するってことでよいと思う
さもないと上手くいかない場合もあるし
いちいち使いもしない「ダミーの値」で初期化するのは馬鹿らしいし
余計にバグりそう

618
デフォルトの名無しさん[sage]   投稿日:2017/04/14 20:13:31  ID:Z/bjVn5R.net(2)
auto result = func();
まぁこういう風にしたいわな

int result = 0;
・・・
result = func();
↑その「0」って初期化値は何なんですか、何を意味した「0」なんですか
では0の代わりに1で初期化したらどうなるんですか
この初期化値の意味は一体何なんですか
ってことになるしな
結局「0」とか「1」とかの初期化値はダミーでありプログラム上なんの意味もなかったりするし
逆に初期化値に意味がある場合もあるから余計にややこしくなる
bool flag = false;
if( func() )
{
  flag = true;
}
これらを区別したいから必要になった個所で宣言に一票
コメント1件

619
デフォルトの名無しさん[sage]   投稿日:2017/04/14 21:45:43  ID:spQE74XB.net
老人の「昔は良かった」を見て顔真っ赤にして論破しようとマジレス
みっともない

620
デフォルトの名無しさん[sage]   投稿日:2017/04/14 23:47:26  ID:9eRQSDOY.net
必要なものを必要なときに宣言する
それだけの話

621
デフォルトの名無しさん[sage]   投稿日:2017/04/15 09:16:54  ID:RtikNDCG.net(2)
>618
>この初期化値の意味は一体何なんですかってことになるしな

勝手に無駄な初期化しておいてどれだけ頭が悪いんだぜ
ぜんぜややこしくない
お前が馬鹿なだけ

622
デフォルトの名無しさん[sage]   投稿日:2017/04/15 09:26:22  ID:Af1/s0zG.net(3)
もともとが
初期化忘れを防ぐためには関数の先頭で宣言〜
への反論だったからだぜ

623
デフォルトの名無しさん[sage]   投稿日:2017/04/15 09:41:32  ID:RtikNDCG.net(2)
>622
日本語もわからないチンパンは無理して
コンピュータ使わなくても
祖国でオナニーしてればいいんだぜ

624
デフォルトの名無しさん[sage]   投稿日:2017/04/15 09:50:31  ID:Af1/s0zG.net(3)
君の疑問がどこにあるのか本当にわからないからどうでもよい

625
デフォルトの名無しさん[sage]   投稿日:2017/04/15 10:02:51  ID:Af1/s0zG.net(3)
それでもヒントとして>610への反論だったということだけは言っておこうか
「途中で宣言すると初期化もれしやすい」という風なことが書いてあるが
逆に>610は何故、先頭で宣言したら初期化漏れしにくい、と考えたか
どういったコードを想定しているかってことだな
要するに>610はブロックや関数の先頭だけ見れば初期化漏れしていることが直ぐわかると便利だね
って言いたいんだろうけど、それはどういうコーディングルールの元に言えることか
ということだな

626
◆QZaw55cn4c [sage]   投稿日:2017/04/16 17:51:30  ID:3PeEvH/A.net
for(int i = ...; ; ) が書けるようになったのは素直にありがたいな,と感じている
コメント1件

627
デフォルトの名無しさん[sage]   投稿日:2017/04/23 23:52:45  ID:IUq/7GPJ.net
>626
脳の進化が20年前で止まったチンパンはc89でも使ってろ
コメント1件

628
デフォルトの名無しさん[sage]   投稿日:2017/04/24 20:45:20  ID:et30sNFg.net
うきー

629
>627
C99 or later で便利になったことなんて,そんなにないんだよね‥

630
デフォルトの名無しさん[sage]   投稿日:2017/04/25 06:08:12  ID:X14wy5zc.net
数値計算とか特殊用途なライブラリ追加ってイメージ。
そりゃ、手間の割に汎用性がなかったら対応コンパイラも出てこないわ。

631
デフォルトの名無しさん[sage]   投稿日:2017/04/25 22:55:58  ID:EbISA0IE.net
インライン関数も行コメントもboolもrestrict も無しで
どうやってプログラム書いてんのか想像もつかない
snprintf無しとか無理ゲーだろ
コメント1件

632
デフォルトの名無しさん[sage]   投稿日:2017/04/26 02:18:40  ID:Kw1ZNGm3.net
restrict無しが想像つかないってどういうことだろ

633
デフォルトの名無しさん[sage]   投稿日:2017/04/26 09:07:13  ID:bRGeq+mw.net
restrict使ったことないなあ
大きく最適化されるの?

634
デフォルトの名無しさん[sage]   投稿日:2017/04/26 09:13:52  ID:rDz6/6sg.net
最適化はあんま気にしてなくて意味的なものかな
memcpyとmemmoveみたいな

635
デフォルトの名無しさん[sage]   投稿日:2017/04/26 09:20:57  ID:A4NmaPdj.net
そう言う機能はメーカー独自実装でC99決まるずっと前からスタンダードだったから、C99って実感が無い。。。

636
デフォルトの名無しさん[sage]   投稿日:2017/04/26 11:36:23  ID:O9yeoh6Z.net
>631
いやいやそれはさすがに想像力足りなくね?

snprintf無しは無理ゲーなのは同意するが

637
デフォルトの名無しさん[sage]   投稿日:2017/05/05 00:51:04
void func(hoge)
int hoge;
{}
こんな書き方があったん?
コメント1件

638
デフォルトの名無しさん[sage]   投稿日:2017/05/05 01:30:10
>637
詳しくは k&r style とかでググればいいけど今時知る必要はほぼないと思う

639
デフォルトの名無しさん[sage]   投稿日:2017/05/05 15:05:47
K&R1 だね、引数の型チェックができないから不便かつミスを誘発しやすい

640
デフォルトの名無しさん[sage]   投稿日:2017/05/07 00:55:58
使われなくなった過去の異物に優劣語り出すとか
老人やべーな

641
片山博文MZ [sage]   投稿日:2017/05/07 00:58:01
×異物
○遺物

642
デフォルトの名無しさん[sage]   投稿日:2017/05/07 01:41:21
誰も優を語ってない訳だが

643
デフォルトの名無しさん[sage]   投稿日:2017/05/07 15:54:40
ストラウストラップの本って読む価値ありますか?

644
デフォルトの名無しさん[sage]   投稿日:2017/05/07 22:28:38
著書全般の基本的な傾向としては万人向けの価値はない
物事の意味や本質を学び考え悩み理解しようとする人向けの本であって
うわべだけの丸暗記やコピペで即結論や結果を求める人向けの本ではないから
コメント1件

645
デフォルトの名無しさん[sage]   投稿日:2017/05/07 22:36:06
読む価値はあるが嘘が多いので騙されない注意が必要
コメント1件

646
デフォルトの名無しさん[sage]   投稿日:2017/05/07 23:30:36
>644
>645
上級者向けの本みたいなので
買うのは先に延ばしたいと思います...
一冊高いのもありますが
サンクスです

647
デフォルトの名無しさん[sage]   投稿日:2017/05/19 15:26:03
はぁ〜〜〜〜
安易にC++に手を出すんじゃなかった

648
デフォルトの名無しさん[sage]   投稿日:2017/05/20 12:15:32
変人や御用達の言語だからな
馬鹿のくせにプライド高い老害しか使ってないイメージ
コメント1件

649
デフォルトの名無しさん[sage]   投稿日:2017/05/20 12:51:51
>648
その手の人らの声が大きいだけだよ。特にこんなところでは。

650
デフォルトの名無しさん[sage]   投稿日:2017/05/20 18:23:23
みんな黙ってC++だよ

651
デフォルトの名無しさん[sage]   投稿日:2017/05/23 00:42:13
ちょっとした確認なんだけどさ、
デストラクタが空っぽ (デフォルトデストラクタ) でもオブジェクトを後始末するための何らかの処理はするよね?

よくあるスライシングの問題で、

・クラス A をクラス B が継承している
・クラス A のデストラクタは virtual が付いていない
・クラス B のデストラクタはデフォルトデストラクタ
・クラス B はメンバ変数を持っていない
・B* を A* にキャストしたものを delete

という状況だと見かけ上はクラス B のオブジェクトには後始末すべきものは何もないように見えるけど、
デストラクタが呼ばれないのはやっぱあかんよな?
コメント2件

652
デフォルトの名無しさん[sage]   投稿日:2017/05/23 04:48:39
うん

653
デフォルトの名無しさん[sage]   投稿日:2017/05/23 09:20:18
>651
はい
規格上もデストラクタがvirtualでないBのオブジェクトをA*に入れてdeleteした場合未定義動作だよ

654
0682/653" rel="noopener noreferrer" target="_blank">>>653
横からだけど、それまじ?
出来れば、規格で書
[]   投稿日:0000/00/00 00:00:00

655
デフォルトの名無しさん[sage]   投稿日:2017/05/23 13:25:39  ID:I6yYOIGb.net
>規格で書かれてる場所教えて欲しい

delete式の説明の最初のページに書かれていることが探せないというのは
場所を教えられたところでそもそも規格を保有していないのではないか

656
デフォルトの名無しさん[sage]   投稿日:2017/05/23 13:25:57  ID:YY4qnA2y.net
>656
意図して作ったの?バグじゃなくて?
コメント1件

657
デフォルトの名無しさん[sage]   投稿日:2017/05/23 15:16:19  ID:0tdmeFKn.net
htmlとその解釈に悩まされるよりはマシ
コメント1件

658
653[sage]   投稿日:2017/05/23 15:21:53  ID:Ek6JChT/.net
>656
俺もworking draftしかないけどn3690の5.3.5の3段落目

In the first alternative (delete object), if the static type of the object to be deleted is different from its
dynamic type, the static type shall be a base class of the dynamic type of the object to be deleted and the
static type shall have a virtual destructor or the behavior is undefined.
コメント2件

659
デフォルトの名無しさん[sage]   投稿日:2017/05/23 17:00:54  ID:EZJXMIkJ.net
C++があまりに不安な要素をたくさん抱えているお陰で未だに新生言語が多数出てくると
思えばいいじゃん?

660
デフォルトの名無しさん[sage]   投稿日:2017/05/23 19:47:58  ID:rsJqfxq0.net
継承すんなよ
コメント1件

661
デフォルトの名無しさん[]   投稿日:2017/05/24 00:55:48  ID:WEdzXALv.net(3)
>658
意図して作った。
悪しき方法とは思いつつも、stringクラスにsprintf 的な機能のメンバ関数作ったった。
その時、stringクラスの全機能を実装するのがめんどくさかったんで public 継承で。
メモリレイアウトは一切変わらない事を見切った上でだが、未定義だとすると…ヤベ。

662
デフォルトの名無しさん[]   投稿日:2017/05/24 00:56:49  ID:WEdzXALv.net(3)
ん、まあ、deleteは使わないからセーフか?

663
デフォルトの名無しさん[]   投稿日:2017/05/24 01:00:58  ID:WEdzXALv.net(3)
>657
ドラフトしか持ってない…
delete 使う事は頭になかったから気付かなかった。
ありがとう。

>660
おぉ、ピンポイント情報あざす。早速確認してみる。
コメント1件

664
デフォルトの名無しさん[sage]   投稿日:2017/05/24 12:01:47  ID:/RGvDc8r.net(4)
メモリレイアウトが変わらない範囲で既存のクラスを再オープンして機能を追加する方法の提案だけは出てたような気がする。

665
デフォルトの名無しさん[sage]   投稿日:2017/05/24 12:06:31  ID:/RGvDc8r.net(4)
>663
例外関連のなんたらかんたらの処理 (stack unwinding) がかかわってくるんじゃなかったっけ。
正常系では普通に動いているように見えても何がどうなってるかわからんぞ

666
デフォルトの名無しさん[sage]   投稿日:2017/05/24 13:51:37  ID:OqDgfclu.net
>658の話の場合、別に”string *のポインタで”継承したやつをdeleteしない限り大丈夫でしょ
>651で言うところの
・B* を A* にキャストしたものを delete
これが問題になるんであって

B*からdeleteして中身もBなら問題にならないと思うけど

667
デフォルトの名無しさん[sage]   投稿日:2017/05/24 14:15:44  ID:ttKQmf2U.net(2)
>668
std::vector<std::string>に入れたら死ぬってことだよね??

668
デフォルトの名無しさん[sage]   投稿日:2017/05/24 14:47:39  ID:/RGvDc8r.net(4)
>669
ポインタを std::string* に入れてなおかつそれを std::string* のままで delete したらあかんという話。
値を std::string にキャストする分にはなにも問題はない。
コメント1件

669
デフォルトの名無しさん[sage]   投稿日:2017/05/24 15:58:36  ID:ttKQmf2U.net(2)
>670
だからstd::vector<std::string>にいれらんないよね?
コメント1件

670
デフォルトの名無しさん[sage]   投稿日:2017/05/24 17:02:32  ID:/RGvDc8r.net(4)
>671
何を言いたいのかよくわからんが……。
std::string を継承した型は、レイアウトが変わらないようにしたからと言って (キャストなしで) std::string には入らないよ。
言いたいことを具体的にコードで示してくれんか
コメント1件

671
デフォルトの名無しさん[sage]   投稿日:2017/06/03 20:46:07  ID:/cDPk3Lb.net

672
デフォルトの名無しさん[]   投稿日:2017/06/04 05:01:25  ID:a4MXR2y0.net
テンプレート構造体を作りその配列をクラスのメンバに含めたいのですが上手くいきません。

作りたいクラスはスタックとして使えるもので、
主な作りたいメンバは、二つの型のメンバ変数を持つ上記のテンプレート構造体の配列。
引数としてテンプレート構造体を持ち、上記の配列に順次プッシュしていく関数。
最後にプッシュされた構造体をポップする関数、という3つです。

どのようにすればテンプレート構造体をクラスのメンバにすることが出来るのでしょうか?
もしくは、このような機能を持つクラスを実装するためにはどうすればいいのでしょうか?
よろしくお願いします。
コメント1件

673
デフォルトの名無しさん[sage]   投稿日:2017/06/04 08:23:07  ID:7To+hzFq.net
まず
using テンプレート構造体の型 = 構造体テンプレート<型パラメーター>;
をします

674
デフォルトの名無しさん[sage]   投稿日:2017/06/04 11:02:02  ID:4s9JqZC9.net(5)

675
デフォルトの名無しさん[sage]   投稿日:2017/06/04 11:02:24  ID:4s9JqZC9.net(5)

676
デフォルトの名無しさん[sage]   投稿日:2017/06/04 21:12:43  ID:0J0aNZ4Z.net(2)
質問への回答はいいとして
たった100行のコードによくもここまでUNKOを詰め込めるものだと感心

677
デフォルトの名無しさん[sage]   投稿日:2017/06/04 21:24:21  ID:4s9JqZC9.net(5)
>678
どこ?教えて

678
デフォルトの名無しさん[sage]   投稿日:2017/06/04 22:06:48  ID:0J0aNZ4Z.net(2)
>679
細かくは見てないがぱっと見て気になったのは、
殆どが「= default」で済むものを自前で定義する所とか
K,Vの左辺値が渡せないunkoコンストラクターとか
左辺値が渡せないpush関数とか
key_value_pair_stackの外で定義されたdefault_max_sizeとか
禁断の「value_type pop()」とか
ムーブ代入だけ何故か無いとか
例外安全を考慮しないswapとか
constexprの付いていない関数が多数とか
constが付いていないsize関数とか
質問者が「テンプレート構造体」と「クラス」の言葉を使い分けているのにわざわざクラステンプレートにする所とか
「value_type::value_type」の二つのvalue_typeの意味が違うとか
スワップする気皆無の「swap(key_value_pair&& other)」とか

あと
何故付いているのかわからない「const auto」のconstとか
キーバリューペアをシーケンシャルコンテナーに詰める例も地味にUNKO
コメント1件

679
デフォルトの名無しさん[sage]   投稿日:2017/06/04 22:21:08  ID:4s9JqZC9.net(5)
>680
ありがとう
見直してみる
コメント1件

680
デフォルトの名無しさん[sage]   投稿日:2017/06/04 23:59:40  ID:4s9JqZC9.net(5)
>680の指摘を受けて修正したやつ
https://ideone.com/4PDU5a
コメント1件

681
デフォルトの名無しさん[sage]   投稿日:2017/06/05 07:13:59  ID:dSqD3vhj.net(3)
>682
20秒ほど眺めたがとりあえず3つほどなおした方がいい
・key_のメンバー宣言に{}が付いていないと、修正前と同じ動作にならない
・popの戻りはvoidにした方が無難
・clear()しても要素のデストラクターが呼ばれないのでstatic_assert(std::is_trivial_destructible<element_type>::value,"未対応")しとくのが礼儀

682
デフォルトの名無しさん[sage]   投稿日:2017/06/05 08:02:20  ID:SbeuyTlX.net
>683
一つ目だけ意味がわからない…28行目のこと??なんで?
コメント1件

683
デフォルトの名無しさん[sage]   投稿日:2017/06/05 08:16:13  ID:dSqD3vhj.net(3)
>684
その通り28行目
struct X {
 some_type m1 /* {} */;
 X() = default;
};
ここでsome_typeの初期化{}が無いとm1は未初期化になるし、
some_typeにデフォルトコンストラクターが無ければX()の「=default」が「=delete」扱いになる
コメント2件

684
デフォルトの名無しさん[sage]   投稿日:2017/06/05 08:25:22  ID:CMNJImQI.net(2)
>685
なるほど…これってデフォルトコンストラクタ自前で書いてメンバイニシャライザに書いても同じだよね?
valueも同様にイニシャライズしなきゃだめだよね?
コメント1件

685
デフォルトの名無しさん[sage]   投稿日:2017/06/05 12:04:31  ID:dSqD3vhj.net(3)
>686
1:Yes, 2:Yes

struct X {string m; X()=default;};
struct X {int m{}; X()=default;};
struct X {int m; X() : m() {}};
はmが初期化される
struct X {int m; X()=default;};
が初期化されない
コメント1件

686
デフォルトの名無しさん[sage]   投稿日:2017/06/05 12:34:51  ID:CMNJImQI.net(2)
>687
ありがとう
コメント1件

687
デフォルトの名無しさん[sage]   投稿日:2017/06/05 21:07:12  ID:YRHwBsQU.net
空のvectorをpop_backした時の仕様がクソ過ぎるC++
コメント1件

688
デフォルトの名無しさん[sage]   投稿日:2017/06/05 23:54:31  ID:vnQWBbWO.net
亀レスで申し訳ありません、>674です
とりあえずレベルが足りないことが分かったので、もう少し勉強してからいただいたコード解読してみます。
答えてくださった方ありがとうございました。

689
デフォルトの名無しさん[sage]   投稿日:2017/06/06 07:02:51  ID:ueF+TYcD.net
気にすんな
簡単なことすんのにもこの難易度な言語がおかしい

690
デフォルトの名無しさん[sage]   投稿日:2017/06/06 17:35:50  ID:zF6NOqag.net(3)
というかほとんどがムーブとかconst版とかconstexprとか、とことん丁寧にやろうとした場合の作法まで
含めた突っ込みだから、初心者が気にするような話ではないなw

そもそも、最近右辺値参照使ったコードを「書かないといけない」と誤解してる人が多い気がするんだが
あんなもん「ポインタのすげ替えで済む場合」にそれを出来るようにするための仕組みで、
まず左辺値版を書いた上で、右辺値版も書けば速くなるよ、ってだけだよね?

上記に該当しようがしまいがまず左辺値版は必須だし(左辺値を弾きたいならともかく)
該当する場合に高速化したければ右辺値版も書けばいいというだけで
これまた初心者が気にするような話ではないw

691
デフォルトの名無しさん[sage]   投稿日:2017/06/06 18:16:24  ID:uCSRK7Ay.net(2)
>692
>右辺値版も書けば速くなるよ、ってだけだよね?
お前の中ではそうなんだろうな

692
デフォルトの名無しさん[sage]   投稿日:2017/06/06 18:58:32  ID:zF6NOqag.net(3)
違うというなら例ぐらい挙げてくれよ
コメント1件

693
デフォルトの名無しさん[sage]   投稿日:2017/06/06 19:28:29  ID:+mNKSnZM.net
そういうのはスルーでok

694
デフォルトの名無しさん[sage]   投稿日:2017/06/06 22:23:00  ID:uCSRK7Ay.net(2)
>694
こういうのはワンポイントTipじゃなくて概念の理解だからね
『ムーブセマンティクスのため』と答えを言ったところで
君は理解できないんだろう?

695
デフォルトの名無しさん[sage]   投稿日:2017/06/06 23:19:35  ID:zF6NOqag.net(3)
>696
ドヤ顔で用語を挙げろなどとは一言も言っていないのだがw

696
デフォルトの名無しさん[sage]   投稿日:2017/06/07 00:10:56  ID:xZGjq0dG.net
>697
『ムーブセマンティクス』が君の求めた
例そのものなんだよ
でも君の頭脳では概念を理解できないから
説明する気もないし
わからなくても心配しなくていいよ
コメント1件

697
デフォルトの名無しさん[sage]   投稿日:2017/06/07 00:22:15  ID:2ipgwMGH.net
教える側界隈の高度なやり取りだけで終始しないでほしいんですけど、、
コメント1件

698
デフォルトの名無しさん[sage]   投稿日:2017/06/07 00:27:13  ID:gn2mDiBA.net(2)
>699
ヒント:unique_ptrのムーブは性能目的ではない
コメント2件

699
デフォルトの名無しさん[sage]   投稿日:2017/06/07 00:54:38  ID:CXRZvrBM.net(2)
>698
こっちは疑問形で書いてんだから普通に指摘してくれりゃいいんじゃねーの?
なんかコンプでも抱えてんのかね

unique_ptrみたいな所有権の移動の実現(を楽に実装する)は確かに気付いてなかったが
初心者が気にするような話ではない&いつも書かなければならないものではない、に対する反論になってないよな
ちょっとした指摘をそこまで煽って書ける神経が理解できん
コメント1件

700
700[sage]   投稿日:2017/06/07 06:42:56  ID:gn2mDiBA.net(2)
ちなみに俺は>698ではない
そうぞうで書いた


701
デフォルトの名無しさん[sage]   投稿日:2017/06/07 08:16:07  ID:PxDlVTZD.net
>701
君は概念を理解できないだろうけど
コピーされては困るから「ムーブ」「セマンティクス」
なんだよ
性能に余裕があってもね
右辺値参照がなかったらスマポをvectorに入れることすらままならないよ

702
デフォルトの名無しさん[sage]   投稿日:2017/06/07 18:47:00  ID:CXRZvrBM.net(2)
>702
いや自分も軽く調べてすぐ見つかった例がunique_ptrだったからそれだろうと思った

>703
偉そうに言う割に自分もいい加減なこと言ってるな
C++03以前を知らない学生か何かだろうけど、お前みたいに偉そうにドヤ顔する癖のあるやつで
使い物になるコード書くやつを俺は見たことない
恥ずかしいからその辺にしとけ

703
デフォルトの名無しさん[sage]   投稿日:2017/06/10 17:42:01  ID:SxYi4azU.net
>683
>・popの戻りはvoidにした方が無難
なぜなんだ?pop の戻りがナルなら空であることを示せてべんりだろう?
コメント1件

704
デフォルトの名無しさん[sage]   投稿日:2017/06/10 20:12:18  ID:JqmNS/A3.net
>705
topとpop作れってことが言いたいんだろう多分

705
デフォルトの名無しさん[sage]   投稿日:2017/06/11 22:14:52  ID:iu5DR0Hy.net
「なぜなんだ?pop の戻りがナルなら空であることを示せてべんりだろう?」
 ↓
「topとpop作れ」

これがアスペというやつか
コメント1件

706
デフォルトの名無しさん[sage]   投稿日:2017/06/11 22:35:45  ID:q49UmmFG.net
お前アスペ言いたいだけだろ w

707
はつみつ餃子 ◆8X2XSCHEME [sage]   投稿日:2017/06/12 01:27:35  ID:M0cidITY.net
std::queue では pop と front に分けられてるからその習慣に合わせた方がいいってことじゃない?
ただ、 queue のデザインが出来たときはムーブがなかったから先頭要素にアクセスするために
(参照でなく) 値を返すと同時にコンテナから削除するのはコピーが発生して非効率ってこともあってこうなってると思う。
今ならもっと別の選択肢はあっていいと思う。

まあ、古いデザインを引き摺っている部分はあるとは言っても標準ライブラリはすごくよく考えられてるから、
どうしてそうなっているのかを考察したり真似したりするのは良いと思う。

708
デフォルトの名無しさん[sage]   投稿日:2017/06/12 01:48:34  ID:E1Ahh3IF.net
はつみつ

709
デフォルトの名無しさん[sage]   投稿日:2017/06/12 17:36:41  ID:t42bNJ0A.net
>709は健常者
ただ理由は性能でなくて例外安全だろう

710
デフォルトの名無しさん[sage]   投稿日:2017/06/17 07:59:16  ID:bupTq8cx.net(2)
クラスの演算子オバーロードの
書き方全種類教えてください。
operator (*)やoperator ""や
operator ->()辺りが特に解説が少なくて
理解するのに困ってます。

よろしくお願いします。

711
はちゃめちゃ餃子 ◆8X2XSCHEME [sage]   投稿日:2017/06/17 09:10:34  ID:a/4tSU3I.net(3)
>712
ユーザー定義リテラルについてはこのあたりが詳しいと思う。

https://ezoeryou.github.io/cpp-book/C++11-Syntax-and-Feature.xhtml#over.literal
https://cpprefjp.github.io/lang/cpp11/user_defined_literals.html

名前空間名で修飾することができないので、
namespace 内で定義されたものについては using してからでないと使えないという規則が微妙に気持ち悪い。
あまりお勧めしない。
標準ライブラリが提供している complex 型のリテラルや時間のリテラルもそんなに頻繁には使わなさそうだし、
よく使うのは string 型のリテラルくらいかなぁ。

712
デフォルトの名無しさん[sage]   投稿日:2017/06/17 11:23:50  ID:cPfPWWru.net(2)
まずウェブブラウザーで
http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2017/
をアクセスします。
次に「N4660」のPDFをダウンロードします。
右下に336と書かれたページ(16.5 Overloaded operators)を開きます。
そこから5ページほどスクロールしながら、英文を見ずにコードだけ眺めます。
コメント2件

713
デフォルトの名無しさん[sage]   投稿日:2017/06/17 11:24:51  ID:cPfPWWru.net(2)
oops...
× N4660
○ N4659

714
◆QZaw55cn4c [sage]   投稿日:2017/06/17 12:02:12  ID:ir1eTLN6.net(2)
>712
ユーザー定義リテラルについては書かれていないが、それでも演算子オーバーロードについては
http://stlalv.la.coocan.jp/
が詳しいのではないか?はちみつさんがこれに触れないのは不思議‥

715
デフォルトの名無しさん[sage]   投稿日:2017/06/17 12:24:13  ID:qMkdrUOQ.net
あ、うんでもなんか、
http://stlalv.la.coocan.jp/HungarianNotation.html
↑のページ読んだだけでもうダメなんじゃないかって
文章もなんか危ないというか危ういし

とおもったらQZか
な〜んだ納得

716
デフォルトの名無しさん[sage]   投稿日:2017/06/17 13:21:59  ID:ir1eTLN6.net(2)
>717
ハンガリアンは意見がわかれるからね‥
私はハンガリアンはやらないよ
コメント1件

717
はちみつ行者 ◆8X2XSCHEME [sage]   投稿日:2017/06/17 14:21:54  ID:a/4tSU3I.net(3)
>716
自分が見ないページだから意識の外だった。
そのページはわかりやすく説明できているとは思うけど、
基本的な書き方で今更調べることはあんまりないよ。
コメント1件

718
デフォルトの名無しさん[sage]   投稿日:2017/06/17 14:31:32  ID:bupTq8cx.net(2)
712です。
短いコードを打ちこんで動作を確認しました。
皆さん有り難うございました。

(ちょっと気になったのは
void operator [](std::initializer_list <int > list);
これがvsc2015では動作しなかったことぐらいです。
)

719
653[sage]   投稿日:2017/06/17 16:42:18  ID:YXyzn6OG.net
それ戻り値がvoidだからじゃ

vs2015で試したら添字演算子の結果を使わなければvoidのままでも動いたし
戻り値返すようにしたら普通の使い方もできたよ

720
はちみつ餃子 ◆8X2XSCHEME [sage]   投稿日:2017/06/17 18:56:32  ID:a/4tSU3I.net(3)
話がそれるけど operator[] に initializer_list を渡したいときってどんなとき?
次元が動的に決まるようなコンテナとか?

721
デフォルトの名無しさん[sage]   投稿日:2017/06/18 00:16:25  ID:sDQUBcQX.net
xyの二つの値を渡したかったんだろ
言わせんな恥ずかしい

722
はちみつ餃子 ◆8X2XSCHEME [sage]   投稿日:2017/06/18 00:50:52  ID:fX2BYeVR.net
void って C++ の予約語の中ではカッコイイ言葉ナンバーワンだよな!

723
◆QZaw55cn4c [sage]   投稿日:2017/06/18 09:48:40  ID:BCfBDJC6.net
auto に席をゆずったらしい‥

724
デフォルトの名無しさん[sage]   投稿日:2017/06/19 13:14:46  ID:dXkNDY8/.net(2)
pascal とか fortran の方が良くね?

725
デフォルトの名無しさん[sage]   投稿日:2017/06/19 13:45:34  ID:LlSBVcNV.net
後藤

726
はちみつ餃子 ◆8X2XSCHEME [sage]   投稿日:2017/06/19 14:29:30  ID:MatPzd+v.net
>726
良かろうが悪かろうがこのスレに来てるのはそれでも C/C++ を使うってやつらなんだからその問いかけは無意味

727
デフォルトの名無しさん[sage]   投稿日:2017/06/19 15:29:57  ID:dXkNDY8/.net(2)
予約語として他言語から呼べる万能感があるのに :-P
C89では削除されたのだっけ
コメント1件

728
◆QZaw55cn4c [sage]   投稿日:2017/06/19 19:14:53  ID:zNrORK8z.net
>727
setjmp/longjmp のインパクト!を考えると、いまいちだと思いますぅ

729
デフォルトの名無しさん[sage]   投稿日:2017/06/20 00:48:54  ID:tAZ0INkH.net(2)
longjmpは無理やり過ぎだよな
Cならではとも思うが

730
デフォルトの名無しさん[sage]   投稿日:2017/06/20 00:52:30  ID:tAZ0INkH.net(2)
リターンアドレスレジスタみたいなの持ってる石だと
ちょいとだけ複雑になるのかすぃら?

731
デフォルトの名無しさん[sage]   投稿日:2017/06/20 23:58:21  ID:f6m5FZzF.net
>172
>MISRA-C研究会が書いている、MISRA-C 2004(C90) の本をみっちり、勉強しろ!
>研究会のメンバーでさえ、規格に詳しい人がいないのだから

規格も理解できない奴らが集まって書いた27年前の規格の解説本って
やばすぎだろ

732
デフォルトの名無しさん[sage]   投稿日:2017/06/21 00:16:32  ID:vvvagSt1.net
5ヶ月以上前のレスに反応するって
やばすぎだろ

733
デフォルトの名無しさん[sage]   投稿日:2017/06/21 04:19:48  ID:ZaPNA4YS.net
コンパイラやライブラリが腐っていることなんて
良くある事。利用者は配慮してくれないと (AA略)

734
デフォルトの名無しさん[sage]   投稿日:2017/06/21 11:49:15  ID:x++JJuQ3.net
最終的にできたものが使用通りならそれでいい
規格準拠度なんてどうでもいいな

735
デフォルトの名無しさん[sage]   投稿日:2017/06/21 13:05:32  ID:sg+bsLqU.net
/* 仕様通り動いたコード */
int Z = 0; // これを消すと動かなくなる
int Z2 = 0; // 2010.1.4. vcバグ回避の追加
char *s, *p;
if (s==p) return 2; //これ必要?

736
デフォルトの名無しさん[sage]   投稿日:2017/06/23 22:17:07  ID:U/0DguFU.net
A a = {};
これってコピーコンストラクタ呼ばれる可能性ある?

737
デフォルトの名無しさん[sage]   投稿日:2017/06/24 00:27:16  ID:PfOqrM0w.net
ない

738
デフォルトの名無しさん[sage]   投稿日:2017/06/24 00:27:41  ID:5MVxspQe.net
>738
ない
(もちろんaを構築するときに呼ばれるコンストラクタの話
Aのコンストラクタの中で起きることまでは知りようがない)
コメント1件

739
デフォルトの名無しさん[sage]   投稿日:2017/06/24 09:24:07  ID:AroON3at.net
イコールあるけどコピーしないん?
もう文法わけわからん
コメント1件

740
デフォルトの名無しさん[sage]   投稿日:2017/06/24 13:28:24  ID:7MOF4v/u.net
変数宣言のときの=はあくまで初期化であって、たまたま同じ記号を使ってるだけで代入とは違うと思ったほうがいい

同じと思うと他にもC++の参照とかで混乱する

741
デフォルトの名無しさん[]   投稿日:2017/06/24 15:16:01  ID:qquEaJ2M.net
>741
コピーしようがしまいが結果は一緒でしょ?
単に最適化の結果で余計な処理が動かないだけと考えればいい

742
デフォルトの名無しさん[sage]   投稿日:2017/06/24 18:10:28  ID:Ipep7Yd5.net
>743
一緒じゃねーよヴァカ乙
リソースはメモリだけと思ってんの?どんだけお花畑なの?
mutex a = {};コピー無しの保証

743
デフォルトの名無しさん[]   投稿日:2017/06/26 12:57:25  ID:dr/i6/ki.net
>744
コピー出来るクラスを例に持って来いよ
コメント3件

744
デフォルトの名無しさん[sage]   投稿日:2017/06/28 18:40:34  ID:lG20CtJa.net(3)
コピー出来ないクラスではコンパイル結果が異なるという>744の指摘に対して
「コピー出来るクラスを例に持って来い」とはこれ如何に
コメント2件

745
デフォルトの名無しさん[]   投稿日:2017/06/28 18:53:40  ID:fwJBxSlX.net
>746
その元コメントはコピーしようがしまいがと言ってるのにそもそもコピー出来ないクラス持ってきて罵倒とはこれ如何に

746
デフォルトの名無しさん[sage]   投稿日:2017/06/28 20:44:21  ID:VFMMUwAr.net(3)
>743
一緒じゃない
一緒になるようにクラスを設計すれば一緒というだけ
コメント1件

747
デフォルトの名無しさん[sage]   投稿日:2017/06/28 20:47:16  ID:VFMMUwAr.net(3)
デフォルトコンストラクタでカレーライスを製造
コピーコンストラクタでラーメンを製造
代入でうどんを製造

同じか?
コメント1件

748
デフォルトの名無しさん[sage]   投稿日:2017/06/28 21:08:19  ID:lG20CtJa.net(3)
>743が「コピーしようがしまいが」と言ったからこそ>744がコピーされてはは困る例を出したのだが
悲しきかな>747には理解ないのであった

749
デフォルトの名無しさん[sage]   投稿日:2017/06/28 21:16:03  ID:VFMMUwAr.net(3)
いや、ちょっとズレてると思うよ
コメント1件

750
デフォルトの名無しさん[sage]   投稿日:2017/06/28 22:13:17  ID:xb2y2Mwj.net
横から何だけど
どうズレてるかの説明は無いの?
コメント1件

751
デフォルトの名無しさん[]   投稿日:2017/06/28 22:25:47  ID:xMEBWJOX.net
コピーしない保証がC++17でさらに追加されたがそこで最適化でコピーしようが直接構築しようがどちらでもよかったC++14までの規格は彼の頭の中ではヴァカでお花畑らしい
コメント1件

752
デフォルトの名無しさん[sage]   投稿日:2017/06/28 23:59:13  ID:lG20CtJa.net(3)
なるほど>738を初期化でなくcopy/move elisionの話だと勘違いしたままだとこのようなとんちんかんなレスになるのだな
残念なのが>739-742を読んでも勘違いに気付かないことだ
コメント1件

753
デフォルトの名無しさん[]   投稿日:2017/06/29 00:23:16  ID:0BA30UdR.net
>754
とりあえずお前が一番元のレス読んでないと言うことは解ったよ。
読んでるというなら彼が何を疑問に思ってるか、そしてそれへの説明をしてみるといい

754
デフォルトの名無しさん[sage]   投稿日:2017/06/29 08:20:56  ID:J9UCM8ul.net
>752
恐らく>751は「コピーしようがしまいが」について、コンパイル可否(>750で書いたコピーされてはは困る例)ではなく
「デフォルトコンストラクターで構築したものとそれをコピーして構築したものを概念的に同一視することの是非」こそが論点と主張している
その片鱗が>749
コメント1件

755
デフォルトの名無しさん[sage]   投稿日:2017/06/30 16:06:42  ID:YTlik2k9.net
printf("おちんぽじゅぽじゅぽ")

756
デフォルトの名無しさん[sage]   投稿日:2017/06/30 23:27:57  ID:SxEaPPM4.net
catch のところで例外を再スローすると
再スローされた例外の型は、catchの所に書いたスーパークラスの型に
差し代わってしまうの?

757
デフォルトの名無しさん[sage]   投稿日:2017/06/30 23:50:44  ID:wfcExao2.net
式無しのthrow;なら元の型のまま

758
デフォルトの名無しさん[sage]   投稿日:2017/07/01 17:28:15  ID:T5yR4ind.net
「型に差し代わってしまうの?」
 ↓
「〜なら元の型のまま」

確かにその通りなのだが、「型」に着目するあたり、
どうも仕様を正しく理解していないのではという気がしてならない

759
デフォルトの名無しさん[sage]   投稿日:2017/07/01 22:43:53  ID:mdEe7tMk.net
c++は難しい分ほかの言語より色々できると聞いたんですがどういうことができるのでしょうか?

760
デフォルトの名無しさん[sage]   投稿日:2017/07/01 22:56:09  ID:qtP/3v2i.net
メモリアクセスができます

761
デフォルトの名無しさん[sage]   投稿日:2017/07/01 23:22:20  ID:sgaEl9jo.net
難しいからではなく低級言語なのでハードウェアを直接操作するようなプログラムも書ける

762
デフォルトの名無しさん[sage]   投稿日:2017/07/02 00:10:04  ID:kxMmAO7v.net
>762
>763
ハードウェアに直接操作やメモリアクセスですか
トンクスです

763
デフォルトの名無しさん[sage]   投稿日:2017/07/02 10:29:07  ID:TVPISEnD.net
質問です
doubleの計算誤差ってちゃんと考慮必要でしょうか?
数桁の四則演算なら誤差なしと考えていいですか?
コメント1件

764
デフォルトの名無しさん[]   投稿日:2017/07/02 12:30:57  ID:w2e8t6sv.net
考慮が必要な時もあるし
不要な時もある

765
765[sage]   投稿日:2017/07/02 13:04:46  ID:hIH6r6Dk.net
>766
考慮必要ですか、、
ありがとうございます
コメント2件

766
デフォルトの名無しさん[sage]   投稿日:2017/07/02 14:24:20  ID:O/UEQvVu.net(2)
精度保証付きの演算ライブラリ使えば?
コメント1件

767
デフォルトの名無しさん[sage]   投稿日:2017/07/02 15:42:45  ID:1Me6IR2g.net(16)
4倍精度でも8倍精度でも多倍長でも整数でも有理数でも、使い方を間違えば誤差が問題になる

安直な処理で一番問題が発生しやすいのが整数丸めと比較
ごくごく微妙な誤差は何時でも含んでいると思うと良い

768
デフォルトの名無しさん[sage]   投稿日:2017/07/02 15:45:50  ID:1Me6IR2g.net(16)
>768
大抵の演算ライブラリや演算器は精度の保証がある
コメント1件

769
デフォルトの名無しさん[sage]   投稿日:2017/07/02 16:02:14  ID:O/UEQvVu.net(2)
>770
いや、そうじゃなくて浮動小数点計算誤差由来の誤差を解決するための分野とライブラリがあるんだよ
解をレンジで持ち続けるみたいな感じ
Accuracy guaranteed numerical calculation でググるとたくさん出てくるよ
コメント1件

770
デフォルトの名無しさん[sage]   投稿日:2017/07/02 16:12:27  ID:1Me6IR2g.net(16)
>771
解をレンジで持ち続けて何か解決出来ると思うか?
>765レベルの人が
コメント1件

771
デフォルトの名無しさん[]   投稿日:2017/07/02 16:13:48  ID:9wrwY3nx.net(4)
mpir、gmpだろ。これ使えば円周率1万でも1億でも正確に計算できるはず
コメント1件

772
デフォルトの名無しさん[sage]   投稿日:2017/07/02 16:15:08  ID:1Me6IR2g.net(16)
有理数を有理数のまま保持している分には、四則演算では誤差が発生しない

もちろんオーバーフローしない条件で

773
デフォルトの名無しさん[sage]   投稿日:2017/07/02 16:16:17  ID:1Me6IR2g.net(16)
>773
前提条件は数桁の四則演算

774
デフォルトの名無しさん[sage]   投稿日:2017/07/02 16:18:03  ID:1Me6IR2g.net(16)
doubleで計算を前提とし、誤差が問題となりやすい場面だけ教えてあげれば十分

775
デフォルトの名無しさん[]   投稿日:2017/07/02 16:22:01  ID:9wrwY3nx.net(4)
実際、浮動小数点型の誤差は無視できないぞ。
float型とか、容量が少ないほど。情報処理の入門書の最初から出てくる話題だろ。

776
デフォルトの名無しさん[]   投稿日:2017/07/02 16:22:48  ID:jIucKliD.net
いい加減スレタイ変えろよ

【初心者姦ゲイ】C/C++室 Ver.100【姦狂依存OK】

777
デフォルトの名無しさん[sage]   投稿日:2017/07/02 16:36:49  ID:1Me6IR2g.net(16)
>777
無視できる場合もあるし出来ない場合もある
floatや半精度があるのはそれで十分な場合があるから
コメント1件

778
デフォルトの名無しさん[sage]   投稿日:2017/07/02 16:37:57  ID:1Me6IR2g.net(16)
doubleより前に、整数演算の誤差を学ばなければならないレベルかも

779
デフォルトの名無しさん[sage]   投稿日:2017/07/02 16:42:50  ID:1Me6IR2g.net(16)
>765
>768
>777
まとめて

780
デフォルトの名無しさん[sage]   投稿日:2017/07/02 17:12:26  ID:ZK/8Emjh.net
コーディング規約で
float、doubleは使用禁止が正解

781
デフォルトの名無しさん[sage]   投稿日:2017/07/02 18:20:54  ID:p749GQFM.net(3)
1/3の結果に3を掛けても1にならないとか、
0.1を10回足し合わせても1と一致しないとか、
その辺りは分かっているのかな?

782
デフォルトの名無しさん[sage]   投稿日:2017/07/02 18:24:15  ID:p749GQFM.net(3)
>782
質問者は浮動小数点数の演算のどこに注意点があるか分かっていない状態で、
いいから浮動小数点数は使うな、
というのは回答として乱暴過ぎるだろう。
コメント1件

783
デフォルトの名無しさん[sage]   投稿日:2017/07/02 18:38:08  ID:FdY2ZCkQ.net
・同じ計算をするんでも
なるべく精度の高いアルゴリズムを選ぶ
・0との比較では、絶対値と計算機epsilonの比較を用いる

他にある?
コメント1件

784
デフォルトの名無しさん[sage]   投稿日:2017/07/02 18:50:30  ID:MoO3L/4V.net(2)
>・0との比較では、絶対値と計算機epsilonの比較を用いる

何かとごっちゃになってる気がする。
計算の収束判定等で用いるのは機械イプシロンじゃない。

785
デフォルトの名無しさん[]   投稿日:2017/07/02 19:09:48  ID:MlDTzv8m.net
>785
0との比較に限らず、比較には絶対値の大きさに応じたεの考慮が必要。
コメント1件

786
デフォルトの名無しさん[sage]   投稿日:2017/07/02 19:18:00  ID:ttjnRDkm.net
機械イプシロンはあくまでも最大値だよね
コメント1件

787
デフォルトの名無しさん[sage]   投稿日:2017/07/02 20:17:22  ID:+3axEb/N.net(3)
初めて知りました

788
デフォルトの名無しさん[sage]   投稿日:2017/07/02 20:44:23  ID:+3axEb/N.net(3)
数桁のdouble計算で誤差が問題になる場面では「誤差が存在する」ことが問題であって、精度を上げることは(誤差の大小は)本質的な解決でないような
(3.1 - 2.9 > 0.2) != (3.1 > 2.9 + 0.2)みたいな

789
デフォルトの名無しさん[]   投稿日:2017/07/02 21:37:11  ID:9wrwY3nx.net(4)
計算順序で誤差が違ってくるのは教科書でよくかいてある

790
デフォルトの名無しさん[sage]   投稿日:2017/07/02 22:54:19  ID:ynDhLM7Z.net
情報処理資格に受かっていない人が、C/C++ をプログラミングするなど、10年早い

C/C++ は、直接デバイスを扱うから、自作パソコンを作れるぐらいに、
かなりパソコン内部の装置の仕組みを、知っていないと無理

さらに組み込みなら、高度情報処理のエンベッド資格も必要

791
デフォルトの名無しさん[]   投稿日:2017/07/02 22:59:43  ID:9wrwY3nx.net(4)
そんなことはない

792
デフォルトの名無しさん[sage]   投稿日:2017/07/02 22:59:50  ID:MoO3L/4V.net(2)
お前は試験に受かってからプログラミング始めるのかw
コメント4件

793
デフォルトの名無しさん[sage]   投稿日:2017/07/02 23:03:16  ID:UYpoTCPe.net
パソコンって、アドレスバスの、メモリ読み書きで、
デバイスを、直接操作するのか?
それとも、アドレスA0000に文字を書き込むのか?
その知識、30年くらい、遅くね?

794
デフォルトの名無しさん[sage]   投稿日:2017/07/02 23:32:00  ID:1Me6IR2g.net(16)
>782
整数も除算に誤差があるから禁止

795
デフォルトの名無しさん[sage]   投稿日:2017/07/02 23:32:37  ID:1Me6IR2g.net(16)
>783
整数でも1/3*3は1にならない

796
デフォルトの名無しさん[sage]   投稿日:2017/07/02 23:35:11  ID:1Me6IR2g.net(16)
>785
コストも考えなさい

epsilonは>786の通り
補足すると、
収束判定に限らず、普通はepsilonで判定しない

797
デフォルトの名無しさん[sage]   投稿日:2017/07/02 23:36:02  ID:iWsKHD5Z.net(2)
0になるし誤差はないな
コメント1件

798
デフォルトの名無しさん[sage]   投稿日:2017/07/02 23:36:20  ID:1Me6IR2g.net(16)
>792
情報処理資格www
なんの役にもたたない
コメント1件

799
デフォルトの名無しさん[sage]   投稿日:2017/07/02 23:36:31  ID:iWsKHD5Z.net(2)
って触れちゃダメな奴だったかすまん

800
デフォルトの名無しさん[sage]   投稿日:2017/07/02 23:38:56  ID:+3axEb/N.net(3)
前回、共用体の非アクティブメンバーアクセスが許されるcommon initial sequenceの条件である「型の互換性」に目を付けたレスを見た時は
>792がもう少し見所の有る奴だと思っていた(過去形)

801
デフォルトの名無しさん[sage]   投稿日:2017/07/02 23:51:33  ID:p749GQFM.net(3)
>797
すまん、1/3は1.0/3とか書くべきところだったな。

802
デフォルトの名無しさん[sage]   投稿日:2017/07/02 23:53:35  ID:1Me6IR2g.net(16)
いやいやそこじゃなくて

803
デフォルトの名無しさん[sage]   投稿日:2017/07/02 23:55:20  ID:1Me6IR2g.net(16)
1.0/3.0*3.0 が 1.0にならないことがある
1/3*3 が 1にならない

小数演算特有ではない

804
デフォルトの名無しさん[sage]   投稿日:2017/07/02 23:59:40  ID:1Me6IR2g.net(16)
0.1を10回足しても1にならないことがあるって言うのも小数特有ではない

0.1は普通のfloatやdoubleでは表現できず、コンパイル時に近似値に変換する
この意味では以下と本質的には同じ

int a = 0.1;
int b = a * 10;

805
デフォルトの名無しさん[]   投稿日:2017/07/03 00:01:24  ID:UYk8Gv77.net(2)
>792
自作って高価なプラモデルだぞ。。。
夢見過ぎ。
直接ってもなぁ。。。
昔はx86限定で直接レジスタ弄れる命令あったんだが、その命令は今じゃ優先的にレジスタ使ってね☆って意味に変質してるもんなぁ。。。
今のCは思ってるより下級言語じゃ無いぞ。
普通の言語よりゃハードに近いけどさ。
コメント1件

806
デフォルトの名無しさん[sage]   投稿日:2017/07/03 00:02:29  ID:Ds1QZZUB.net(5)
doubleがintに比べて誤差が少ないため、誤差を気にせずに使ってしまいやすい

だから注意の意味を含めて誤差が大袈裟に語られる傾向がある

当然整数の方が(普通は)はるかに誤差が大きい

807
デフォルトの名無しさん[sage]   投稿日:2017/07/03 00:03:12  ID:NRAuceWo.net
>805
それは知ってるけど元の質問者がdoubleの演算誤差について聞いているのだから、整数の除算の件は話が外れていると思う。
この手のスレに良くあることだけど、元の質問から勝手に話が発散して何を目的に議論しているのかが分からなくなるね。

808
デフォルトの名無しさん[sage]   投稿日:2017/07/03 00:04:40  ID:Ds1QZZUB.net(5)
いやだから、

気を付けるべき点は >769 の後半にまとめたつもりだけど

809
デフォルトの名無しさん[sage]   投稿日:2017/07/03 00:10:25  ID:Ds1QZZUB.net(5)
よくやりがちな例は、

for (double a = 0; a <= 1 ; a += 0.1)

みたいな比較と

double a = sqrt(3);
double b = a * a;
int c = b;

みたいな整数丸め

810
デフォルトの名無しさん[sage]   投稿日:2017/07/03 00:12:35  ID:Ds1QZZUB.net(5)
これは、
double に限らす10000桁精度の演算ライブラリでも全く同じ問題がほぼ同じ率で起こる

811
デフォルトの名無しさん[sage]   投稿日:2017/07/03 00:14:47  ID:Ds1QZZUB.net(5)
前者はループが10回か11回かはバクチで、
後者はcが2になるか3になるかはバクチ

812
デフォルトの名無しさん[]   投稿日:2017/07/03 00:19:44  ID:UYk8Gv77.net(2)
なんかそんなの読んだことあるな。
計算結果は精度の範囲内だけど、計算途中で精度超えて結果に誤差が出る的な。
なんか対策あったぞ。

813
デフォルトの名無しさん[sage]   投稿日:2017/07/03 04:06:04  ID:yzYakBEJ.net
>798
普通は計算機epsilonで判定は
しない、これはわかりました
じゃあどんな値で判定するんですか?

814
デフォルトの名無しさん[sage]   投稿日:2017/07/03 04:57:07  ID:BlNCaFmm.net
>792
カーニハンもリッチーも受かっていないようだが?

815
デフォルトの名無しさん[sage]   投稿日:2017/07/03 08:32:52  ID:rvaVDuHz.net
>815
対象の値が含み得る誤差を用いる。
機械イプシロン(を指数によってスケールしたもの)は誤差の下限を示しているだけに過ぎない。

816
デフォルトの名無しさん[sage]   投稿日:2017/07/03 11:17:36  ID:rWGDP/Vn.net
下限ではない
下限はその半分

817
デフォルトの名無しさん[]   投稿日:2017/07/03 19:44:02  ID:BsrmCust.net
VisualC++とそれ以外用とで別の関数を用意して、プリプロセッサを使用してコンパイル時に選択したいと思っています
この場合、関数全体を#ifdef _MSC_VER〜#endifで囲うことになるのですか?
もう少しきれいな書き方があれば教えてください
よろしくお願いします

818
デフォルトの名無しさん[sage]   投稿日:2017/07/03 20:12:56  ID:oiFj/hKr.net
>819
機種依存部分をライブラリ化してリンク時に差し替えるとか

819
デフォルトの名無しさん[sage]   投稿日:2017/07/03 20:21:04  ID:tl3oQzgh.net
関数全体を切り替えたいなら関数全体を複数記述するしかあるまい

部分的に違うだけならその違う部分的だけ切り替えればいい

関数全体を複数記述する方法はいくつかある
コメント2件

820
デフォルトの名無しさん[sage]   投稿日:2017/07/04 00:10:04  ID:2/r2iAfu.net
>819
別にそれでいいじゃん。大量にあるならファイル分ければいいし

821
デフォルトの名無しさん[]   投稿日:2017/07/04 09:38:28  ID:GKwjzP9N.net(2)
class A {}
int main{
A a; //c++
A a = new A(); //c#
}
このc++の「A a;」は、c#の「A a = new A();」と同じ意味ということでいいんですか?

822
デフォルトの名無しさん[sage]   投稿日:2017/07/04 10:10:55  ID:A8K7ipT2.net
>823
同じになるねぇ
あえて違う点を挙げるとすればAが作成される領域がスタックかヒープか
でも意識するほどのことじゃない

823
デフォルトの名無しさん[]   投稿日:2017/07/04 10:53:00  ID:GKwjzP9N.net(2)
>824
スッキリしました。ありがとうございます。
コメント2件

824
デフォルトの名無しさん[sage]   投稿日:2017/07/04 12:24:06  ID:rriFyG5E.net
いやC++やるならスタックかヒープかは意識しなきゃだめだろ
deleteどうすんの
コメント2件

825
デフォルトの名無しさん[sage]   投稿日:2017/07/04 12:53:41  ID:Tv7aUxog.net
>824
> Aが作成される領域がスタックかヒープか
いや、それは意識しろよ

826
デフォルトの名無しさん[sage]   投稿日:2017/07/04 16:07:16  ID:BdJEhj1W.net
ヒープはC#の方だろ、とりあえず意識しないでも

827
デフォルトの名無しさん[sage]   投稿日:2017/07/04 17:16:06  ID:RU97axJ4.net
C#はdelete書かないんだからC++なら
deleteが不要な「A a;」を同等と捉えるのが筋
配置場所なんかどうでもええ

828
デフォルトの名無しさん[sage]   投稿日:2017/07/04 18:37:27  ID:eP5xPbfu.net
newだとスコープ抜けても残るんじゃ?

829
デフォルトの名無しさん[sage]   投稿日:2017/07/04 18:44:00  ID:xAcMjOR1.net
C#だとスマポみたいになるんかね
コメント1件

830
デフォルトの名無しさん[sage]   投稿日:2017/07/04 19:56:18  ID:3bDdeHlE.net
c#はGC管理、classは参照型

831
デフォルトの名無しさん[sage]   投稿日:2017/07/04 20:17:33  ID:olJiM2Cb.net(5)
>829
寿命が全然違うじゃないですかぁ

832
デフォルトの名無しさん[sage]   投稿日:2017/07/04 20:31:05  ID:L7t36fm1.net
コストも

833
デフォルトの名無しさん[sage]   投稿日:2017/07/04 21:02:27  ID:V6j6UQbw.net
で?

834
デフォルトの名無しさん[sage]   投稿日:2017/07/04 21:52:57  ID:+pBAjacr.net
すげえ考え方の奴が出てきてワロッシュ

835
デフォルトの名無しさん[sage]   投稿日:2017/07/04 22:13:30  ID:kiqPrlXB.net(3)
寿命だのコストだの言うけど
そんな実相依存どうやって見積もるの?
無意味な揚げ足取りはやめたら?

836
デフォルトの名無しさん[sage]   投稿日:2017/07/04 22:14:59  ID:VwPftttd.net(3)
え?

837
デフォルトの名無しさん[sage]   投稿日:2017/07/04 22:17:16  ID:TrkY+sIz.net(2)
C++ 側は実装依存な部分あるっけ? C#側はよーわからんけど
コメント1件

838
デフォルトの名無しさん[sage]   投稿日:2017/07/04 22:19:25  ID:dCdz+uzl.net
こっちはC++スレだぞ?C++でスタックとヒープのコストや寿命の違いを意識する必要がないってマジでいってるのかよ

839
デフォルトの名無しさん[sage]   投稿日:2017/07/04 22:29:39  ID:kiqPrlXB.net(3)
newの方はC#のって前置きがあるだろうが
よく読め
まあ元々の質問もあれだが

840
デフォルトの名無しさん[sage]   投稿日:2017/07/04 22:42:25  ID:IS9gvNe4.net
コストは
c++のnew>>(超えられない壁)>>c#のnew>スタック
全然違うというほどでもないし

841
デフォルトの名無しさん[sage]   投稿日:2017/07/04 23:02:36  ID:olJiM2Cb.net(5)
コストは置いておいたとしても寿命はどうするんだよ

平たく言うと
「マニュアル車の1速は、オートマ車のDと同じ意味ですか?」
って質問だぞ
それに対して
「オートマ車はDで発進するからマニュアル車なら1速と同等ととらえるのが筋
 速度が出た後のことなんかどうでもええ」
ってのはなんか違うだろ

メモリ管理に関してはC++はマニュアルでC#はオートなんだから
こういうたとえになるんだよ

842
デフォルトの名無しさん[sage]   投稿日:2017/07/04 23:10:09  ID:VgVQ93XC.net
>837
おまいさん資格持ちじゃないよな?な?な?
コメント2件

843
デフォルトの名無しさん[sage]   投稿日:2017/07/04 23:15:08  ID:olJiM2Cb.net(5)
あと、C#はJavaと違って構造体が使えてこれは値型になれるから
スタックに確保できる
なんで、C++の A a; はどちらかというと、そちらに該当するんだよ

で、C#のA a = new A(); はというと
delete が必要という一点を除けば C++ の A *a = new A();に相当するんだよ
こんなこと当たり前だろ

844
デフォルトの名無しさん[sage]   投稿日:2017/07/04 23:23:27  ID:9HpxJyun.net
>845
実装と目的を一緒にすんなよタコ
単に「Aのインスタンス生成するコード書いてみ」
といわれたら>823になるだろjk
意味が同じってのはそういうこった

845
デフォルトの名無しさん[sage]   投稿日:2017/07/04 23:33:11  ID:AVhuZxl1.net(4)
>842
えっ???
そんな馬鹿な
コメント1件

846
デフォルトの名無しさん[sage]   投稿日:2017/07/04 23:38:27  ID:olJiM2Cb.net(5)
>単に「Aのインスタンス生成するコード書いてみ」

ってのはお前が勝手に言ってることだろ

元は
>このc++の「A a;」は、c#の「A a = new A();」と同じ意味ということでいいんですか?

847
デフォルトの名無しさん[sage]   投稿日:2017/07/04 23:38:59  ID:AKPIjSm8.net
超えられないかはともかく、newに限って言えばGC言語の方が低コストでもおかしくない。

848
デフォルトの名無しさん[sage]   投稿日:2017/07/04 23:39:54  ID:kiqPrlXB.net(3)
厳密にどうかじゃないんだよ
初心者がこれから言語を勉強していくのに
より得になる方はどっちだってことよ

GCだからー、ヒープだからーって
そんな答えおよびじゃないっつーの

849
デフォルトの名無しさん[sage]   投稿日:2017/07/04 23:40:16  ID:AVhuZxl1.net(4)
実際に試してから言えよ
コメント1件

850
デフォルトの名無しさん[sage]   投稿日:2017/07/04 23:40:38  ID:AVhuZxl1.net(4)

851
デフォルトの名無しさん[sage]   投稿日:2017/07/04 23:43:53  ID:olJiM2Cb.net(5)
どの程度の初心者かわからないだろ
C#と比べてるってことは既にC#をそこそこマスターしているかもしれないだろ
その状態でC++に手を出そうとしていたとしたら、どうだ?
C#とC++の違いなどを書いたほうが良いだろ

852
デフォルトの名無しさん[sage]   投稿日:2017/07/04 23:46:31  ID:tvZqc0j8.net
>850
初心者だからこそ、上っ面の文法の違いだけで捉えて、こうすればだいたい同じとか説明する前に、
前提としてメモリ管理の考え方が違うことを理解してもらうのは重要だろう。

853
デフォルトの名無しさん[sage]   投稿日:2017/07/04 23:47:41  ID:AVhuZxl1.net(4)
違うものは違う

854
デフォルトの名無しさん[sage]   投稿日:2017/07/04 23:48:12  ID:VwPftttd.net(3)
もういいよ、まとめると

C++ではインスタンス生成(アドレスの決定)は二種類のやり方がある
A a;
A* pa = new A();
前者はスタックのアドレスが割り当てられ、後者は通常はヒープのアドレスが割り当てられる。
前者はスコープが寿命で、後者はdelete pa;されるまでが寿命。

C#ではインスタンス生成の方法は値型、参照型でそれぞれ一種類ずつしかなく、
A a; //struct A
B b = new B(); //class B
前者はスタックのアドレスが割り当てられ、後者はヒープのアドレスが割り当てられる。
前者はスコープが寿命で、後者はdelete pa;されるまでが寿命。

どれとどれを同じと思うかは人それぞれ。
終了

855
デフォルトの名無しさん[sage]   投稿日:2017/07/04 23:50:58  ID:TrkY+sIz.net(2)
C# の後者の寿命は? delete pa は C++ だよね

856
デフォルトの名無しさん[sage]   投稿日:2017/07/04 23:53:27  ID:VwPftttd.net(3)
>856
おっと、間違えた
C#の後者の寿命はGCに回収されるまででした
コメント1件

857
デフォルトの名無しさん[sage]   投稿日:2017/07/05 00:46:01  ID:EyHtcvE8.net
>856
ご苦労さん

何故この話題がここまで伸びたんだろ

858
デフォルトの名無しさん[sage]   投稿日:2017/07/05 22:56:44  ID:UhWlQCq1.net
異なる考えの言語同士であるため対応が自明でないという事実を無視して
自分の考える「同じ意味」の解釈を押し付けるからに相違ない

>C#ではインスタンス生成の方法は値型、参照型でそれぞれ一種類ずつしかなく、
>A a; //struct A
なるほどこうやって言語仕様を確認せず想像をたれ流すので世の中が嘘だらけになるのだな

859
デフォルトの名無しさん[sage]   投稿日:2017/07/05 23:29:36  ID:0KIeSgEp.net
>860
ん、C#のほうはそれであってるだろ
StringとかDateTimeみたいな一部の例外を除けば

860
デフォルトの名無しさん[sage]   投稿日:2017/07/06 01:22:17  ID:AOJFjP+S.net
>異なる考えの言語同士であるため対応が自明でないという事実を無視して
>自分の考える「同じ意味」の解釈を押し付けるからに相違ない

ん?だからそれに基づいてほとんどの人は
「違う意味だよ〜」って言ってたんじゃなかったの?
一部の人が「同じような意味だよ〜」って言ってただけで
それに反論する流れだったでしょ
だから「同じ意味」の解釈の押し付け合いはしてなくて
同じ意味だよ vs 違う意味だよ
だったと思うけど
コメント1件

861
デフォルトの名無しさん[sage]   投稿日:2017/07/06 05:15:51  ID:5a/RGiY/.net
わざわざ堅苦しい言葉選んで俺偉いアピール
コメント1件

862
デフォルトの名無しさん[sage]   投稿日:2017/07/06 05:29:37  ID:T7F4pxe5.net
同じ様な意味と同じ意味は違う
さらっと言葉をすり替えるなよ
まったく卑怯な奴よの
(つーか同じ様な意味とも言っていない)
コメント1件

863
デフォルトの名無しさん[sage]   投稿日:2017/07/06 08:09:44  ID:TSgBvSRK.net(3)
>862
>だから「同じ意味」の解釈の押し付け合いはしてなく
「同じ意味」の基準について合意していないのに「ここが違うから別」とだけ言うのは「同じ意味」の解釈の押し付けに他ならないと思うのだが、
もう少し日本語の字面でなく意味を理解した方がよいのではないか

>「違う意味だよ〜」って言ってたんじゃなかったの?
 →Yes
>同じ意味だよ vs 違う意味だよだった
 →Yes

864
デフォルトの名無しさん[sage]   投稿日:2017/07/06 08:11:58  ID:rcg+ZZ7N.net
違うものは違う

865
デフォルトの名無しさん[sage]   投稿日:2017/07/06 08:12:32  ID:TSgBvSRK.net(3)
>861
合っているかと訊かれれば合っていないので、言語仕様を読むか当該のスレッドで訊くのが良いのでは
あとStringやDateTimeの例外というのが何なのかよくわからなかった

866
デフォルトの名無しさん[sage]   投稿日:2017/07/06 08:18:45  ID:QfwLuwwY.net

867
デフォルトの名無しさん[sage]   投稿日:2017/07/06 14:54:52  ID:m/Ia1fy1.net
まだやってんのかよ
おまいらのこだわりはスゲェな
コメント1件

868
デフォルトの名無しさん[sage]   投稿日:2017/07/06 22:06:42  ID:TSgBvSRK.net(3)
リンク先を見て思ったのだが
こだわりじゃなくて罵られることに喜びを覚えるマゾなのではないかと言う気がした

869
デフォルトの名無しさん[sage]   投稿日:2017/07/06 22:08:34  ID:JPWXM8i2.net
>870
正しく指摘できないのならレスしないほうがいい
あなたの思ういちばんすこいC#の仕様の世界で生き続けてくだはい
アーメン

870
デフォルトの名無しさん[sage]   投稿日:2017/07/07 11:58:06  ID:C1hAccX9.net
俺は、プログラミングなんて存在しない世界で生きたい
コメント1件

871
デフォルトの名無しさん[sage]   投稿日:2017/07/07 12:21:24  ID:2bQkb9bH.net
生まれてくるのが100年くらい遅かったようだな

872
デフォルトの名無しさん[]   投稿日:2017/07/07 12:21:27  ID:xvg52mfm.net
プログラマ辞めれば良いだけやん。

873
デフォルトの名無しさん[]   投稿日:2017/07/07 13:29:12  ID:1UwaMcEr.net(2)
c++
英語を読める
btcをトレードしたことがある

仮想通貨の開発に参加してみたい方
レスをお願いします

874
デフォルトの名無しさん[sage]   投稿日:2017/07/07 15:01:32  ID:u5D8E4qs.net
>875

んで?どうすりゃええの

875
デフォルトの名無しさん[]   投稿日:2017/07/07 16:03:32  ID:1UwaMcEr.net(2)
>876
お返事ありがとうございます

通貨名
raiblocks

simple
instant
fees 0(送金手数料がかからない)

web
https://raiblockscommunity.net/

slack
https://raiblocks.slack.com

slackに参加
#developmentにて、開発に興味がある旨の書き込みをしてください(英語で)
コメント1件

876
デフォルトの名無しさん[sage]   投稿日:2017/07/08 21:39:10  ID:dFvfrYOE.net
プログラミングなんて底辺ドカタの仕事
そのうちAIがやれるようになる
コメント1件

877
デフォルトの名無しさん[]   投稿日:2017/07/08 22:33:35  ID:lbAgDi9M.net
アドバイスさんくす

878
デフォルトの名無しさん[]   投稿日:2017/07/09 16:06:32  ID:EeQkMvgZ.net(4)
ポインタそのものにオブジェクトってできるんでしょうか?
例えば、配列arrayのアドレスをポインタpで、ポインタpのアドレスをポインタpのポインタppで調べたんですが、
int array[3];
int *p = array;
int **pp = &p;
for(i = 0; i < 3; i++)
{
printf("&array[%d] : %d : %d\n", i, &array[i]);
}
&array[0] : 2293472
&array[1] : 2293476
&array[2] : 2293480
&p[0] : 2293472
&p[1] : 2293476
&p[2] : 2293480
&pp[0] : 2293468
&pp[1] : 2293472
&pp[2] : 2293476
ppが参照しているpのオブジェクトの位置が、arrayのオブジェクトのアドレスと全く同じ位置にあります。
1つのアドレスが2つのオブジェクトをもてるのか、ポインタ自体にオブジェクトは生成されないのか
他の要素でそうなってるのかわかりません。どなたか回答宜しくお願いいたします。

879
◆QZaw55cn4c [sage]   投稿日:2017/07/09 16:13:17  ID:VF1qtZ3L.net
>880
その出力を一挙に得られるプログラムを示せ,アドレスはプログラムの実行ごとに変わる可能性がある

880
デフォルトの名無しさん[sage]   投稿日:2017/07/09 16:20:52  ID:v/7piv3Y.net
>880
pとarrayは異なるオブジェクトだから確認方法が間違ってる
コメント4件

881
デフォルトの名無しさん[sage]   投稿日:2017/07/09 16:25:25  ID:3Luqddjj.net(3)
一つのポンタを複数のオブジェなんて当たり前
int z;
int * p = &z;
int * p2 = p;
int * p3 = p2;
コメント2件

882
デフォルトの名無しさん[]   投稿日:2017/07/09 16:43:15  ID:EeQkMvgZ.net(4)
>881 これでいいでしょうか?
int i;
int array[5];
int *p = array;
int **pp = &p;
printf("array : %d\n", array);
for(i = 0; i < 5; i++) {
printf("&array[%d] : %d\n", i, &array[i]);
}
printf("p : %d\n", p);
for(i = 0; i < 5; i++) {
printf("&p[%d] : %d\n", i, &p[i]);
}
printf("pp : %d\n", pp);
for(i = 0; i < 5; i++) {
printf("&pp[%d] : %d\n", i, &pp[i]);
}
>882
&ppでpのオブジェクトのアドレスを取得できると思ってたんですが違ったんですか?
>883
すいませんまだそれを理解するのは難しいです。

883
デフォルトの名無しさん[sage]   投稿日:2017/07/09 16:44:50  ID:3Luqddjj.net(3)
何がわからんのや。ようわかるやんけ

アドレス : オブジェクト : 値 : オブジェクトの型
2293464 : pp : 2293468 : int**型
2293468 : p : 2293472 : int*型
2293472 : array[0] : ? : int型
2293476 : array[1] : ? : int型
2293480 : array[2] : ? : int型
コメント1件

884
デフォルトの名無しさん[]   投稿日:2017/07/09 16:51:56  ID:EeQkMvgZ.net(4)
>885
つまりポインタpは配列を参照してもp自体は配列型ではなくて単体(?)のオブジェクトだということでしょうか?

885
デフォルトの名無しさん[sage]   投稿日:2017/07/09 16:56:52  ID:3Luqddjj.net(3)
>886
もちろんや。
pはarrayとは別のアドレス2293468にある
int*型の独立したオブジェやで
コメント1件

886
デフォルトの名無しさん[]   投稿日:2017/07/09 17:01:52  ID:EeQkMvgZ.net(4)
>887
ありがとうございます!5時間以上つまってたのが一気にクリアになりました!
コメント1件

887
デフォルトの名無しさん[sage]   投稿日:2017/07/09 17:16:44  ID:Uu/MlKNR.net
>880
> &pp[0] : 2293468
これはpのアドレス
> &pp[1] : 2293472
> &pp[2] : 2293476
pp[1], pp[2]は存在しないからアクセスしちゃダメ
たぶん
2293464: pp
2293468: p
2293472: array[0]
2293476: array[1]
2293480: array[2]
みたいなメモリ割り当てになってるんだろうな
コメント1件

888
デフォルトの名無しさん[sage]   投稿日:2017/07/09 22:31:05  ID:WeAgIUgc.net
>889
意味のある値が取れないだけで
別にアクセスしても問題ねーだろ

889
デフォルトの名無しさん[sage]   投稿日:2017/07/09 23:28:17  ID:1po+7Ikw.net
>890
正しく割り当てられたオブジェクトのアドレス以外を指しているのなら、アクセスしてはいけないだろう。
889の例ではたまたまpp[1]が表す位置がスタック上の有効なアドレスでアラインメントも問題無いだろうけど、
例えばppがスタックやヒープの末端のオブジェクトを指していたら、pp[1]にアクセスしたらNGということもある。
コメント1件

890
デフォルトの名無しさん[sage]   投稿日:2017/07/10 06:50:03  ID:ZgtWUD/x.net(3)
中身にアクセスしてなくてただのアドレス計算だぞ

C/C++言語的にはNGだけど、それで例外が発生するとはなかなか考えにくい
もしかしたらビルド時に警告を出してくれるかも
コメント1件

891
デフォルトの名無しさん[sage]   投稿日:2017/07/10 06:54:34  ID:t9ouoliu.net
アドレス計算自体はOKだと思うよ。

892
名無しさん@そうだ選挙に行こう! Go to vote![sage]   投稿日:2017/07/10 07:04:04  ID:Ols/UzwR.net
配列ならば確保した数+1までのアドレス計算はやっても大丈夫&整合がとれる位置に配置されている

893
名無しさん@そうだ選挙に行こう! Go to vote![sage]   投稿日:2017/07/10 07:05:58  ID:ZgtWUD/x.net(3)
無効エリアのアドレス計算
値不定か動作不定かどっちだか忘れた

これらをOKと呼ぶならOKなんでしょう

894
名無しさん@そうだ選挙に行こう! Go to vote![sage]   投稿日:2017/07/10 07:13:12  ID:ZgtWUD/x.net(3)
>894
-1も有効だとうれしい事があるけど、-1はダメなんだよね
コメント3件

895
デフォルトの名無しさん[sage]   投稿日:2017/07/10 22:27:20  ID:WIOZS2V0.net
>894
つまり式「&pp[1]」は大丈夫でないと?

896
デフォルトの名無しさん[sage]   投稿日:2017/07/11 13:12:04  ID:eWIFW1BW.net
ppは配列じゃないだろ

897
デフォルトの名無しさん[sage]   投稿日:2017/07/11 18:17:43  ID:L5b0rMHK.net
これがアスペいうやつだな
 配列でないオブジェクトも要素数1の配列として考える仕様→よくご存知で
 pは配列じゃないからな→わかる
 ppは配列じゃないからな→頭悪いな
 ppは配列じゃないだろ→アスペ
コメント1件

898
デフォルトの名無しさん[sage]   投稿日:2017/07/11 20:17:20  ID:gS+YojZ9.net(2)
ん?まったくよくわからんのだが、だれか解説して

>配列でないオブジェクトも要素数1の配列として考える仕様
↑まずこれがよくわからない
配列じゃないオブジェクトといえば、例えばint i;などは配列としては扱えないよね

で、下二行の意味も分からない
コメント1件

899
デフォルトの名無しさん[sage]   投稿日:2017/07/11 22:08:22  ID:qjau/h5c.net(3)
配列かどうかは関係なく、オブジェクトの後ろのアドレスは計算も出来るし比較も出来る
コメント1件

900
デフォルトの名無しさん[sage]   投稿日:2017/07/11 22:10:11  ID:qjau/h5c.net(3)
>894は配列じゃない場合に関しては何も言ってないから間違いではないが
わざわざ配列と書いてるので配列以外は違うと思ったかわからなかったか
だろう

901
デフォルトの名無しさん[sage]   投稿日:2017/07/11 22:14:58  ID:qjau/h5c.net(3)
>897
「つまり」が意味不明
>894は配列じゃない場合には何も言ってない
「大丈夫でない」は正しい

>898
配列じゃないから何?

>899
実際には配列ではない
コメント1件

902
デフォルトの名無しさん[sage]   投稿日:2017/07/11 22:28:18  ID:gS+YojZ9.net(2)
いや、それは俺も思ったんだが
ppが配列じゃないのは当たり前なんだが(てかポインタだし)
おそらくはそんなことは問うてないって言いたいんだと思う

つまり、ppが指している先が何であるかが問題であるから
配列か配列じゃないかを問うべきはppではなくppの指している先である「p」であろうと
同じことをもう一度言うけど
pp[1]としたとき問題になるのはppの指してる先がどうなっているかで
今回の場合はそれは「p」であるから
正しくは、「ppの指してる先のpは配列じゃないだろ」って言うべきっていう主張かと

903
デフォルトの名無しさん[sage]   投稿日:2017/07/11 23:00:18  ID:634mVLA8.net
>901
なら&pp[1]も大丈夫なんじゃね?

904
デフォルトの名無しさん[sage]   投稿日:2017/07/12 07:01:19  ID:Mf+sZV2C.net
pp[1]の時点で動作不定

正しく動かない環境はもしかしたら存在しないかもしれないけど

905
◆QZaw55cn4c [sage]   投稿日:2017/07/12 07:26:19  ID:9q9UgJkW.net
>880
ん、最初にもどってメッセージを書くとすれば、こうなるかな

>ポインタそのものにオブジェクトってできるんでしょうか?
私が意味を取り違えているかもしれないが、「できない」
ポインタを取得したからといって、オブジェクトが生えてくることはない
あくまで、先にオブジェクトを確保した上で、それに対してポインタを設定する手順をとる

>例えば、配列arrayのアドレスをポインタpで、ポインタpのアドレスをポインタpのポインタppで調べたんですが、
array を確保しているので、p は array 確保分(p 〜 p + 3)だけプログラムとして意味がある。
pp は p 一個分だけ意味がある。すなわち *pp = p、でも pp[1]= *(pp + 1) は確保していない領域を指すのでこの表現は使ってはいけない

&pp[1] と書くとなにがしかのアドレスを生成するが、それは使えない
アドレスを生成できるからといって、その領域が意味のあるものとは限らない

>881 では意味のないことを求めてしまいごめんなさい

906
デフォルトの名無しさん[sage]   投稿日:2017/07/12 08:20:30  ID:SNfdy8To.net(3)
>906
>pp[1]の時点で動作不定
ちなみにそれを規定する規格の記述はどこ?
Cでは明確に禁止されているようだがC++では見つけられなかった

907
デフォルトの名無しさん[sage]   投稿日:2017/07/12 09:01:11  ID:6a7v2dDL.net(2)

908
デフォルトの名無しさん[sage]   投稿日:2017/07/12 09:10:12  ID:6a7v2dDL.net(2)

909
デフォルトの名無しさん[sage]   投稿日:2017/07/12 13:20:57  ID:ahqaJGrL.net
>907
まとめとしてはそれでいいし否定するわけじゃないけど、若干気になるのは
1.ポインタ自身もポインタというオブジェクトじゃないのか?
2.末尾+1のアドレス(を指すポインタ)はデリファレンスできないけど、大小比較には使えるのでは

910
デフォルトの名無しさん[sage]   投稿日:2017/07/12 13:41:52  ID:uqOuLEsE.net(3)
そんで俺はちょっと思ったんだけど
Cはポインタを配列のように扱えるのが便利だなぁと
逆に配列名を参照したらポインタ値になるし
あと他、関数ポインタを普通の関数のように扱えたり
逆に関数名を参照したらポインタ値になったり
意味の上で別解釈しようがないからそれでいいだろ、的な
二つに共通しているのは
(1)参照しても意味のある値が得られなそうなシンボルは自動的にポインタ値に成り下がってもらおう
(2)その上でポインタに対していろいろな演算 ()[] が出来るようにしておこう
というもので、これでシームレスになるしタイプも減るから便利だろう、と
でもそういう方針なんだったら何故我々は「.」と「->」を
使い分けなきゃならないんだ?と思わんこともない
意味の上で別解釈できたり不明瞭だったりは無いのに
ただ、Cの構造体は(1)を満たしていない
もし(1)を満たすようにしてしまうと、構造体を参照するとポインタ相当に成り下がってしまうので
代入演算子で代入したり、関数に値渡ししたりが出来なくなる
ただし、C言語がそのような仕様になっていた可能性は十分にあると思う
というのも配列がまさにそうであって、代入でコピーできないし、関数に値渡し出来ないから
アセンブリレベルでは配列も構造体もレジスタに入りきらないという意味では同じで
先頭アドレスからのオフセットでアクセスするのは同じであるから
そういう着想に基づけば、構造体も配列と同じようにポインタに成り下がる仕様に
なっていた可能性はあると思う
構造体は代入できないからmemcpyしろ、がCの常識だった可能性はある
そんで、「.」演算子は構造体のポインタに対して有効、となって、「->」は無くなる
で、そうはしなかった代わりに「->」演算子が有る、とも取れる

911
デフォルトの名無しさん[sage]   投稿日:2017/07/12 13:42:12  ID:uqOuLEsE.net(3)
気まぐれか、意図的か、歴史的事情か、生い立ちに由来するものか、知らんが、そうなっている
だが実際これが大当たりで、もしそうじゃなかったらC++が全く成り立ってこない
C++のクラスはCの構造体を拡張したものだが、オブジェクトが勝手にポインタに成り下がる仕様だと
代入したり、関数のreturnで値として返したりができない
となれば独自のクラスを定義して、まるで基本型のように振舞わせたり、メソッドチェーンをしたりが出来ない
もしやるとしたらnewして返すしかないので、GCが無いとどうにもならなかっただろう
(実際C++とCの配列は相性が悪く、std::vectorかstd::arrayを使わないと上手くいかない場合も多い
 ポインタ相当に勝手に成り下がってしまうので代入ができない)
ただ、このことが本当に良かった事なのかどうなのかは分からない
GCは有ったほうが良かったかもしれないし、C++の代入やコピーコンストラクタに関する話題は後を絶たない
他の言語のほとんどがオブジェクトを参照で扱うのを見てると
Cの配列のように勝手にポインタに成り下がって代入できない考え方のほうがスタンダードなのかもしれない
C++のクラスは、状況に合わせて、これを選べる、という立場になってるが
もしCの構造体が配列のような仕様だったなら、どうなっていたか分からなかった事を考えると感慨深い

912
デフォルトの名無しさん[sage]   投稿日:2017/07/12 13:43:43  ID:uqOuLEsE.net(3)
よくよく考えてみればなかなかに奇妙
まず常人が普通に考えたら、配列や関数名を参照したらポインタ値が得られることにしようっていう発想がない
プログラマは基本的に几帳面で、整合性を気にする生き物だから
ポインタ値は「&」を付けたら得られることにしよう、と決めたのだから
&arrayとか&funcとか書かせたくなるのが普通だろう
そして(*array_ptr)[1]とか(*func_ptr)()とか書かせたくなるものだろう
ところがCは、レジスタに乗らないもの、演算できないもの、を
勝手にポインタと同等に格下げするというルールを設けたうえで
そのポインタに対して各種演算子を定義することで整合性を保ちつつタイプ数を減らすという
ウルトラCをやってのけた
ここまででも俺ではちょっと思いつかないなーと感心するわけだが
逆にこんなすごいことを思いついたんなら、全部このルールで行きたくなってくるのが凡人
その方が整合性がありそうな気がするから
なのに構造体はそうなっていなくて、代わりにアロー演算子が定義してある
だから配列と違って構造体は代入ができるし関数に値渡ししたり、値で返したりが出来る
それはそれで奇妙なことだと思ったりもするが、とにもかくにも
この辺がC++の基本方針や特色にものすごく影響が出てる
GCが無いのもそうだし、最近でも右辺値参照が追加されたりとか、結構尾を引いていて
C++特有のややこしさの一端でもあり、他には代えがたいメリットでもある
ある意味で、Cの配列の考え方のが、他言語のオブジェクトの考え方に近いというのが何とも
そして構造体をベースとするC++とCの配列は相性が悪いという
C言語の功罪は凄い
コメント2件

913
デフォルトの名無しさん[sage]   投稿日:2017/07/12 13:48:37  ID:vq82ZnF5.net
3行で(´・ω・`)

914
デフォルトの名無しさん[sage]   投稿日:2017/07/12 17:58:12  ID:SNfdy8To.net(3)
駄レスの関係無いリンク先をまじまじと読んでしまった
日本語でレスが書かれていない時点で読む価値が無いと判断すべきだった

915
デフォルトの名無しさん[sage]   投稿日:2017/07/12 18:07:40  ID:SNfdy8To.net(3)
>915
「初期のK&Rが至高と考えるボクは
構造体がコピーできる仕様にハンタイです」

916
デフォルトの名無しさん[]   投稿日:2017/07/12 18:19:22  ID:Oma/x2r0.net(2)
ユーザーヘッダーファイルを作って
#include<stdio.h>
#include<math.h>
#define PI 3.14
double r;
void nyuuryoku(void) {
printf("半径を入力してください。\n");
scanf("%fl", &r);
printf("%f\n", r);
return;
}
double keisan(void) {
printf("%f\n", r);
return PI*pow(r, 2);
}
と書いてprintfでrを観察してみたんですがscanfでrに数値を入力しているはずなのにrに何も反映されていないことがわかりました。
rはグローバル変数として扱われていると思うのですがなんでrの値が変わらないんでしょうか?

917
デフォルトの名無しさん[sage]   投稿日:2017/07/12 18:34:20  ID:+I30gFZ0.net(3)
void nyuuryoku(void) {
char buf[256];
printf("半径を入力してください。\n");
if(NULL==fgets(buf,sizeof(buf),stdin)){
  printf("ちゃんと入力しろやボケ\n");
  return;
}
sscanf(buf,"%fl", &r);
printf("%f\n", r);
return;
}

918
デフォルトの名無しさん[sage]   投稿日:2017/07/12 18:44:41  ID:FRCEttse.net
>918
× scanf("%fl", &r);
○ scanf("%lf", &r);

919
デフォルトの名無しさん[sage]   投稿日:2017/07/12 18:45:48  ID:+I30gFZ0.net(3)
%lfちゃうか?

920
デフォルトの名無しさん[sage]   投稿日:2017/07/12 18:46:07  ID:+I30gFZ0.net(3)
失礼しますた

921
デフォルトの名無しさん[]   投稿日:2017/07/12 18:49:05  ID:Oma/x2r0.net(2)
oh....
コンパイラも見逃してくれてたからそんなミスとは思いませんでした(´エ`;)
ありがとうございました

922
デフォルトの名無しさん[sage]   投稿日:2017/07/12 19:24:59  ID:iSKiMIM1.net
-Wallつけるか、clang使え

923
デフォルトの名無しさん[sage]   投稿日:2017/07/12 21:38:59  ID:Q4X+sAyq.net
>912-914
なんか色々勘違いしてるしどうでもいいから続きはチラウラで頼むわ

924
デフォルトの名無しさん[sage]   投稿日:2017/07/12 23:05:57  ID:2e79StFo.net
最近のチラシは両面印刷で困る

925
デフォルトの名無しさん[sage]   投稿日:2017/07/13 00:31:49  ID:/oMuxl/G.net(2)
>907
>pp[1]= *(pp + 1) は確保していない領域を指すのでこの表現は使ってはいけない
Cの規格をよく読み直したらそうでもなかった

926
デフォルトの名無しさん[sage]   投稿日:2017/07/13 01:06:35  ID:+2MHjXyv.net
>912-914は基礎的なところで間違った理解をしていると
そのうえに乗っかるすべてのものについて間違った理解をすることしかできなくなるという見本のようだ

927
◆QZaw55cn4c [sage]   投稿日:2017/07/13 06:27:44  ID:NDMOLt7F.net
>927

>880
int **pp = &p;
でpp[1] は書いちゃだめだろう?

928
デフォルトの名無しさん[sage]   投稿日:2017/07/13 07:12:43  ID:/oMuxl/G.net(2)
>929
その書いちゃダメを規定する6.5.6p8には「that is evaluated」という条件がある
evaluateはメモリアクセスの有無と関係無く基本的に全て行われるはずだが
6.5.3.2p3の例外既定により該当しないばかりか「&*」が省かれるとある

929
◆QZaw55cn4c [sage]   投稿日:2017/07/13 08:39:26  ID:045lcfaT.net
>930
シンタックスではなくセマンティクスというわけですか‥ありがとう

930
デフォルトの名無しさん[]   投稿日:2017/07/13 18:16:27  ID:PDgj9Ebq.net(2)
#include<stdio.h>
#include<string.h>
#define NUM 10
int main(void) {
int length;
char name[NUM * 2 + 1];
char family_name[NUM + 1];
char first_name[NUM + 1];
printf("姓を入力してください\n");
scanf("%s", family_name);
printf("名を入力してください\n");
scanf("%s", first_name);
strcat(name, family_name);
strcat(name, first_name);
length = strlen(name);
printf("名前:%s\n", name);
printf("長さ:%d\n", length);
return 0;
}
このプログラムで入力まではちゃんとできてるみたいなんですがstrcatのところでおかしくなって
結合結果がフフフフフフフってなります。どうしてでしょうか?
コメント1件

931
デフォルトの名無しさん[sage]   投稿日:2017/07/13 18:29:33  ID:lX8cJUTX.net(4)
笑われてんじゃね?

932
デフォルトの名無しさん[sage]   投稿日:2017/07/13 18:30:25  ID:lX8cJUTX.net(4)
マヂレスすると、nameが不定
コメント2件

933
デフォルトの名無しさん[sage]   投稿日:2017/07/13 18:34:34  ID:a0isPZOF.net(2)
>932
char name[NUM * 2 + 1] = {0};

934
デフォルトの名無しさん[]   投稿日:2017/07/13 18:37:48  ID:PDgj9Ebq.net(2)
ありがとうございました

935
デフォルトの名無しさん[sage]   投稿日:2017/07/13 19:34:29  ID:b1PvI/zl.net
どうでもいいけど、
char name[NUM * 2 + 1] = "";

普通こうじゃね?

char name[NUM * 2 + 1] = {'0'};

これでも良い

コンパイル結果はたぶん全部同じだけど

936
デフォルトの名無しさん[sage]   投稿日:2017/07/13 20:27:20  ID:bV5zFMan.net
>932
俺のところで試してみたらフフフノフフフになった

937
デフォルトの名無しさん[sage]   投稿日:2017/07/13 20:43:44  ID:lX8cJUTX.net(4)
Visual Studio のデバッグビルドだと、不定メモリをCCで埋める
だからこれに対応する'フ'が表示される
なぜ途中が'ノ'になるかはわからん

strcatではCCの後の0を探してその後に文字列をコピーするから、0の位置によっては例外が発生したり動作がおかしくなったりするかも
コメント1件

938
デフォルトの名無しさん[sage]   投稿日:2017/07/13 21:06:57  ID:a0isPZOF.net(2)
>937
= {'\0'};のタイプミスだよね?

939
デフォルトの名無しさん[sage]   投稿日:2017/07/13 21:23:18  ID:lX8cJUTX.net(4)
>940
タイプミスじゃなくて文字化けした
スマホから見ると、? が◆の中に書かれた文字になってる

940
デフォルトの名無しさん[sage]   投稿日:2017/07/13 23:03:34  ID:xdHlDIka.net
プログラム終了にexit 0とreturn 0がどう違いますか?
コメント1件

941
はちみつ餃子 ◆8X2XSCHEME [sage]   投稿日:2017/07/13 23:59:30  ID:anRp6w5D.net
>942
違わない。
main 内の return は exit と同じ。

942
デフォルトの名無しさん[sage]   投稿日:2017/07/14 19:19:48  ID:TW7O0pB9.net(2)
というタワゴトで他人を陥れるのであった
コメント1件

943
片山博文MZ ◆T6xkBnTXz7B0 [sage]   投稿日:2017/07/14 19:26:30  ID:RoIBY40S.net(8)
exitは死のトラクターが働かない

944
片山博文MZ ◆T6xkBnTXz7B0 [sage]   投稿日:2017/07/14 19:32:27  ID:RoIBY40S.net(8)
異常終了以外でexitを使うヤツは素人

945
デフォルトの名無しさん[sage]   投稿日:2017/07/14 20:20:31  ID:8ghhANnS.net
えっ
mainのreturnでint値返すのはexitをその返り値で呼ぶのと全く等価でしょ?
少なくとも現行のC,C++規格では等価と書いてあるけど現実の実装ではそうなってないってこと?
コメント1件

946
片山博文MZ ◆T6xkBnTXz7B0 [sage]   投稿日:2017/07/14 20:52:35  ID:RoIBY40S.net(8)
#include <iostream>
#include <cstdlib>
struct A {
~A() {
std::cout << "OK" << std::endl;
}
};
int main(void) {
A a;
std::exit(-1);
}

947
片山博文MZ ◆T6xkBnTXz7B0 [sage]   投稿日:2017/07/14 20:55:56  ID:RoIBY40S.net(8)
>947
どこに書いてあったか? 苦情入れるぞ。
コメント2件

948
デフォルトの名無しさん[sage]   投稿日:2017/07/14 21:04:08  ID:TW7O0pB9.net(2)
今日の>945は健常者
後始末される例外ケースについて触れていたら完璧だった

949
デフォルトの名無しさん[sage]   投稿日:2017/07/14 21:06:50  ID:VdC9hBdZ.net
atexit で後始末回収機構走らないの?

950
片山博文MZ ◆T6xkBnTXz7B0 [sage]   投稿日:2017/07/14 21:39:46  ID:RoIBY40S.net(8)
>947
どこに書いてあった?

951
片山博文MZ ◆T6xkBnTXz7B0 [sage]   投稿日:2017/07/14 21:46:17  ID:RoIBY40S.net(8)
atexitはマニュアルに書いてある通りだから、ここでいちいち説明する必要はない。

952
片山博文MZ ◆T6xkBnTXz7B0 [sage]   投稿日:2017/07/14 21:53:53  ID:RoIBY40S.net(8)
マニュアルこそが聖書。マニュアルを読まない奴等はノンプレイヤー。

953
デフォルトの名無しさん[sage]   投稿日:2017/07/14 22:54:13  ID:RlDfzlps.net
つまりexit()はバカ発見器ってこと?

954
片山博文MZ ◆T6xkBnTXz7B0 [sage]   投稿日:2017/07/14 23:01:28  ID:RoIBY40S.net(8)
C++でexit使うぐらいなら、代わりにC++例外を使った方がいいよ。デバッグしやすいし。

955
デフォルトの名無しさん[sage]   投稿日:2017/07/15 05:41:00  ID:81gh4ly6.net
>947
exit() 関数に入ってしまってはデストラクタが働かないのに,それでも return 文と一緒といいはるの?
それ規格がまちがってるから,そのうち修正がはいるはず

956
デフォルトの名無しさん[sage]   投稿日:2017/07/15 13:25:52  ID:d+yGYUAe.net(6)
ポインタの作法に慣れないです
読めるけどかけないです

957
デフォルトの名無しさん[sage]   投稿日:2017/07/15 16:38:44  ID:sZ4h7fLQ.net
ポインタは2段までしか使わないなあ
関数ポインタはstd::functionに入れる癖がついたし

958
デフォルトの名無しさん[sage]   投稿日:2017/07/15 17:20:33  ID:d+yGYUAe.net(6)
#include<stdio.h>
int unko(int x);
int aho(int *y);
int main(void) {
int a[5] = { 1,2,3,4,5 };
unko(a);
aho(&a);
printf("%x\n%x\n", a, &a);
return 0;
}
int unko(int x) {
printf("%x\n", x);
return;
}
int aho(int*y) {
printf("%d\n%d\n",*(y+1), y[2]);
return;
}

このとき関数unkoで配列aの中身にアクセスする方法ってありませんか?
アドレスがわかっているからできそうな気もするんですがよく解りません。
コメント1件

959
片山博文MZ ◆T6xkBnTXz7B0 [sage]   投稿日:2017/07/15 17:27:13  ID:xLcEZRbh.net
aがint a[5]であるとき、aはint配列の先頭アドレスだ。unkoの引数をポインターにしろ。

960
デフォルトの名無しさん[sage]   投稿日:2017/07/15 17:56:11  ID:d+yGYUAe.net(6)
はい

961
デフォルトの名無しさん[sage]   投稿日:2017/07/15 20:48:00  ID:iuayY/9E.net
そもそもこのソースコンパイルエラーになるんじゃね?

962
デフォルトの名無しさん[sage]   投稿日:2017/07/15 21:29:06  ID:d+yGYUAe.net(6)
>963
VSだとコンパイラ通るんですが他のだと通りませんか?
あと関数unkoをいろいろ弄ってたんですが

#include<stdio.h>
void unko(int x);
void aho(int *y);
int main(void) {
int a[5] = { 1,2,3,4,5 };
unko(a);
aho(a);
printf("%x\n%x\n", a, &a);
printf("%d\n",a[4]);
return 0;
}
void unko(int x) {
printf("%x\n", x);
int *p = x;
printf("%d\n%d\n", p[1],*(p+2));
p[4] = 10;
return;
}
void aho(int*y) {
printf("%d\n%d\n",*(y+1), y[2]);
return;
}

こんな記述にすれば少なくともVSでは引数をポインタにしなくても配列aの要素を覗いたり操作したりできることがわかりました。

963
片山博文MZ ◆T6xkBnTXz7B0 [sage]   投稿日:2017/07/15 21:31:54  ID:18nkvKxh.net(7)
型がめちゃくちゃだあああ!!!
型が形無し!
コメント1件

964
片山博文MZ ◆T6xkBnTXz7B0 [sage]   投稿日:2017/07/15 21:36:49  ID:18nkvKxh.net(7)
できることとやってもいいことは違うんだよ。

965
片山博文MZ ◆T6xkBnTXz7B0 [sage]   投稿日:2017/07/15 21:39:23  ID:18nkvKxh.net(7)
コンパイル時に出て来る度重なる警告を無視したらダメだよ。

966
デフォルトの名無しさん[sage]   投稿日:2017/07/15 21:44:11  ID:d+yGYUAe.net(6)
すみません

967
片山博文MZ ◆T6xkBnTXz7B0 [sage]   投稿日:2017/07/15 21:46:08  ID:18nkvKxh.net(7)
お使いの32ビット環境ではintとint*が同じサイズだから、キャストされれば代入できる。sizeof(int) == sizeof(int*)。
しかし、64ビット環境では動かなくなるかもしれない。ポインター型を無視した良くない書き方だ。

968
片山博文MZ ◆T6xkBnTXz7B0 [sage]   投稿日:2017/07/15 21:54:52  ID:18nkvKxh.net(7)
おそらく、君の環境では、
sizeof(int) == 4,
sizeof(int*) == 4
のはずだ。
64bit環境では、多分
sizeof(int) == 4,
sizeof(int*) == 8
になる。確認してみたまえ。

969
片山博文MZ ◆T6xkBnTXz7B0 [sage]   投稿日:2017/07/15 21:57:34  ID:18nkvKxh.net(7)
int*のサイズがintのサイズより大きいと、ポインター(アドレス)の値が正しく代入できない。これが64bitで失敗する理由だ。

970
デフォルトの名無しさん[sage]   投稿日:2017/07/15 22:08:26  ID:qXQ9KlTo.net
こまけーことをゴチャゴチャと
Cなんて大なり小なり環境依存な場面しか使わん
貴様はintに32767以下しか入れんのか?

971
デフォルトの名無しさん[sage]   投稿日:2017/07/15 22:10:20  ID:d+yGYUAe.net(6)
確かめてみたら確かに自分の環境では両方4バイトでした
64bitのプログラムにしたらダメになるんですね・・・
勉強になります。ありがとうございます。

972
デフォルトの名無しさん[sage]   投稿日:2017/07/15 22:23:44  ID:vkKq60sj.net(2)
2レスで失礼します
VC++9Eでruby-opencvのビルドを試みているのですが構文エラーが多発してビルドできません
>C:\dev\ruby-opencv>nmake
>〜
>cl -I. -I. -IC:/dev/ruby-1.8.7-p374/win32/bin/lib/ruby/1.8/i386-mswin32_90 -IC:/dev/ruby-opencv-master/ext/opencv -MD -O2b2xty- /EHsc -IC:/dev/ruby-opencv-master/ext/opencv/ext/opencv
/EHsc -DHAVE_OPENCV2_CORE_CORE_C_H -DHAVE_OPENCV2_CORE_CORE_HPP -DHAVE_OPENCV2_IMGPROC_IMGPROC_C_H -DHAVE_OPENCV2_IMGPROC_IMGPROC_HPP -DHAVE_OPENCV2_VIDEO_TRACKING_HPP
-DHAVE_OPENCV2_FEATURES2D_FEATURES2D_HPP -DHAVE_OPENCV2_FLANN_FLANN_HPP -DHAVE_OPENCV2_CALIB3D_CALIB3D_HPP -DHAVE_OPENCV2_OBJDETECT_OBJDETECT_HPP
-DHAVE_OPENCV2_LEGACY_COMPAT_HPP -DHAVE_OPENCV2_LEGACY_LEGACY_HPP-DHAVE_OPENCV2_HIGHGUI_HIGHGUI_C_H -DHAVE_OPENCV2_HIGHGUI_HIGHGUI_HPP -DHAVE_OPENCV2_PHOTO_PHOTO_HPP
-DHAVE_OPENCV2_NONFREE_NONFREE_HPP -DHAVE_STDARG_H -I/usr/include -IC:\dev\OpenCV2.4\install\include -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE -c
-TpC:/dev/ruby-opencv-master/ext/opencv/algorithm.cpp
>〜
>algorithm.cpp
>C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\INCLUDE\istream(699) : warning C4003: マクロ 'read' に指定された実引数の数が少なすぎます。
>C:\〜\istream(699) : error C2059: 構文エラー : ')'
>C:\〜\istream(846) : コンパイルされたクラスの テンプレート のインスタンス化 'std::basic_istream<_Elem,_Traits>' の参照を確認してください
>C:\〜\istream(700) : error C2143: 構文エラー : ')' が '{' の前にありません。
>〜
>C:\〜\xxbind1(320) : warning C4003: マクロ 'bind' に指定された実引数の数が少なすぎます。
>C:\〜\xxbind1(320) : error C2988: 認識できないテンプレートの宣言または定義です。
>C:\〜\xxbind1(320) : error C2059: 構文エラー : ','

973
デフォルトの名無しさん[sage]   投稿日:2017/07/15 22:24:14  ID:vkKq60sj.net(2)
何らかのファイルが足りないとかならまだ判るのですがこのファイルはVCに付属の物ですし構文エラーなどと言われても理解できません
algorithm.cppは一番最初のファイルで全く進まない状態です
ちなみにRubyとOpenCVのビルドは一応通っています(本当に問題ないかは未確認)
C/C++は不慣れでVSの使用経験もあまりないため原因の見当も付かず手詰まり状態です。もし何か判る方がいたら教えてもらえると助かります

974
片山博文MZ ◆T6xkBnTXz7B0 [sage]   投稿日:2017/07/15 22:27:42  ID:18nkvKxh.net(7)
readというマクロが悪さをしているようだ。#include順を変えるか#undefしろ。

975
デフォルトの名無しさん[sage]   投稿日:2017/07/15 22:35:18  ID:Z+b63Gri.net
>958
使わずに済むのなら無理して使う必要は無いだろ?
正しく動けばそれでいい

976
974[sage]   投稿日:2017/07/16 12:18:52  ID:wcmK4agw.net
>976
すみません。その場所の特定ってどのようにすればいいのでしょうか
比較的規模の大きいライブラリですし、インクルードしているファイルだけでもかなりの数になりそうです
ファイルの検索とテキストエディタだけでは追えそうにありません
追跡を支援してくれるツールとかないんでしょうかね・・・

977
片山博文MZ ◆T6xkBnTXz7B0 [sage]   投稿日:2017/07/16 12:28:40  ID:flrpsNzv.net
>978
IDEのフォルダ内検索か、
grepツール

978
デフォルトの名無しさん[sage]   投稿日:2017/07/16 15:16:03  ID:1O/pViqJ.net
マクロ展開したソース吐くオプションあったよな

VCならhttp://d.hatena.ne.jp/nurs/20100516/1274020395

1.ソリューションエクスプローラ上で展開後の結果を見たいcppファイルを右クリック⇒
 プロパティ⇒プリプロセッサ⇒前処理済みファイルの生成⇒行番号つきか行番号なしを選択
2.再びソリューションエクスプローラ上で展開後の結果を見たいcppファイルを右クリック⇒コンパイル
 これで、cpp が置かれているのと同じファイル階層に、cppと同じ名前だけど拡張子が.iになってる
 ファイルができてるからそれがそうだよ

gccなら -E
コメント1件

979
デフォルトの名無しさん[]   投稿日:2017/07/16 17:55:59  ID:i1aK64sE.net(2)
class Kitty {
public:
char *str;
Kitty() { str = "Kitty on your lap\n"; }
Kitty(const Kitty &obj) { str = "Di Gi Gharat\n"; }
} g_obj ;

int main() {
Kitty obj = g_obj;
cout << g_obj.str;
cout << obj.str;
return 0;
}

Kittyクラス終わりのセミコロンの間に変数g_objがあるんですがこれはどういう意味なんですか?

980
デフォルトの名無しさん[sage]   投稿日:2017/07/16 18:11:45  ID:0XlWr73/.net(2)
「int i; のセミコロンの前に変数g_objがあるんですがどういう意味ですか」
と訊いているに等しい

981
デフォルトの名無しさん[sage]   投稿日:2017/07/16 18:13:11  ID:0XlWr73/.net(2)
訂正
 誤 変数 g_obj
 正 変数 i
コメント1件

982
デフォルトの名無しさん[sage]   投稿日:2017/07/16 18:25:45  ID:dVrh8pbL.net
g_objはKittyのインスタンスだが
あまりこういう書き方はしないかもね
コメント1件

983
デフォルトの名無しさん[sage]   投稿日:2017/07/16 18:31:52  ID:ZbG5GhXO.net
>981
Kitty と言うクラス定義とその型を持つ g_obj と言うグローバル変数を同時に定義している
要するに
class Kitty {
...
};
Kitty g_obj;
を一つにまとめてるだけ

984
デフォルトの名無しさん[]   投稿日:2017/07/16 18:48:37  ID:i1aK64sE.net(2)
>982 >984
レスありがとうございます
>985
わかりやすい解説ありがとうございました

985
デフォルトの名無しさん[sage]   投稿日:2017/07/16 22:25:00  ID:Z5uaiz2p.net
>986
それはさておき
>str = "Kitty on your lap\n"
このウンコード、何かおかしいとは思わないのかね
コメント1件

986
デフォルトの名無しさん[sage]   投稿日:2017/07/17 00:15:32  ID:+UBTk6HR.net
>987
ウンコードは食べるとニガいからな
コメント1件

987
デフォルトの名無しさん[sage]   投稿日:2017/07/18 05:08:40  ID:gGqeofJB.net

988
デフォルトの名無しさん[sage]   投稿日:2017/07/18 07:08:39  ID:vzMDiUgd.net

989
デフォルトの名無しさん[sage]   投稿日:2017/07/18 19:37:15  ID:bPzCLpNs.net
おつ

990
デフォルトの名無しさん[sage]   投稿日:2017/07/18 22:55:46  ID:KX2fhuwb.net
ひょっとして2ちゃんのこのスレ
他のC/C++相談所よりハイレベル!?

991
デフォルトの名無しさん[sage]   投稿日:2017/07/19 07:02:25  ID:Jp1Fyagp.net
うめてんてー

992
デフォルトの名無しさん[sage]   投稿日:2017/07/19 07:03:18  ID:Cx7F+3jm.net

993
デフォルトの名無しさん[sage]   投稿日:2017/07/19 10:27:43  ID:MRnyPI+k.net
他のC/C++相談所ってどこ?

994
はちみつ餃子 ◆8X2XSCHEME [sage]   投稿日:2017/07/19 16:13:01  ID:AV+hYp2C.net(3)
SNS の C++ コミュニティとかじゃね?

995
デフォルトの名無しさん[sage]   投稿日:2017/07/19 17:00:45  ID:Si/VL0fD.net
それトリ割れしてるよ
#o%K%H:+O

996
はちみつ餃子 ◆8X2XSCHEME [sage]   投稿日:2017/07/19 17:08:00  ID:AV+hYp2C.net(3)
>997
知ってるけど成りすましは一度しか出てきてないのでまあいいかなって。

997
デフォルトの名無しさん[sage]   投稿日:2017/07/19 17:33:56  ID:bGQD/KSW.net
このスレにはQさんがいるからな
Qさんがいれば安心だ
コメント1件

998
はちみつ餃子 ◆8X2XSCHEME [sage]   投稿日:2017/07/19 17:43:36  ID:AV+hYp2C.net(3)
>1000 を取れたら長門は俺の嫁

999
1001[]   投稿日:0000/00/00 00:00:00
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
life time: 254日 18時間 45分 34秒
コメント1件
更新情報
・スレッド一覧ページで過去ログのタイトル検索・一覧表示ができるようになりました(2016/1/20)
NGワード登録
登録する
スレッド内検索

プログラム板 タイトル検索

このスレッドが人気です(実況系)
国会中継「衆議院予算委員会質疑」★11 (872)NHK実況
実況 ◆ テレビ朝日 48639 明大前→大下前 (827)テレ朝実況
羽鳥慎一モーニングショー★4 (989)テレ朝実況
実況 ◆ フジテレビ 83969 (851)フジ実況
国会中継「衆議院予算委員会質疑」★12 (97)NHK実況
ノンストップ! (434)フジ実況
連続テレビ小説 ひよっこ★199 (614)NHK実況
NHK総合を常に実況し続けるスレ 136158 安倍総理のご意向 (406)NHK実況
このスレッドが人気です(ニュース系)
【東京五輪】灼熱38℃ 選手と観客襲う 男子マラソン「過去120年で最も暑い環境」 (1003)ニュー速+
【東京五輪】灼熱38℃ 選手と観客襲う 男子マラソン「過去120年で最も暑い環境」★2 (159)ニュー速+
【閉会中審査】安倍首相は疑惑払拭なるか 加計…和泉洋人補佐官が出席、日報…稲田朋美氏関与に焦点 (1001)ニュー速+
【加計】衆議院予算委員会 獣医師会、誰も出席せず (431)ニュー速
【経済】有給、年間3日増えたら… 国内の旅行消費額9213億円アップ 政府試算 (1001)ニュー速+
【憲法改正】安倍首相、憲法改正で「単に反対ではなく対案を持ち寄ってほしい」★5 (941)ニュー速+
【芸能】<カンニング竹山> 創価学会や公明党への偏見を反省「クソな大人になってしまった」 (661)音楽・芸能ニュース
【芸能】<人気イラストレーター>佐川急便の配達員からサインを求められたとして不快感!「ゾッとした」 ★3 (891)音楽・芸能ニュース
プログラム板の人気スレ
C言語なら俺に聞け 141 (200)
【統計分析】機械学習・データマイニング16 (737)
Excel VBA 質問スレ Part49 (484)
【初心者歓迎】C/C++室 Ver.101【環境依存OK】 (81)
次世代言語議論スレ[Go Rust Scala Haskell]第5世代 (505)
スレ立てるまでもない質問はここで 148匹目 (687)
Ruby 初心者スレッド Part 60 (727)
Pythonのお勉強 Part53 (633)
Visual Studio 2017 Part2 (860)
C++相談室 part130 (943)
ねねっちと一緒にプログラムを勉強するスレ第2話 (911)
Xamarin Part5 (184)
Java入門・初心者質問スレ Part.4 (136)
Swift part11 (155)
Git 15 (951)
推薦図書/必読書のためのスレッド 81 (905)
C#, C♯, C#相談室 Part94 (465)
本当に必要ものは人工知能ではなくて検索エンジン (93)
Visual Studio 2015 Part8 (781)
プログラミング言語 Rust 3 (291)
C# vs Java どっちが好き? その3 (517)
【PHP】下らねぇ質問はここに書き込みやがれ 8 (463)
MacでもLinuxでも使えるVisual Studio Code Part2 (240)
関数型プログラミング言語Haskell Part30 (728)
Androidプログラミング質問スレ revision53 (574)
☆★Java質問・相談スレッド180★★ (351)
テストしにくいコードをテストする方法 その2 (613)
ふらっと C#,C♯,C#(初心者用) Part127 (408)
このサイトについて
このサイトは2ちゃんねるからデータを取得し、表示するサービスです。
画像のインライン表示機能について
画像のURLの後ろにある[画像をインライン表示]をクリックすると、URLの下に表示します。
表示される画像は横幅100pxに縮小されていて、クリックすると原寸で表示します。
このサイトの特徴
1)スレッド内検索ができます
2)レス(「>>1」など)のポップアップができます
3)不適切な言葉を含む投稿を表示しません
4)ページ内で画像を直接表示できます
5)2ch他スレッドへのリンクはタイトル・板名つきでリンクします
6)すっきりとしたデザインで表示します
7)最新スレや前スレをチェック・一覧表示します
8)NGワード機能の搭載でイヤな言葉が目に入りません
9)荒らしを自動チェックします
10)スレッド内・同一IDの書き込みだけ表示できます
11)レスの返事をレスされた発言の下に表示する「まとめビュー」が利用できます
12)シリーズ化したスレッドの一覧を表示します
13)最新のスレッドがある場合はお知らせします
削除について
こちらをご覧ください
機能要望について
現在機能要望受付中です。
問い合わせについて
こちらのページからどうぞ
広告


首都圏の方、ソフトバンク光オススメですよ


このサイトは2ch.scからデータを取得・表示しています。削除などについてはこちらをご覧ください。 アクセスモード:差分取得 - 新着書き込みなし(304)