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


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

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



1 名前:デフォルトの名無しさん mailto:sage [2016/07/22(金) 17:54:09.91 ID:4Vpww6CB.net]
エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。

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

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

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

2 名前:デフォルトの名無しさん mailto:sage [2016/07/22(金) 20:20:40.78 ID:2geFXr7S.net]
>>3
ばーか、おせぇよ

3 名前:デフォルトの名無しさん mailto:sage [2016/07/22(金) 20:26:50.85 ID:hA1h7uZB.net]
すみません

4 名前:デフォルトの名無しさん mailto:sage [2016/07/22(金) 22:27:40.55 ID:ygakIBXL.net]
>>2 
厳しい人だ

5 名前:デフォルトの名無しさん [2016/07/23(土) 21:26:43.76 ID:9xjE/VXj.net]
PostMessageとRead-Modify-Writeが
人々の記憶から無くならぬようアゲ

6 名前:デフォルトの名無しさん mailto:sage [2016/07/23(土) 22:16:43.28 ID:gWGXflXy.net]
そんなに悔しかったのか...

7 名前:デフォルトの名無しさん mailto:sage [2016/07/23(土) 22:17:02.10 ID:hUG6LKaV.net]
c++の仕様肥大化に辟易してしまう
わかる部分だけ使えばいいと言うひとが多いが、チーム開発で初心者もいる中、どーやって線引きすればいいの
テンプレートを少しでも使えば現場によっては
「あいつのプログラムは誰も読めない」になってしまう

8 名前:デフォルトの名無しさん mailto:sage [2016/07/23(土) 22:45:54.83 ID:N0ZB6gKO.net]
その現場は標準ライブラリも使えないから逆に線引きは楽なんじゃないか

9 名前:デフォルトの名無しさん [2016/07/23(土) 22:49:41.17 ID:mN4MO6Sp.net]
>>7
禁止する必要はないと思ってる。
レビューして通らなければ直させるけど、それだけかな。

俺はダマで勝手に使ってるが、ちゃんと動いている限りは特に問題にならない。

10 名前:デフォルトの名無しさん mailto:sage [2016/07/23(土) 23:50:16.34 ID:S66Urcad.net]
リヌースがc++を叩くのは結局、使う人のレベルによってわやになってまう
からなんだろうな。



11 名前:デフォルトの名無しさん mailto:sage [2016/07/24(日) 04:07:33.62 ID:mZjT81w6.net]
>>9
よしレビューしてください
465 デフォルトの名無しさん (スプー Sdbf-oo3f) 2016/07/11(月) 11:14:36.90 ID:pIByFA2bd
char str[32];

throw std::runtime_error(str);

ローカル変数をruntime_errorに渡してスローしても平気ですか

12 名前:デフォルトの名無しさん mailto:sage [2016/07/24(日) 07:37:38.74 ID:L1GkLU8N.net]
リーヌスは多分コンパイラすら疑ってる

13 名前:デフォルトの名無しさん mailto:sage [2016/07/24(日) 08:30:08.42 ID:EeZEhfSx.net]
リーナスがC++嫌いなのはアレルギーだから
それ以上の実のある理由はない

14 名前:デフォルトの名無しさん mailto:sage [2016/07/24(日) 11:10:04.72 ID:LziQs2hg.net]
あいつはただのアジテーター。ジョブズもそうだけどああいう物言いが受けるんだよ。
C++は嫌っているがGCC拡張には頼ってるし、
svnの「cvsをちゃんとする」ってスローガンに難癖をつけたけどgitの方がcvsにずっと近い。

15 名前:デフォルトの名無しさん mailto:sage [2016/07/24(日) 11:20:40.89 ID:jGV+QDTA.net]
とわいいつつ、カーネル以外はどんどんC++の置き換えが起きてるのかな。

16 名前:デフォルトの名無しさん mailto:sage [2016/07/24(日) 11:53:02.06 ID:AZC+VA3K.net]
svnの方向性が嫌いでちゃんとしたcvsを作りたかったんでしょ

17 名前:デフォルトの名無しさん mailto:sage [2016/07/24(日) 12:43:04.79 ID:ledPb1F8.net]
>>14
GCC拡張ェ……
https://cpplover.blogspot.jp/2013/04/llvmclanglinuxgcc.html

18 名前:デフォルトの名無しさん mailto:sage [2016/07/24(日) 23:31:11.79 ID:4tY2Sg6q.net]
そんなこと言ってCだって肥大化してるだろ
tgmathとかマジウンコ

19 名前:デフォルトの名無しさん mailto:sage [2016/07/25(月) 23:39:14.94 ID:+5N+Apn4.net]
math.h本体がいつの間にか
えらいことになっていた。

20 名前:デフォルトの名無しさん mailto:sage [2016/08/01(月) 18:09:20.38 ID:B541oVsd.net]
VisualStudioで

ある.hの初期化が必要なのですが、データの初期化を
 適当なクラスをつくり、コンストラクタに初期化コードを書く
 グローバル変数としてそのクラスのオブジェクトを1個置く。

で、自動的に初期化されるようにしたのはいいんですが、
そのexeのHINSTANCEが必要なときは
どうやって参照すればいいんでしょうか。

コンストラクタはWinMainの実行前に実行されるようなので
WinMainの引数をどこかのグローバル変数にコピーできません。

どこかにHINSTANCEを持



21 名前:つグローバル変数ってVCにあるんでしょうか。
詳しいかたお願いします。
[]
[ここ壊れてます]

22 名前:デフォルトの名無しさん mailto:sage [2016/08/01(月) 18:15:08.35 ID:SASBJwL+.net]
(HINSTANCE)GetModuleHandle(NULL) で取得

スタートアップ部分のソース追っかければわかるけど WinMain に渡ってくるものはソレ

23 名前:デフォルトの名無しさん mailto:sage [2016/08/01(月) 18:24:22.57 ID:B541oVsd.net]
ありがとうございました。
とても助かりました。

24 名前:デフォルトの名無しさん mailto:sage [2016/08/02(火) 20:42:30.57 ID:kV5lRNvj.net]
スコットメイヤーの本ではよく、ここで例外が起こるかもしれない、という話題になりますが
腑に落ちない感じがあります。

newを使うならbad_allocに備えなければならない、とも書かれていますが
今までにnewを書くたびにtry〜catchで囲んでるプログラムを見たことがないですし、必要になったこともありません。

そんなに例外って発生するものなんでしょうか?

25 名前:デフォルトの名無しさん mailto:sage [2016/08/02(火) 21:03:36.16 ID:cf3BF6/s.net]
専用ハンドラを設定するからtryはしないな

26 名前:デフォルトの名無しさん mailto:sage [2016/08/02(火) 21:15:34.95 ID:3HahnRbz.net]
失敗したらわかるわけですしぃ

27 名前:デフォルトの名無しさん mailto:sage [2016/08/02(火) 21:18:38.72 ID:wIxkG2HJ.net]
>そんなに例外って発生するものなんでしょうか?

「万が一発生しても問題の無いようにする」
という話を100万回しても>>23は同じ質問を繰り返すことだろう

28 名前:デフォルトの名無しさん mailto:sage [2016/08/02(火) 21:36:38.59 ID:kV5lRNvj.net]
#include <bits/stdc++.h>

int main()
{
 int* pi = new int(42);

 std::cout << *pi;

 delete pi;

 return 0;
}

このくらいのプログラムでもtry〜catchを書いてないから正しくないプログラム?
ほんまかいな

29 名前:デフォルトの名無しさん mailto:sage [2016/08/02(火) 21:40:13.38 ID:NfCSYQH6.net]
そんなもの正しいかどうかなんてどうでもいい
何がpiなんだよwww

30 名前:デフォルトの名無しさん mailto:sage [2016/08/02(火) 21:45:58.47 ID:H8tkSKeA.net]
例外ハンドリングせずに落としていいプログラムならなにもしなくていいよ



31 名前:デフォルトの名無しさん mailto:sage [2016/08/02(火) 21:49:50.22 ID:xLqDdyJu.net]
つまり、
int *pi = new int;
程度の処理でも例外が発生する可能性を考えて
みんなプログラミングしてるのね

はぇ〜知らんかった。

32 名前:デフォルトの名無しさん mailto:sage [2016/08/02(火) 21:58:18.08 ID:3HahnRbz.net]
nullptrかどうかで判断すればいいわけで。
ただ nothrowにするんだっけかな。めんどくさ。

33 名前:デフォルトの名無しさん mailto:sage [2016/08/02(火) 22:12:08.20 ID:jbpKST8w.net]
>>28
Pointer to Integer だろ

34 名前:デフォルトの名無しさん mailto:sage [2016/08/02(火) 22:15:22.72 ID:LORCbF1r.net]
ルールと運用
本はそりゃちゃんと例外を想定知ろって書くけど
実際にプログラム組むときは自分の裁量で状況に合わせて判断するってそれだけでしょ
現実としていちいち気にしてたらきりないし

35 名前:デフォルトの名無しさん mailto:sage [2016/08/02(火) 22:33:19.51 ID:m6YD+pzD.net]
>いちいち気にしてたらきりないし

きりがないと妄想してしまう自分のオツムに落ち度がある
という発想には至らなかったようた

36 名前:デフォルトの名無しさん mailto:sage [2016/08/02(火) 22:42:27.85 ID:jbpKST8w.net]
想定はするだろ
対処するかとかどんな対処するかは状況次第だけど

37 名前:デフォルトの名無しさん mailto:sage [2016/08/02(火) 22:47:46.55 ID:kBbPvS1u.net]
std::vecter<int> i;
これで事足りるだろう。

38 名前:デフォルトの名無しさん mailto:sage [2016/08/02(火) 22:47:55.92 ID:m6YD+pzD.net]
状況次第とは言え
状況に依存した選択の余地があることの方が珍しい

39 名前:デフォルトの名無しさん mailto:sage [2016/08/02(火) 22:59:49.20 ID:vy0RjdVz.net]
何をしようとも
どちらにせよメモリが足りなかったらエラーが出るんじゃないか?

解放しなかった(delete piが呼ばれなかった)から問題だ、
とか、そういうのでなければ。
まあ、それで言うとnewでNULLが返ってきた時点でdeleteなんて
呼ばなくていいというか、呼んだらエラーが逆に出そうだから
その時点で意味のない例ってことになりそうだが。

40 名前:デフォルトの名無しさん mailto:sage [2016/08/02(火) 23:01:44.58 ID:LE7ByEbd.net]
リスク管理で最初に教えられるのは、「リスクをすべて潰そうと思うな」って話だったな。



41 名前:デフォルトの名無しさん mailto:sage [2016/08/02(火) 23:19:16.69 ID:m6YD+pzD.net]
>解放しなかった(delete piが呼ばれなかった)から問題だ、
>とか、そういうのでなければ

一番の本質のみを考慮から除外するとはいったい何を言っているのか
と思ったが、どうやら
『newを使うならbad_allocに備えなければならない』の意図を大きく勘違いしている。
きっととんちんかんな場所をtryで囲っているに相違ない

42 名前:デフォルトの名無しさん mailto:sage [2016/08/02(火) 23:32:12.30 ID:vy0RjdVz.net]
int main()
{
 int* pi = new int(42);
 try{
  int* err = NULL;
*err = 0;
 }
 catch(...){
  delete pi;
  throw;
 }
 delete pi;
 return 0;
}
たぶんこんなコードにしろっていうんだろうな。
__finallyは使わないのでこんな感じ。異論は認めるが。

43 名前:デフォルトの名無しさん mailto:sage [2016/08/02(火) 23:41:31.50 ID:vy0RjdVz.net]
あ、やっぱ異論は認めなくていいかな。
www.ne.jp/asahi/hishidama/home/tech/vcpp/seh.html#h2_SEH_destructor
>ただし、関数内のオブジェクトのデストラクターは呼ばれない。
これがあるので、__finallyはまったくといっていいほど意味をなさなくなる。

void Func(int n){
 string buf = to_string(n);
 int* err = NULL;
 *err = 0;
}
__try内でFuncを呼び出したら、piは__finallyで解放されるが、bufが解放されない。

44 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 00:03:56.67 ID:y3itLeKx.net]
どんな予測不能な事態がありえるか予測しといてくれ

45 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 00:39:30.08 ID:OT3xj33y.net]
>>42
C++の例外の話をしてたと思うのだけど、なんで突然Windowsの構造化例外の話になったん?

参照元に
>>デストラクターを呼ばせたいなら、通常のC++例外処理を使う。
と書いてあるとおり、
C++の例外が有効でbufがstd::stringならbufのデストラクタが呼ばれるよ

46 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 01:03:32.49 ID:o77xN4AH.net]
>>44
と、思っていたが
C++だとnull pointer exceptionは無いから、*err = 0の時点でプログラム落ちるんじゃ
それで構造化例外なのか?

47 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 06:13:54.95 ID:MT9b5NdH.net]
お前等面倒だから、全部try{}catch(...){}内に入れとけ。

48 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 09:21:18.52 ID:4vVPjgxQ.net]
>>41が意味不
int *pi;
try {
 pi = new int(42);
}
・・・
ならわかるがなぜ外で

new失敗した時のセオリーってなんなん
ハンドラー?
try catch?

49 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 09:24:17.07 ID:GhfDA7Fy.net]
やっぱりな
>>41が正しいtryの位置。
『newを使うならbad_allocに備えなければならない』の意図を読み違えるとこうなる

50 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 09:39:35.27 ID:4vVPjgxQ.net]
>>48
なら前後の文が無いからそもそも意図を読み取るのは不可能



51 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 11:12:31.24 ID:p1E07Fs+.net]
badalloc捕まえるならtryの中でnew しなきゃならんのでわないの?
正直使った事ないんで。

52 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 12:44:35.59 ID:rpffj3+h.net]
今どきアプリケーション層でnewするバカに付ける薬はない

53 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 12:48:55.25 ID:jT3/wbav.net]
カスタムデリーターがいらないなら
std::make_unique
std::make_shared
でOK

配列ならstd::vector使えばよろし

54 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 12:50:26.85 ID:4vVPjgxQ.net]
アプリケーション層言いたいだけだろ

55 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 15:47:07.42 ID:p1E07Fs+.net]
確かにSTLとクラスで十分だもんなぁ。

56 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 18:04:12.47 ID:GhfDA7Fy.net]
>配列ならstd::vector使えばよろし

昨日は配列じゃないものにまでvectorを使おうとする低能がいたな

57 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 18:34:20.33 ID:GhfDA7Fy.net]
>>47
>new失敗した時のセオリーってなんなん
セオリーは例外中立・例外安全。
それを低レベルで達成した例が>>41
高レベルで達成するためのヒントが>>51-52

まあ>>41のヌルポインターの例は良くないな。
オリジナルの『std::cout << *pi;』と書くべき

58 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 20:56:42.26 ID:4vVPjgxQ.net]
>>56
面倒だと思ったらスルーしてね

>>41 > int* pi = new int(42);
が失敗したらその時点で落ちるんじゃ?と思うんだけどどうなってるん
try catchは成功しないと処理されないからいらなくね?っていう

59 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 22:00:42.64 ID:H8VYOBrX.net]
badallocに対応しないといけないという考え方が間違い。

確保したリソースを必ず解放する、というコンセプトが>>41
new int;
の代わりに
Bmp = CreateCompatibleBitmap(SrcDC, 1, 1);
とかにしても同じようなコードを書くことになるぞ。
DCとか使う場合に頻出する。
いまどき使うことない?まあそう言うな。

60 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 22:09:44.32 ID:tgSAPtmr.net]
pi = newは成功しないとtry以降処理されないからtryいらなくね?
後int *err = NULL; *err = 0;は何で調べたら何をしてるかわかる?

生成破棄を対応させろってのはわかるよ



61 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 22:13:05.64 ID:wmDQLAzI.net]
>>57
>失敗したらその時点で落ちるんじゃ?
もろちん
>と思うんだけどどうなってるん
どうもなっていない。途中で失敗して処理が全うできないなら落ちるしかない
>try catchは成功しないと処理されないからいらなくね?
目的が違う

void f() {
int *p=new int(42);//ここの失敗は呼び出し元が気にすること。
        // この関数fの知ったことではない
try { // このtryは
 cout << *p; // ここの失敗に対処するためのもの
}

62 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 22:15:17.65 ID:H8VYOBrX.net]
>>59

newは成功する。try内でエラーが起きたときにエラーにかかわらず
newしたポインタをdeleteするためにtry catchはある。

2行目は、やってる意味がわからないってこと?
実際にやってみればわかるが、アクセス違反が起こって構造化例外が発生する。
例外が処理されなければアプリが落ちる。

63 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 22:34:49.18 ID:p1E07Fs+.net]
new で確保できなかったら落ちるの?
どうなるかわからんって事?

64 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 22:35:39.20 ID:fJKhNvbj.net]
/EHa前提の話?

65 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 22:38:18.48 ID:o77xN4AH.net]
>>44でも言われてるけど構造化例外の話が出てくる理由がわからん

66 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 22:45:35.02 ID:o77xN4AH.net]
nullポインタへのアクセスを検出するのに構造化例外使うのはわかるよ
でも、なんでわざわざ構造化例外使うの?

「ここで例外出しますよ」のコード例なら
throw std::exception
とか
throw 0
でいいじゃん

67 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 22:47:49.01 ID:wmDQLAzI.net]
>>65
じつは41は昨日構造化例外を勉強した。
みんなに知って欲しくて紹介した。
会話の流れ?何それ

68 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 23:08:20.16 ID:hmyyhmNm.net]
newに失敗したらstd::bad_allocがthrowされるから必要に応じてcatchする
set_new_handler使うとか

構造化例外は使う必要ないだろ

69 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 23:12:45.24 ID:wmDQLAzI.net]
一行目と二行目の論理的な繋がりが皆無

70 名前:デフォルトの名無しさん mailto:sage [2016/08/04(木) 00:49:03.67 ID:JEaaydTi.net]
ワードサラダbotが紛れ込んでると聞いて見物に来ました



71 名前:デフォルトの名無しさん mailto:sage [2016/08/04(木) 01:44:12.20 ID:N4vw+za7.net]
ちらっと勉強したら、単純にメモリ確保って訳ではないので、やぱ
例外は捕捉せんとあかんわけね。

72 名前:デフォルトの名無しさん mailto:sage [2016/08/04(木) 01:48:29.00 ID:r0NDF1ZQ.net]
直接newしないようなコード書いても、vectorの奥底でもbad_alloc投げ得るんじゃないの?


bad_alloc頻発するほど大きなデータ扱うアプリ以外は気にしなくていいのでは?
通常bad_alloc出るってよっぽどの事態だと思うけど

73 名前:デフォルトの名無しさん mailto:sage [2016/08/04(木) 05:39:39.61 ID:SDP3HVR0.net]
>>58,60
あぁ俺がなぜ理解できないのかわかった
mainに書かれてるからだ

func内でnewしたポインタがいらなくなる場合はfunc外に出る前に必ず開放しろよってかそれはわかったけど
>>60 > cout << *p; // ここの失敗に対処するためのもの
これ失敗するならnew失敗して落ちるからやっぱtryはいらなくね?

>>61
と思ったけどわざと違反起こす処理を書いて
「別の処理で例外発生したら必ず開放しろよ」って意味ならわかった
*err = 0;の部分ね

74 名前:デフォルトの名無しさん mailto:sage [2016/08/04(木) 05:47:40.42 ID:w3J0CztI.net]
C++って特別な事情(既存の高速なライブラリを使うor 作る)がある場合使うんだね
例外発生ー>素直に止める
例外発生ー>状態を説明して止める
例外発生ー>代替手段があるのでログに残して復旧

とりあえず動けばよい
クリティカル部分が複数あるので状況が知りたい
なるべく止めたくないので十分な予備手段が用意してある

75 名前:デフォルトの名無しさん mailto:sage [2016/08/04(木) 06:37:53.58 ID:lGnnrOsl.net]
>>72
俺が『cout << *p; // ここの失敗』と書いたのは
デリファレンス「*p」ではなくて「operator<<
」なのだが。
operator<<の中では書式出力のためにメモリ等を動的確保したりして例外が出ることがある

76 名前:デフォルトの名無しさん mailto:sage [2016/08/04(木) 09:03:20.04 ID:zv/F9EVu.net]
元の質問がstd::bad_allocについてである以上、newがtry節に入ってない時点で問題外

77 名前:デフォルトの名無しさん mailto:sage [2016/08/04(木) 09:15:55.21 ID:ZweTvWs4.net]
外で囲えということだったのだろうか?
f() の記述中に new してるなら f()の呼び出しで囲え と

78 名前:デフォルトの名無しさん mailto:sage [2016/08/04(木) 09:57:20.39 ID:IdNDvss6.net]
>>75-76
例外が発生するからって、 catch する理由が無けりゃ try で囲う必要なんて無いんだぜ。

79 名前:デフォルトの名無しさん mailto:sage [2016/08/04(木) 10:02:06.45 ID:+ZxmiSQh.net]
>>77
つまりnew失敗するような時は落としてしまえばいいと?

80 名前:デフォルトの名無しさん mailto:sage [2016/08/04(木) 10:05:28.64 ID:IdNDvss6.net]
>>78
落としていいなら catch しなくていい。



81 名前:デフォルトの名無しさん mailto:sage [2016/08/04(木) 14:41:51.61 ID:B4wdumNN.net]
>>79
いや、いちおうcatchして 「タスケテ・・・」 ってログに書くよ。

82 名前:デフォルトの名無しさん mailto:sage [2016/08/04(木) 14:44:24.75 ID:bxLRjhTY.net]
こえーわw

83 名前:デフォルトの名無しさん mailto:sage [2016/08/04(木) 15:08:19.00 ID:TXv7Ibp+.net]
int* pi = new int;
この処理で例外が発生したことがある人、この世に存在するの?
いたら教えて

84 名前:デフォルトの名無しさん mailto:sage [2016/08/04(木) 15:10:36.67 ID:m4SZWNv2.net]
過去に経験が無いから対処しなくていいってのは通用しなくね

85 名前:デフォルトの名無しさん mailto:sage [2016/08/04(木) 15:51:49.25 ID:0bCYfXxC.net]
1回しか実行されないはずの処理がうっかりして大量に実行されてメモリが足りなくなったことならあったな

86 名前:デフォルトの名無しさん mailto:sage [2016/08/04(木) 15:56:01.49 ID:B4wdumNN.net]
>>82
俺ですらやったことはあるし、 この世限定でならいっぱいいると思う。

87 名前:デフォルトの名無しさん mailto:sage [2016/08/04(木) 17:53:54.59 ID:RlXWlikj8]
組み込みならまだしも一般的なOSでメモリ確保の失敗ってありえるの?
そのために仮想メモリという仕組みがあるんだと思ってたけど。

88 名前:デフォルトの名無しさん mailto:sage [2016/08/04(木) 18:55:29.85 ID:10JPHxls.net]
>>76
たまたまnewを中で囲う必要が無い例だっただけだろ
void f() {
 int * p1 = new int;
 int * p2 = new int;
 delete p2;
 delete p1;
}
だったら中で囲う必要がある

89 名前:デフォルトの名無しさん mailto:sage [2016/08/04(木) 19:11:51.96 ID:Wyyp2Ekr.net]
>>82
PostMessageを監視するのがコツ

90 名前:デフォルトの名無しさん mailto:sage [2016/08/04(木) 19:25:22.33 ID:m4SZWNv2.net]
>>87
void f() {
 int *p1 = new int;
 delete p1;
}
これでもnew失敗したら落ちるやん?

try {
 f();
}
catch(...) {}
これなら1つ目のnewはtryいらんのか?いるやろ?



91 名前:デフォルトの名無しさん mailto:sage [2016/08/04(木) 19:50:18.01 ID:ZDw9p1cW.net]
流れをぶった切って悪いんだが質問。
まあ、初心者歓迎ってあるからこんな突発的な質問も許してくれ。

メッセージの流れを確認したいんだけど、
皆さんどうやってデバッグしてますか?
ちなみに私の環境はVS2015 Express(のC++)

やりたいことは、ボタンにスペースキーを押すとクリックイベントが発生しますが
どうやって生成されているのか知りたいのです。
WM_KEYDOWNメッセージのキーコードを
VK_RETURN(クリックされない)からL' 'に書き換えてみたんだけどクリックが発生しなかったので、どこで処理してるのかなと思って
調べたいんですが・・・
もしかしてVK_SPACEってL' '(32)じゃないとか。

それに、メッセージの流れがわからないとデバッグにいろいろ不便で困ってるので。

92 名前:デフォルトの名無しさん mailto:sage [2016/08/04(木) 19:58:45.00 ID:ZDw9p1cW.net]
ごめんなさい、できました。

でも、デバッグの方法は知りたいので教えてもらえれば助かります。

93 名前:86 mailto:sage [2016/08/04(木) 20:03:36.49 ID:xD/P91aq.net]
>>89
>これでもnew失敗したら落ちるやん?
落ちるかどうかはこのコードだけでは判断できないぞ

>1つ目のnewはtryいらんのか?いるやろ?
いや一つ目のnewに対するtryは不要だと思うのだが

94 名前:デフォルトの名無しさん mailto:sage [2016/08/04(木) 22:38:42.73 ID:N4vw+za7.net]
落ちるかもしれない ってのが怖いよね。

95 名前:デフォルトの名無しさん mailto:sage [2016/08/04(木) 23:11:08.34 ID:xD/P91aq.net]
むしろ「途中で失敗した不完全な状態で先に進んだりしない」という圧倒的な安心感

96 名前:デフォルトの名無しさん mailto:sage [2016/08/04(木) 23:49:16.12 ID:r0NDF1ZQ.net]
new intでbad_allocをcatchする状況ってログも記録できなさそうだし、printfすらできなさそう。

new intはまず書かないけどな

97 名前:デフォルトの名無しさん mailto:sage [2016/08/05(金) 01:37:23.44 ID:h9gyRaS3.net]
>>87
実際は unique_ptr とか使うから、やっぱり書かないよ。

98 名前:デフォルトの名無しさん mailto:sage [2016/08/05(金) 02:58:46.58 ID:riQ7lTBs.net]
int hoge{0}; なんてのが失敗する時ってあるのか?

99 名前:デフォルトの名無しさん mailto:sage [2016/08/05(金) 04:23:24.70 ID:pznsau1R.net]
>>97
その定義でスタックが溢れたら落ちる
まずないだろうけど

100 名前:デフォルトの名無しさん mailto:sage [2016/08/05(金) 07:45:20.82 ID:3ew4HwfD.net]
「巨大な配列をローカル変数で作るな」っていうアレだね。
今でも有効な金言のはずだけど、大きさの範囲は往時と桁違い。



101 名前:デフォルトの名無しさん mailto:sage [2016/08/05(金) 07:50:21.51 ID:2RfJu/6K.net]
>>97
それすら失敗する状況があったから
PostMessageさんは生まれたんだぞ

102 名前:デフォルトの名無しさん mailto:sage [2016/08/05(金) 08:56:17.95 ID:ImN4X8Nu.net]
>>92
f() 1つめのnewが失敗したら外のcatchが捕まえるんか
同じ階層にtry catchいるんかと思ってたわ
同じ階層で処理する必要が無かったら外に任せていいんやな

103 名前:デフォルトの名無しさん mailto:sage [2016/08/05(金) 08:57:50.95 ID:ImN4X8Nu.net]
と思ったけど使う側はtry catchいるかわからん場合もあるやん?
中で捕まえて戻り値で示した方がよくね?

104 名前:デフォルトの名無しさん mailto:sage [2016/08/05(金) 11:34:11.43 ID:pznsau1R.net]
作法としてはnoexceptが付いてない限りは例外吐くものとしたほうがいいと言える

実用上どうかは別だけど

105 名前:デフォルトの名無しさん mailto:sage [2016/08/05(金) 13:29:14.93 ID:ccW8btWE.net]
>>91
いわゆるprintfデバグみたいに要所にログ出力を仕込んでいる。
但し出力先はファイル。Windowsイベントやsyslogでもいいかも
IDEのデバッグ機能(ブレイクポイントとか)はあまり使わない

106 名前:96 mailto:sage [2016/08/05(金) 15:48:33.99 ID:riQ7lTBs.net]
結局 何かのオブジェクトを生成する時には失敗する可能性はあるという当たり前の事すね。
どこまでケアするか悩みますなぁ。

107 名前:デフォルトの名無しさん mailto:sage [2016/08/05(金) 23:11:36.86 ID:KuwiCwk0.net]
>どこまでケアするか悩みますなぁ

例外処理に「どこまで」「ケア」という考えが有るとは知りませんでした

108 名前:デフォルトの名無しさん mailto:sage [2016/08/05(金) 23:21:48.06 ID:1l5AtzWC.net]
例外を一切 catch しない手もあれば,食ってしまう手もあるわけで‥

109 名前:デフォルトの名無しさん mailto:sage [2016/08/06(土) 01:49:36.24 ID:XuwJzMZr.net]
>>104
人それぞれみたいだな。

110 名前:デフォルトの名無しさん mailto:sage [2016/08/06(土) 02:22:39.53 ID:GoVmW8ok.net]
障害の発生確率と補償費用による期待値をみて、充分に低いなら敢えて見過ごして損害賠償で対応するというマネジメントもある



111 名前:デフォルトの名無しさん mailto:sage [2016/08/06(土) 03:04:54.83 ID:4Cqooj0F.net]
保険屋ですな

112 名前:デフォルトの名無しさん mailto:sage [2016/08/06(土) 05:41:33.36 ID:KaV1ESpO.net]
なるほど。
例外はもともと、対処を上位コンテキストに委ねるためにわざわざ例外を漏らすものなのに、
すぐに捕捉する方がより良いと勘違いしてしまったから「どこまで」という珍妙な考えに至るんだな。
しかもそれを「例外安全に向けた努力どこまでするか」にすりかえているからたちが悪い

113 名前:デフォルトの名無しさん mailto:sage [2016/08/06(土) 07:17:25.33 ID:gji7A/0H.net]
例外って、想定外環境で動作したのでログを残して終了しますねと
この部分は代替処理を用意したのでログを残してリカバリーしますな使い方じゃないの

それ以外の部分はどうにもならない
通常の四則演算でもうっかりオーバーフローさせて計算結果が変とか
ここら辺は事前に想定と検査が必須だし

114 名前:デフォルトの名無しさん mailto:sage [2016/08/06(土) 07:28:04.31 ID:CxdQuwcg.net]
伝説のCOME FROMを使いこなしている勇者はいないのか?

115 名前:デフォルトの名無しさん mailto:sage [2016/08/06(土) 14:23:28.69 ID:nmPW5pwo.net]
それなに?

116 名前:デフォルトの名無しさん mailto:sage [2016/08/06(土) 16:37:41.98 ID:BjaX+hYV.net]
例外の内容によって対処方法が変わるだろ
俺もどこまでケアするか悩むんだけど

例外によっては可能な限りアプリを安全に終了させないといけなかったり、
処理をリトライしたり。

あと、ログと例外処理は分けて考えて方がよくないか?
絶対セットになってると思うけど。

117 名前:デフォルトの名無しさん mailto:sage [2016/08/06(土) 16:40:57.40 ID:CIMwAPv1.net]
new失敗した時はハンドラでWM_CLOSEをSendMessageしたら安全終了?

118 名前:デフォルトの名無しさん mailto:sage [2016/08/06(土) 17:16:25.01 ID:BjaX+hYV.net]
その状況でWM_CLOSEのSendMessageが保証されているかは知らんけど、
それでアプリを正常終了させることを要求されるならそれでいいんじゃない?

仮に例外でプログラムがクラッシュしてもデータや機器が破損せず、
プログラム再起動で問題なく動作再開できる状態になるなら、 それでも良い世界があるかもしれないし。

119 名前:デフォルトの名無しさん mailto:sage [2016/08/06(土) 17:57:39.04 ID:h7DnkLlu.net]
>>114
www.nurs.or.jp/~sug/soft/super/longjmp.htm#sec36

120 名前:デフォルトの名無しさん mailto:sage [2016/08/07(日) 20:22:15.39 ID:0UTNB4TK.net]
WM_CLOSEをSendしたら即座にDestroyWindowされるんだろうか
たぶんWM_DESTROYがPostされるだけだと思うんだが・・・まあそれはいいか。

それにしても、例外がなかったかのように動作するアプリを作りたいと
思ってるやつは多いようだが、
エラーはエラーとして表示してくれないと困ると思うぞ。



121 名前:デフォルトの名無しさん mailto:sage [2016/08/07(日) 21:05:36.22 ID:sQIJPt7Y.net]
Linux系なのでWM_CLOSEとかめんどくさいですね。
try catch はシグナル処理みたいなもんだと思っております。
VC6は使えますけど、もう忘れましたw

122 名前:デフォルトの名無しさん mailto:sage [2016/08/07(日) 22:08:15.77 ID:Ww4KrQ/z.net]
PostMessageはメモリ枯渇状況になる前にエラーになるって、偉そうに言ってたのがいた
だーかーら、WM_CLOSEはダメらしいよ

123 名前:デフォルトの名無しさん mailto:sage [2016/08/07(日) 22:14:54.96 ID:Y+04W+Li.net]
何をエラーと定義するか次第だけど、
例外発生が即プログラムのエラーになるとは限らないし、
何でもかんでもダイアログで表示されたら煩わしくないか?
自動で復帰できるならメッセージ表示しなくてもいい。ログは記録した方がいいけど。

プログラムのユーザのレベルとか、UXも絡んでそうだからひとくくりには出来ないと思うよ。

124 名前:デフォルトの名無しさん mailto:sage [2016/08/07(日) 22:34:58.56 ID:FG1Pf9CO.net]
118に翻訳が必要なのか
「エラーはエラーとして表示してくれないと困ると思うぞ」
 ↓
「復旧出来ないも有るんだから、そういうエラーはエラーとして表示してくれないと困ると思うぞ」

125 名前:デフォルトの名無しさん mailto:sage [2016/08/08(月) 00:39:47.88 ID:FOEjBVJr.net]
エラーを通知するかどうかの話と例外をどこで処理するかの話をごっちゃにしたら話が混乱するだけでしょ。

126 名前:デフォルトの名無しさん mailto:sage [2016/08/08(月) 00:48:47.48 ID:TzS/bNsO.net]
復旧は関係ないだろ

127 名前:デフォルトの名無しさん mailto:sage [2016/08/08(月) 01:21:40.28 ID:TzS/bNsO.net]
例外を処理するってのは、catchする側とthrowする側の両方含むってことでOK?

適切にエラーを通知(throw, メッセージ表示など)するためには、
例外をどこで処理するか考える必要があるんじゃないの?

128 名前:デフォルトの名無しさん mailto:sage [2016/08/08(月) 06:05:24.79 ID:7KF+UP9b.net]
考えて作るが、一見考えてないようなプログラムになることも多いよ。
特権もなく動作するコマンドラインのアプリならキャッチせずそのまま終了させてログもOS側に任せてしまうとか。

129 名前:デフォルトの名無しさん mailto:sage [2016/08/08(月) 06:48:14.77 ID:B47R2ann.net]
>両方含むってことでOK?
だめ

> メッセージ表示など)するためには、
>例外をどこで処理するか考える
お前は「プログラムをコンパイルするにはコンパイラーの動きを考えてソースを書かないといけないので、コンパイルとはソースを書くことも含む」とか言い出しそう

130 名前:デフォルトの名無しさん mailto:sage [2016/08/08(月) 08:49:45.73 ID:TzS/bNsO.net]
>>128
明確に書いてくれよ、例外処理はcatchだけを指すのか、
そこでの復帰処理も含むのか?
例外をrethrowすることは含むのか?
rethrowする際にエラー内容を収集することは含むのか?

あとコンパイルにコーディングは含まないと思うよ。
コーディング作業にコンパイル作業は含むかもしれないけど



131 名前:デフォルトの名無しさん mailto:sage [2016/08/08(月) 10:59:49.24 ID:B47R2ann.net]
>>129
>例外処理はcatchだけを指すのか
No
>そこでの復帰処理も含むのか?
Yes
>例外をrethrowすることは含むのか?
Yes
>rethrowする際にエラー内容を収集することは含むのか?
Yes

132 名前:デフォルトの名無しさん mailto:sage [2016/08/08(月) 11:51:41.08 ID:179Py0K/.net]
例外処理って言われても...
0で割ると強制的に例外が発生するけど
整数の加減乗算だとオーバーフローが起きてもスルーだよね
マジメに検査すると処理コストがバカに出来ない

例外処理も同じで、不安定さが予想される
例外状態を検出して改善したい
エラーがある確立で確実に発生するので対処したい
目的に応じて対処方法が異なる

あと、アプリケーションでnewなんて使わね〜よは新鮮だった
目的に応じコーディング上の不安定要因を排除しつつ、必要であれば例外検出も組み込む
ここら辺の切り分けが出来ない場合、そもそも君は何を目的にコード書いているの?って話だろ

133 名前:デフォルトの名無しさん mailto:sage [2016/08/08(月) 12:29:07.89 ID:TzS/bNsO.net]
>>130
じゃあ127のだめってなんだよ?

134 名前:デフォルトの名無しさん mailto:sage [2016/08/08(月) 12:35:29.00 ID:TzS/bNsO.net]
>>131
その通りだと思う。

ただ、演算のオーバーフローが致命的な問題かもしれなから、コストかかっても検査しなきゃならない場合もある。

あと、多分newなんて使わねーよってのはスマートポインタ使えってことだろ。
ついでなんで、scope_exitも役に立つことを書いておこう。

135 名前:デフォルトの名無しさん mailto:sage [2016/08/08(月) 13:24:40.61 ID:B47R2ann.net]
>>132
ん? ↓の★のことだが

auto my_throw() {throw int{};}
auto f() {
 try {my_throw();}//例外をスローする★
 catch(...) {my_throw(); }//例外を処理する(その内容がたまたま例外スロー)
}

136 名前:デフォルトの名無しさん mailto:sage [2016/08/08(月) 14:20:57.92 ID:B47R2ann.net]
>>131
>0で割ると強制的に例外が発生するけど
そんな、処理系依存のことをさも普遍的であるかのように語られても

>整数の加減乗算だとオーバーフローが起きてもスルーだよね
そんな、符号の有無によって状況が異なるものを一括りにされても

137 名前:デフォルトの名無しさん mailto:sage [2016/08/08(月) 16:23:34.53 ID:8H2VF6DU.net]
やっぱ男は黙ってlongjmp

138 名前:デフォルトの名無しさん mailto:sage [2016/08/08(月) 18:59:35.32 ID:TzS/bNsO.net]
>>134
125からなぜそう解釈されたのか意味がわからんのと、
my_throwの存在意義がわからんけど、

int compute(int n) throw(exception) {
 int temp[n]; // bad_allocになるかも、ここでは無視する
 int result = hoge(temp, n);
 if (result == 0) { throw runtime_error("failed"); }
 return result;
}
int caller() throw(my_exception) {
 try { return compute(100000); }
 catch (const bad_alloc& e) { terminate(); } // もう無理
 catch (const exception& e) {
  log(e.what(), __LINE__, __FILE__); // ログ残して
  throw my_exception(current_exception(), __LINE__, __FILE__); // 上位に教えてあげなきゃ
 }
}

突っ込みどころあると思うけど、で、例外処理っていうのは、
catchする側の処理と、throwする側の処理の両方を含むってことで、
catchする側はどんな例外をcatchして何をするとか、
throwする側はどんな例外を投げるべきなのか考えるのでは?

139 名前:デフォルトの名無しさん mailto:sage [2016/08/08(月) 19:09:20.00 ID:Rfn+vLgM.net]
jmp_buf[100]

140 名前:デフォルトの名無しさん mailto:sage [2016/08/08(月) 19:35:54.75 ID:/nbVco2G.net]
"); //]]>-->
141 名前:">>>137
それに加えて、可能なら catch しないでそのまま上に任せられるように書けないか考えるってのもある。

途中で失敗したとき catch して delete しないで良いようにポインタを unique_ptr に入れとくとか、mutex のロックはロックオブジェクトのデストラクタで解放されるようにするとかそういうの。
[]
[ここ壊れてます]

142 名前:デフォルトの名無しさん mailto:sage [2016/08/08(月) 20:13:41.95 ID:TzS/bNsO.net]
デストラクタ素晴らしいわ

ところで longjmp 推しの人に尋ねたいんだけど、
longjmp した場合ローカルスコープのデストラクタ発生するんですか?

143 名前:デフォルトの名無しさん mailto:sage [2016/08/08(月) 20:49:31.20 ID:G4IdvMIk.net]
デストラクタ?
なにそれ美味しいの?

C言語

144 名前:デフォルトの名無しさん mailto:sage [2016/08/08(月) 21:06:41.99 ID:B47R2ann.net]
>>138
もう糞コードの予感しかしない

145 名前:デフォルトの名無しさん mailto:sage [2016/08/08(月) 21:08:39.66 ID:B47R2ann.net]
>>140
呼ばれないな。
デストラクターの呼び出しは言語レベルのサポートが必要だから
ライブラリや関数では無理だろう

146 名前:デフォルトの名無しさん mailto:sage [2016/08/08(月) 21:14:41.58 ID:B47R2ann.net]
>>137
『例外処理っていうのは(略)』
全くその通りだと思うが、それと>>126の話に何の関係が。
そういや>>126から>>129にかけて表現が「例外を処理する(handle exception)」から「例外処理(exception handling)」に変わっているけどその影響か

147 名前:デフォルトの名無しさん mailto:sage [2016/08/08(月) 21:55:44.76 ID:yYicVjYE.net]
難しい ってのはわかった。

148 名前:デフォルトの名無しさん mailto:sage [2016/08/08(月) 22:09:26.95 ID:4LKdJSG5.net]
onexitはあるから、COME FROMで捕捉して動的に登録するとか

その昔、c言語にgosub return構造を って記事を読んだ記憶が
あるな。技術評論社で書いたのは平林氏だったかと

149 名前:デフォルトの名無しさん mailto:sage [2016/08/08(月) 22:47:44.21 ID:/nbVco2G.net]
libjpeg 風に呼び出した先のコードが使うリソースは全部呼び出し元の管理下にできるように実装すると、longjmp で戻ってきたときも解放できる

150 名前:ニいう寸法。 []
[ここ壊れてます]



151 名前:デフォルトの名無しさん mailto:sage [2016/08/08(月) 23:51:04.63 ID:bVjpaUT2.net]
googleのスタイル云々読むとtry catcheは捨てたみたいなことが書いてある

152 名前:デフォルトの名無しさん mailto:sage [2016/08/08(月) 23:54:20.24 ID:e2qvnoH0.net]
ほとんどすべての場合普通にエラー返せば済むことだからな

153 名前:デフォルトの名無しさん mailto:sage [2016/08/08(月) 23:58:19.07 ID:YlbbT2Ic.net]
>>148
googleは例外を使ってない古いコードをたくさん抱えてる
例外を使ってないコードと例外を扱うコードを混ぜて使うのは大変だから使わないっていう選択をしている

新規のコードでも例外使うなとは書いてないからね

154 名前:デフォルトの名無しさん mailto:sage [2016/08/09(火) 00:08:36.24 ID:NJpb4SWa.net]
へー。
C++ の話と違って悪いけど、Apple の Swift っていう言語ではフレームワーク(ライブラリ)のポインタ引数にエラーを返す関数を Swift 側では例外として処理するように書けるようになってる。

Obj-C で
[SomeClass add:hage error:&error]
if (error) ...;



do {
SomeClass.add(hage)
} catch let error as NSError {
...
}

と例外処理構文でかける。
好き勝手言語ならではの力技によるエラー戻り値と例外の統合。

155 名前:デフォルトの名無しさん mailto:sage [2016/08/09(火) 00:14:47.26 ID:HQF3JemY.net]
スイフトって美味しいの?

156 名前:デフォルトの名無しさん mailto:sage [2016/08/09(火) 00:18:24.13 ID:TFQX1mgV.net]
リンゴの味しかしない

それがおいしいと感じる人もいる

157 名前:デフォルトの名無しさん mailto:sage [2016/08/09(火) 00:21:02.62 ID:NJpb4SWa.net]
iOS や Mac のアプリ書くにも Obj-C の方がいい。
ってか C++ 混ぜられる Obj-C++ がアップル用には最強。

158 名前:デフォルトの名無しさん mailto:sage [2016/08/09(火) 01:44:16.59 ID:lMOV9twn.net]
Swiftはシンタックスシュガーが多い気がするが、とにかく書きやすいイメージ。基本ARCでshared_ptrなスマートポインタだし、KVOやGCDも魅力的、Cの関数呼ぶのもJava,C#より楽で素晴らしい。

159 名前:デフォルトの名無しさん mailto:sage [2016/08/09(火) 01:53:49.32 ID:udl5axBY.net]
いやそれシンタックスシュガー以外は Obj-C(++ ) にも全部あるかんね!加えてObj-C++ は C++ の全機能!

すまん c++ 好きなんだ。

160 名前:デフォルトの名無しさん mailto:sage [2016/08/09(火) 02:10:20.54 ID:HQF3JemY.net]
android は主力がjavaなんでしたっけ



161 名前:デフォルトの名無しさん mailto:sage [2016/08/09(火) 07:09:57.89 ID:smg0QXvs.net]
例外処理ってC++の処理系がサポートする構造化されたジャンプテーブルの集合体で
実際のCのコードで表現するとかなり冗長で力技な部分、処理に高いコストを払っている
で、どうせ高いコストを払うのなら
>>151
>C++ の話と違って悪いけど、Apple の Swift っていう言語ではフレームワーク(ライブラリ)のポインタ引数にエラーを返す関数を Swift 側では例外として処理するように書けるようになってる。
みたいに処理系が暗黙のテーブルなりフラグなりを生成管理して、見かけ上便利な表記をサポートする
そんな感じになる

だけど、感覚的に便利な表記の裏の実行コストは隠蔽されているので
実際に実行時間でのクリティカルな問題が起きるまで何処が問題なのかわからなくなる

便利な機能でコードを書きたいのなら、現在ではC++以外の選択が沢山あるよね
C#?

162 名前:デフォルトの名無しさん mailto:sage [2016/08/09(火) 07:16:42.52 ID:BF0nl6bY.net]
>>149
返す方の問題じゃなくて受ける方のエラーチェックが面倒だって話すら理解してないのかよ...

163 名前:デフォルトの名無しさん mailto:sage [2016/08/09(火) 07:24:35.79 ID:JS0TrNVx.net]
次はPL*SQLの例外処理の話しかな?

164 名前:デフォルトの名無しさん mailto:sage [2016/08/09(火) 07:54:34.56 ID:+N1v5n8J.net]
Obj-Cとその呪いを受け継いだswiftを持ち上げる人の気持ちが理解できない

165 名前:デフォルトの名無しさん mailto:sage [2016/08/09(火) 09:30:03.54 ID:STmJmNt9.net]
>>158
「処理に高いコストを払っている」というけど正常パスでの時間的オーバーヘッドは無い実装がメジャーなわけで、
「どうせ高いコストを払うのなら」というような話にはならないと思うんだ。

166 名前:デフォルトの名無しさん mailto:sage [2016/08/09(火) 09:31:43.59 ID:FERoGXEy.net]
どうせ○○だからって言う思考はやめた方がいいな

167 名前:デフォルトの名無しさん mailto:sage [2016/08/09(火) 12:04:59.14 ID:smg0QXvs.net]
>>162
あの〜、隠蔽されている部分があるので留意しましょうね程度の指摘なんですけど...
初心者を卒業した人は、色々意識しながら好きにしてくださいとちゃう?

シンタックスシュガーが良く出来ていてコーディングが快適な処理系は沢山でているし
便利なスクリプト言語も楽しいですし

168 名前:デフォルトの名無しさん mailto:sage [2016/08/09(火) 12:49:20.64 ID:lMOV9twn.net]
CのAPIとか、例外構文使えないやつで
// errno 見て成功したか判断してね
int sum(int* values, int count);
とか
int sum(int* values, int count, int* errorCode);
はまあ良いと思うけど、

HRESULT sum(int* values, int count, int* result);
は嫌だな

169 名前:デフォルトの名無しさん mailto:sage [2016/08/09(火) 13:42:50.72 ID:i5d/RDSl.net]
話しかけた相手がアスペだった
ID:STmJmNt9が不憫でならない

170 名前:デフォルトの名無しさん mailto:sage [2016/08/09(火) 13:54:53.98 ID:1Dh6XOYF.net]
>>165
その辺はHRESULT に統一されてるおかげで SUCCEEDED マクロ一発という楽ちん判定が出来るんじゃん。

int some;
if (SUCCEEDED(hoge(nanika, &some)) {
...
}

と。



171 名前:デフォルトの名無しさん mailto:sage [2016/08/09(火) 14:06:09.56 ID:kK7P+MyF.net]
戻りが直接結果になるタイプを要求するのは
戻りをそのまま連続して記述したいから?
 foo(hoge())
これに、エラーを引き渡ようにして
 foo(hoge(&hoge_err), &foo_err)
こうしたい? なんか違う感じだ

172 名前:デフォルトの名無しさん mailto:sage [2016/08/09(火) 15:32:57.52 ID:smg0QXvs.net]
>>162
処理に高いコストを払っているの下りはご認識って事だね、わかりました

173 名前:デフォルトの名無しさん mailto:sage [2016/08/09(火) 15:43:12.20 ID:lMOV9twn.net]
int some; // はぁめんどくさ、しかも初期値必要かな?
HRESULT hr = hoge(nanika, &some); // hoge(Nanika, int*)


auto some = hoge(nanika); // auto最高
if (some == -1) { // errno 見る

HRESULT hr = S_OK;
auto some = hoge(nanika, &hr); // auto最高
if (FAILED(hr)) { // 何かする

みたいな、例外の方がよりいいけど

174 名前:デフォルトの名無しさん mailto:sage [2016/08/09(火) 18:01:40.23 ID:A3T+miCG.net]
なんか違ったみたいだw
人によって結構好みが違うなあ。

175 名前:デフォルトの名無しさん mailto:sage [2016/08/09(火) 22:44:43.67 ID:BIg/3sRw.net]
>>170
一番最後の、hr に成功失敗が全く返されないことがあり、かつその場合は成功とみなして良いという(作る側の)仕様や(使う側の)仮定はあり得なくないか?
そんなの聞いたこともないしそうする利点も思いつかない。

176 名前:デフォルトの名無しさん mailto:sage [2016/08/09(火) 22:50:22.50 ID:i5d/RDSl.net]
通訳すると
「俺の脳みそありえなくね?」
になってしまうのだが、大丈夫ですか

177 名前:デフォルトの名無しさん mailto:sage [2016/08/09(火) 23:15:29.41 ID:k5+ib0A2.net]
>hr に成功失敗が全く返されないことがあり

ってのがどっから出てきたんだか。

178 名前:デフォルトの名無しさん mailto:sage [2016/08/09(火) 23:48:00.35 ID:G1EqcLtF.net]
エスパーすると、初期値にS_OK指定している部分で、それをしないと不定値になる仕様に対処しているとか思っているのだろう。

179 名前:デフォルトの名無しさん mailto:sage [2016/08/09(火) 23:52:29.31 ID:lMOV9twn.net]
[out]属性で値更新されなかったら、APIのバグだろ。
もしくは、
HRESULT hoge(HRESULT* error);
で、errorが更新されたことをreturnするしかないな。
別に、errorはHRESULTじゃなくても同じだけど。

やっぱエラーは例外でthrowして、結果をreturnする方が確実ッ!

180 名前:デフォルトの名無しさん mailto:sage [2016/08/10(水) 00:30:18.62 ID:apTclOZZ.net]
C++の例外ってジャンプテーブルなの?
という疑問があるんだが。まあ何をジャンプテーブルって言うのかちょっと微妙だけど。
switch文みたいなやつか?

あとひとつはジャンプテーブルってそんなにコストかかるのか?
WndProcなんかif文やジャンプテーブルの山だと思うけど。



181 名前:デフォルトの名無しさん mailto:sage [2016/08/10(水) 04:19:31. ]
[ここ壊れてます]

182 名前:33 ID:bfwokPwT.net mailto: 真に受けるんじゃない。 []
[ここ壊れてます]

183 名前:デフォルトの名無しさん mailto:sage [2016/08/10(水) 20:55:18.36 ID:O/fexyuH.net]
>>177
setjmp/longjmp

184 名前:デフォルトの名無しさん mailto:sage [2016/08/10(水) 22:00:02.38 ID:apTclOZZ.net]
>>179

それ、読んだけどあんまりよくわからなかった。
try catchの実装って
catchで呼び出される命令アドレスをスタックポインタにpushして
fsセグメントの0番地にそのスタックポインタのアドレスを
登録しているようなんだけど

それがsetjmp/longjmp?

xor eax, eax
push ebp
push 命令アドレス
push dword ptr fs:[eax]
mov fs:[eax],esp

まあ、jmpには違いないが。

185 名前:デフォルトの名無しさん mailto:sage [2016/08/10(水) 22:30:05.59 ID:YvoH2oZ/.net]
throwを書いた時点ではそれをcatchするコードがまだ存在しないかも知れないというのに

186 名前:デフォルトの名無しさん mailto:sage [2016/08/10(水) 22:35:33.62 ID:wzHKnkf3.net]
catchが無い場合はどおなるの?

187 名前:デフォルトの名無しさん mailto:sage [2016/08/10(水) 22:47:13.55 ID:54wHY0lO.net]
デフォルト

188 名前:デフォルトの名無しさん mailto:sage [2016/08/10(水) 22:53:57.40 ID:wzHKnkf3.net]
ひぇ そっちの方が怖いね

189 名前:デフォルトの名無しさん mailto:sage [2016/08/10(水) 23:26:10.34 ID:6v8gmAa5.net]
std::set_terminate

190 名前:デフォルトの名無しさん mailto:sage [2016/08/11(木) 00:07:02.32 ID:mjr+1oC8.net]
・catchのコードをコンパイルした時点ではスローされるクラスが存在していない可能性がある。
・throwのコードをコンパイルした時点では実際にスローされるクラスがまだ存在していない可能性がある。
・スレッド開始からthrowに至るまでに通るtry(に付いてるcatch)は実行時に決まる。

ジャンプテーブルでは無理だな。
戻り先情報を渡すlongjmpとは別物



191 名前:デフォルトの名無しさん mailto:sage [2016/08/11(木) 01:13:26.55 ID:NtYTAKcg.net]
>>186
2つ目は無いでしょ。結論は変わらんけど。

192 名前:デフォルトの名無しさん mailto:sage [2016/08/11(木) 04:09:57.26 ID:Oj+HuM4/.net]
>>180
fsはスレッドローカルストレージを指す

>>186-187
longjmp使ってtry catchもどきを実装できる

193 名前:デフォルトの名無しさん mailto:sage [2016/08/11(木) 09:07:02.69 ID:MxNORS6j.net]
>>187
それがあるんだな
ideone.com/qJz9tq
fもf_callerも実際にスローされる型を知らない

194 名前:デフォルトの名無しさん mailto:sage [2016/08/11(木) 15:18:59.24 ID:NtYTAKcg.net]
>>187
なんか変に入り組んだ例だけど、単に throw; ならそうなるってことだね。なるほど。

195 名前:デフォルトの名無しさん mailto:sage [2016/08/11(木) 22:30:01.49 ID:MGxA7Inv.net]
もうC++は自由すぎて手に負えず、つまらない部分で嵌まって話が先に進まないので、ベターC++となる新言語が必要なのではないだろうか
sssp://o.8ch.net/fg0j.png

196 名前:デフォルトの名無しさん mailto:sage [2016/08/12(金) 07:32:44.29 ID:MLJoZofC.net]
名称は ++C++ を推す。

197 名前:デフォルトの名無しさん mailto:sage [2016/08/12(金) 08:45:06.21 ID:V4dr4yFb.net]
コイルかよ

198 名前:デフォルトの名無しさん [2016/08/12(金) 11:32:10.03 ID:1Oj5kysc.net]
すみません、どなたか助けてください。下記のコードが期待する動作になりません
ideone.com/Peutpf

上記のコードでstd::sliceの組みを生成しています。
最初のスライスでk-1個の要素を選択し、次のスライスで1この要素を選択したいです。
上記のコードでは 1 2 3 4 5 2 3 4 と出力されていますが、期待する出力は 1 2 3 4 5 です。
どのように修正すれば期待する動作になりますでしょうか?

199 名前:デフォルトの名無しさん mailto:sage [2016/08/12(金) 12:32:43.61 ID:MLJoZofC.net]
俺の環境だと ttp://ideone.com/Peutpf が見えんので助けられん。
(見えたら助けられるという宣言ではない)

200 名前:デフォルトの名無しさん mailto:sage [2016/08/12(金) 12:55:03.52 ID:1Oj5kysc.net]
>>195
すまん設定ミスってたわ

std::slice(k - 1,1,1); って1個の要素が選択されるんじゃないの?
出力がおかしくて意味が分からん。どこを直せばいいんだよ orz



201 名前:デフォルトの名無しさん mailto:sage [2016/08/12(金) 14:01:53.58 ID:MLJoZofC.net]
元のソースで
20. x = aa[p.second];
21. for(auto &elem : x) cout << elem << " ";
となってるところ

202 名前:

20. valarray<int> y = aa[p.second];
21. for(auto &elem : y) cout << elem << " ";
に変えてみ。

18.行で作ったx(要素は4個{1,2,3,4})に 20.行で要素1個{5}を先頭に入れても
残りの要素3個{2,3,4}は変化せずに残ってるのだと思われる。
[]
[ここ壊れてます]

203 名前:デフォルトの名無しさん mailto:sage [2016/08/12(金) 15:01:29.03 ID:A6nfo0WT.net]
>>194
valarrayに補助配列系のオブジェクトを『代入』するときは双方の長さ(要素数)が等しくないと未定義動作
aa[p.second]は長さ1のslice_array<int>を返すので長さ4のxに代入すると未定義動作となり
期待と違う動作になっている

修正は>>197のようにvalarrayを新しく構築するか代入されるvalarrayの長さをresizeで変更しておく

204 名前:デフォルトの名無しさん mailto:sage [2016/08/12(金) 15:30:14.59 ID:5PVVdj86.net]
新しいソート方法を思いついてコーディングしてみた(codepaste.net/6x4e6u)のですが、
早すぎて自分の手持ちのソート法と比較になりませんでした。
このソート(AllaySort)って速い部類なんでしょうか?
ご教授お願いします。

205 名前:デフォルトの名無しさん mailto:sage [2016/08/12(金) 16:24:59.76 ID:1Oj5kysc.net]
>>197,>>198
ありがとうございます。期待した動作になりました。

> valarrayに補助配列系のオブジェクトを『代入』するときは双方の長さ(要素数)が等しくないと未定義動作

なんという罠 orz

206 名前:デフォルトの名無しさん mailto:sage [2016/08/12(金) 16:59:25.24 ID:1Oj5kysc.net]
>>199
車輪の再発明おつ
早い部類に入るソートアルゴリズムだね

207 名前:デフォルトの名無しさん [2016/08/12(金) 17:19:26.18 ID:1cmLpCrQ.net]
>>199
ぱっと見だけど、バケットソートとかビンソートって呼ばれてるやつかな?

208 名前:196 mailto:sage [2016/08/12(金) 17:34:34.04 ID:MLJoZofC.net]
>>198 サイズが同じでないと未定義動作になるんか。
「大きい配列の代入は自動的に拡張、小さい配列の代入は後半に前の状態が残る」
だと誤解していたよ。危ない危ない。

209 名前:デフォルトの名無しさん mailto:sage [2016/08/13(土) 21:22:30.92 ID:6HOeIx46.net]
>>199
アルゴリズムの教科書に全部載ってる。
バブルソートとクイックソートと、なんていうんだったっけ、
カウンティングソートとでも言うんだったかな。

この中ではいちばん速いね。最速に近いのでは。

ここに載ってないのはマージソートとヒープソートくらいかな。
クイックソートと同じくらいの速さだと思うけど。

210 名前:デフォルトの名無しさん mailto:sage [2016/08/13(土) 21:41:16.48 ID:6HOeIx46.net]
ってこのプログラムでは、同じ数字が重複しないことを前提に作ってあるのか。
カウンティングとはいえないかもしれないけど変形ではあるね。

少し変形すれば、同じ数字が重複してもいけるようになる。



211 名前:デフォルトの名無しさん mailto:sage [2016/08/14(日) 00:37:33.69 ID:svhXjdBE.net]
Allayって何かと思ったらArrayのことか

212 名前:デフォルトの名無しさん mailto:sage [2016/08/14(日) 01:36:38.62 ID:CLyKKjmV.net]
きっとローマ字習いたての小学生位じゃね。

213 名前:デフォルトの名無しさん mailto:sage [2016/08/14(日) 01:54:50.48 ID:DQlYnAJX.net]
gally 〜

214 名前:デフォルトの名無しさん mailto:sage [2016/08/14(日) 03:15:55.52 ID:J7BwzSzj.net]
判った!オールayソートだ!

215 名前:デフォルトの名無しさん mailto:sage [2016/08/14(日) 03:50:34.13 ID:sDacwSZP.net]
>>199
専門用語はわからないけど
整列?
ある特定の条件下のみ成立するのじゃない?
単純な並び替えなので高速なのは当たり前かも

216 名前:デフォルトの名無しさん mailto:sage [2016/08/14(日) 04:06:14.51 ID:sDacwSZP.net]
>>199
う〜んうまく表現できないけど
新しいキーを登録するとき全キーの順位を更新後
小さい順番に並び替えただけ?

キーの順位更新コストと並び替えコストが爆発的に増えるアルゴリズムじゃないの?

217 名前:デフォルトの名無しさん mailto:sage [2016/08/14(日) 07:13:05.24 ID:aO2OCXAG.net]
普通にバケットソートじゃないの?
LとRの区別が付いてない時点で普通に恥ずかしいが

218 名前:デフォルトの名無しさん mailto:sage [2016/08/16(火) 19:17:18.67 ID:C7Pqt2dG.net]
割と変数名でやらかしてしまう綴り違い

219 名前:デフォルトの名無しさん mailto:sage [2016/08/17(水) 05:50:38.84 ID:+Cv7Zdkl.net]
「配列の英語の綴りは allay じゃなくて array だぞ」
「あれー?」

220 名前:デフォルトの名無しさん mailto:sage [2016/08/17(水) 07:18:31.50 ID:KTsVTcKZ.net]
>>213
あるあるネタだよね
roop とか Faile とか



221 名前:デフォルトの名無しさん mailto:sage [2016/08/17(水) 08:41:11.19 ID:rz4OYI8a.net]
play pray

222 名前:デフォルトの名無しさん mailto:sage [2016/08/17(水) 10:49:46.46 ID:pHe6W3Xr.net]
>>215
そんな奴おらんわ

223 名前:デフォルトの名無しさん mailto:sage [2016/08/17(水) 12:32:57.99 ID:tL95OhVn.net]
中学時代に書いたコードは綴り間違いたまにあるけどそれ以上では皆無だわ
後で見ると使ってる動詞が微妙みたいなのはいつまでもあるけど

224 名前:デフォルトの名無しさん mailto:sage [2016/08/17(水) 12:42:42.82 ID:rz4OYI8a.net]
>>218
1年前に自分が書いたコード見たら何だこれってのもあるからな

225 名前:デフォルトの名無しさん mailto:sage [2016/08/18(木) 01:28:37.92 ID:hvBEnlpa.net]
烏をbrackbardって書いてあるソースなら見たことある
少し感動した

226 名前:デフォルトの名無しさん mailto:sage [2016/08/18(木) 22:49:54.22 ID:e9I4NFbF.net]
>>216
遊ぶと祈る?

227 名前:デフォルトの名無しさん mailto:sage [2016/08/26(金) 12:47:11.06 ID:xzikXEHz.net]
綴り間違いで別の変数が勝手に作られるクソ言語が滅びますように

228 名前:デフォルトの名無しさん [2016/08/27(土) 08:32:55.84 ID:N/suXJXB.net]
ちゃんと宣言してるのに
定義されてない識別子です。というエラーが出ます
どうしたらよいでしょうか?
その変数を同じブロックの中では参照できましたが
同じクラスのメソッドの定義を書いてあるブロックの中ではこのエラーが出ます
どうしたらよいでしょうか
詰まってます

229 名前:デフォルトの名無しさん mailto:sage [2016/08/27(土) 08:37:06.97 ID:kuSTpJCD.net]
>>223 の文章だけでは状況が想像できなかった。
エラーになるソースの断片を見せてくれればあるいは…。

230 名前:デフォルトの名無しさん mailto:sage [2016/08/27(土) 08:43:24.13 ID:mslVqKaF.net]
>>223
>その変数を同じブロックの中では参照できましたが
?その変数を宣言した同じブロックの中では参照できましたが

宣言した場所と参照する場所の関係が不適切
単純なタイプミス



231 名前:デフォルトの名無しさん [2016/08/27(土) 08:47:08.95 ID:N/suXJXB.net]
A::A
{
int i = 0;
function1(i);←ここはおっけ
}
A::B
{
function2(i);←エラーc2065
}
A::C
{
function3(i);←エラーc2065
}
となります

朝早くからレスありがとうございます

232 名前:デフォルトの名無しさん [2016/08/27(土) 08:47:57.59 ID:N/suXJXB.net]
タイポではありません

233 名前:デフォルトの名無しさん mailto:sage [2016/08/27(土) 08:48:54.72 ID:SRaqh2Cf.net]
>>223
void classA::func1() { int a; a = 0; }
void classA::func2() { a = 0; }
こうならfunc2でのエラーは当たり前

どっちにしろideoneあたりに最小構成でコード上げてみないとなんとも

234 名前:デフォルトの名無しさん mailto:sage [2016/08/27(土) 08:50:38.56 ID:SRaqh2Cf.net]
>>226
class A {
int i;
A();
B();
C();
}
これでok

235 名前:デフォルトの名無しさん [2016/08/27(土) 08:57:11.15 ID:N/suXJXB.net]
>>288
最悪そうするしかなさそうですね...

236 名前:デフォルトの名無しさん mailto:sage [2016/08/27(土) 09:04:40.39 ID:SRaqh2Cf.net]
こういうもんなのw

237 名前:デフォルトの名無しさん [2016/08/27(土) 09:05:04.69 ID:SmFG8gRK.net]
      ク    ク || プ  //
      ス  ク ス  | | │ //
       / ス    | | ッ //   ク   ク  ||. プ  //
       /         //   ス ク ス _ | | │ //
         / ̄ ̄\     /  ス   ─ | | ッ //
       /  _ノ  .\     /         //
       |  ( >)(<)       ___
.        |  ⌒(__人__)     ./ ⌒  ⌒\
        |    ` Y⌒l    /  (>) (<)\
.         |    . 人__ ヽ /  ::::::⌒(__人__)⌒ \
        ヽ         }| | |        ` Y⌒ l__   |
         ヽ    ノ、| | \       人_ ヽ /
.         /^l       / /   ,─l       ヽ \

238 名前:デフォルトの名無しさん mailto:sage [2016/08/27(土) 09:14:46.69 ID:kVDlXYw3.net]
今日はやけにおとなしいな
いつもの煽りはどうした

239 名前:デフォルトの名無しさん [2016/08/27(土) 09:14:52.81 ID:7VQA/4Rj.net]
>>226
この板の初心者大賞はあなたに決定

240 名前:デフォルトの名無しさん mailto:sage [2016/08/27(土) 09:16:15.22 ID:sEPhZVC2.net]
>>226
変数がクラス内で共有して使われるなら>>229の書き方
"c++ メンバ変数"でググれ

変数が関数単位で独立しているなら↓の書き方
以下のiはすべて別の領域に確保される
そして関数を抜けると破棄される
A::A()
{
int i = 0;
function1(i);
}
A::B()
{
int i = 0;
function2(i);
}
A::C()
{
int i = 0;
function3(i);
}



241 名前:デフォルトの名無しさん mailto:sage [2016/08/27(土) 09:26:03.31 ID:XihPAhCF.net]
ブロックスコープの変数ですもんね。

242 名前:デフォルトの名無しさん mailto:sage [2016/08/27(土) 10:05:56.94 ID:H6wDFwtj.net]
そもそも同じブロックに無いのにどうして同じだと思ったんだろうなぁ

243 名前:デフォルトの名無しさん mailto:sage [2016/08/27(土) 10:17:01.66 ID:sEPhZVC2.net]
JavaScriptだとブロックスコープがないからvarやletなしで宣言された変数はグローバルになるらしいな

244 名前:デフォルトの名無しさん mailto:sage [2016/08/27(土) 11:37:24.72 ID:XihPAhCF.net]
クラススコープと混同してるのかも

245 名前:デフォルトの名無しさん mailto:sage [2016/08/27(土) 12:18:58.45 ID:/AaPU2a9.net]
char *(text[]) = {
"100", "200", "300"
};
これってchar text[3][4]と同じようにアクセスできるやん?おかしくない?
char *(text[3])なら「2文字 + \0」の1つの変数のポインタになりそうなもんなのに
なんで文字数が自動になって「X文字 + \0」の3つの変数になるん?

246 名前:デフォルトの名無しさん mailto:sage [2016/08/27(土) 12:28:17.02 ID:s3YfawhT.net]
定義してるのが文字列の配列じゃなくて文字列ポインタの配列だからじゃない?

247 名前:デフォルトの名無しさん mailto:sage [2016/08/27(土) 12:34:49.14 ID:FXXHrfXG.net]
↑日本語が不自由なアスペ

248 名前:デフォルトの名無しさん mailto:sage [2016/08/27(土) 12:37:20.98 ID:FXXHrfXG.net]
>>240
>「2文字 + \0」の1つの変数のポインタ
それをCでは
char (*p)[2+1];
と書く

249 名前:デフォルトの名無しさん mailto:sage [2016/08/27(土) 13:46:11.93 ID:rmIxiT+h.net]
>>240
括弧がついてるせいで惑わされてるのかもしれないが
>>241のいいたかったようにcharの配列の配列(2次元配列)じゃなくてchar*の配列だから

int i[] = {1, 2, 3}; // intの配列
char* p1[] = {

250 名前:デフォルトの名無しさん mailto:sage [2016/08/27(土) 13:49:52.96 ID:rmIxiT+h.net]
途中で消えてるんであげなおし
>>240
括弧がついてるせいで惑わされてるのかもしれないが
>>241のいいたかったようにcharの配列の配列(2次元配列)じゃなくてchar*の配列だから

int i[] = {1, 2, 3}; // intの配列
char* p1[] = {”a”,”b”,”c”}; // char*の配列
char* (p2[]) = {”a”,”b”,”c”}; // 括弧で囲ってるけどp1と同じchar*bフ配列



251 名前:デフャHルトの名無しbウん mailto:sage [2016/08/27(土) 14:11:46.55 ID:/AaPU2a9.net]
char*の配列なら
char text これがchar
char (*text) これがchar*
char (*text)[] これがchar*の配列

char text がchar
char (text[]) がchar配列
char *(text[]) がchar配列のポインタ

って感じに思う

252 名前:デフォルトの名無しさん mailto:sage [2016/08/27(土) 14:57:04.59 ID:kVDlXYw3.net]
どうして「二次元配列と勘違いした」
と言う妄想を指摘されても改めないんだろうか文盲は

253 名前:デフォルトの名無しさん mailto:sage [2016/08/27(土) 15:15:56.85 ID:7VQA/4Rj.net]
>>243
バカ

254 名前:デフォルトの名無しさん [2016/08/27(土) 15:49:10.20 ID:eIOf1V/M.net]
ideone.com/KN7q8K


std::unique_ptr<int> p1;

// std::function<void()> fn1 = [p2 = std::move(p1)]() {};
auto fn2 = [p2 = std::move(p1)]() {};

コメント化してあるほうはエラーになります。
なぜですか?

255 名前:デフォルトの名無しさん mailto:sage [2016/08/27(土) 15:50:20.12 ID:/AaPU2a9.net]
>>247
ちょっと何言ってるのかわからない

char (*text)[2] = { "001", "002" }; // 文字列数
char *(text[2]) = { "1" }; // 文字数 \0含む
ってイメージって話ね

256 名前:デフォルトの名無しさん mailto:sage [2016/08/27(土) 17:46:14.28 ID:cKK6tdTV.net]
>>229

以下のところがよくわからない。

class A {
int i;
A();これはたぶんコンストラクタ。
B();これは何?関数?コンストラクタ?
C();これも。
}

257 名前:デフォルトの名無しさん mailto:sage [2016/08/27(土) 17:57:49.43 ID:Xo5fV+3n.net]
>>249
20.9.11.2.1 [func.wrap.func.con] p7
> template<class F> function(F f);
> Requires: F shall be CopyConstructible.

258 名前:デフォルトの名無しさん [2016/08/27(土) 18:05:12.23 ID:eIOf1V/M.net]
そうですか残念です。
どうもありがとう。

259 名前:デフォルトの名無しさん mailto:sage [2016/08/27(土) 18:50:18.11 ID:/AaPU2a9.net]
>>251
そこは重要ではない

260 名前:デフォルトの名無しさん mailto:sage [2016/08/27(土) 19:06:08.73 ID:VBtD8f+V.net]
>>251
>>226のクラス名をDとしてしまえば
D::A
{
int i = 0;
function1(i);←ここはおっけ
}
D::B
{
function2(i);←エラーc2065
}
D::C
{
function3(i);←エラーc2065
}
となるので>>229
class D {
int i;
A();
B();
C();
}
となるだけでは



261 名前:デフォルトの名無しさん mailto:sage [2016/08/27(土) 20:02:59.14 ID:cKK6tdTV.net]
見易さのために、いろいろ省略してあるという解釈をすることにした。

class D {
int i;
int A();
int B();
int C();
}

ってことだな。

262 名前:デフォルトの名無しさん mailto:sage [2016/08/28(日) 09:02:09.65 ID:mcF9PVw2.net]
>>256
見易さじゃなく無くても普通は流れでわかる部分を省略

263 名前:デフォルトの名無しさん mailto:sage [2016/08/28(日) 10:23:11.54 ID:ERRoyT16.net]
わからなかった人が居た事実は無視ですねw
クラススコープで宣言しないとダメって
わかってる人にしか伝わらない暗号だよなww
わからない人に向けた説明じゃない

264 名前:デフォルトの名無しさん mailto:sage [2016/08/28(日) 11:31:06.41 ID:mcF9PVw2.net]
>>258
質問者>>230はわからない人か?
わかってるから問題無い

265 名前:デフォルトの名無しさん mailto:sage [2016/08/28(日) 11:51:38.89 ID:ERRoyT16.net]
>>259
良かったですねたまたま>>230が理解できてw
そんな言い訳しても「普通は流れでわかる」が
伝わらなかった人がいた事実は変わりませんよww

266 名前:デフォルトの名無しさん mailto:sage [2016/08/28(日) 12:01:29.46 ID:mcF9PVw2.net]
>>260
たまたまじゃないだろ
発端の>>223>>226の書き方を見れば理解できるとわかる

267 名前:デフォルトの名無しさん mailto:sage [2016/08/28(日) 12:14:28.11 ID:ERRoyT16.net]
>>261
いえいえ話をすり替えちゃって
質問者の拙い表現を真似した結果
流れでわからなかった人が出てしまった
事実は変わりませんよw
どこまでいっても「理解できるとわかる」は
あなたの「こうだったらいいな」でしかないのでww

268 名前:デフォルトの名無しさん mailto:sage [2016/08/28(日) 12:22:26.40 ID:mcF9PVw2.net]
>>262
質問者自身が>>226で省略してる部分を省略しただけだからな
質問者がわかったならそれでいい
わからなかったのは外野だからどうでもいいし
お前もただケチつけたいだけの外野
おめでてーな

269 名前:デフォルトの名無しさん mailto:sage [2016/08/28(日) 12:33:29.31 ID:ABmxF0GC.net]
いい質問だったと思いますよ。
@とAの違い。

class HOGE{
  int i; @
  f1(){
    int i; A
    ・・・・
  }
  ・・・
};

270 名前:デフォルトの名無しさん mailto:sage [2016/08/28(日) 12:56:48.64 ID:ERRoyT16.net]
>>263
見苦しい人ですね
素直に「わからなかった?省略してわるかったな」
>>256に言えばいいのに自分に非がないと
意固地に自己保身を続けるのはみっともないですw
>>256に噛みついておきながら挙げ句の果てには
「質問者がわかればいい」なんて逃げ出すなんてww



271 名前:デフォルトの名無しさん mailto:sage [2016/08/28(日) 13:10:22.46 ID:mcF9PVw2.net]
>>265
引っ込みがつかなくなったのか?

>>258 > わからない人に向けた説明じゃない
と言っておきながら
質問者も同じ部分を省略のしているから理解できてるし問題無いと指摘すれば
話をすり替えってどっちがだよ
最初から質問者がわかってるから問題無いと言ってるだろ

>>257を見て噛み付いてるとかどんな妄想?

論点で突っ込めないなら黙っておいた方がいいぞ

272 名前:デフォルトの名無しさん mailto:sage [2016/08/28(日) 13:58:37.59 ID:Feey9nzY.net]
自演はもう良いからヨソでやって

273 名前:デフォルトの名無しさん mailto:sage [2016/08/28(日) 14:03:48.59 ID:mcF9PVw2.net]
>>267
違うわ
なんでそうなる

274 名前:デフォルトの名無しさん mailto:sage [2016/08/28(日) 14:27:10.06 ID:ERRoyT16.net]
>>266
あなたは理解できなかった>>256に対して
「普通は流れでわかる」と言い放ったのですよ
言われた人からしたら「俺は普通じゃない」
になってしまいますw
それを主語は質問者に限定していた
なんてすり替えに他なりませんねww

今回だけ特別に()もう一度だけ言ってあげます
素直に「わからなかった?省略してわるかったな」
>>256に言えばいいのに

275 名前:デフォルトの名無しさん mailto:sage [2016/08/28(日) 14:47:20.79 ID:mcF9PVw2.net]
>>269
質問者に対しての回答なんだから主語は質問者なのは当たり前だろ

質問者のレスと見比べたら質問者じゃなくても普通はわかるしな
わからないなら質問者が何言ってるかすらわからないから論外
お前に何かデメリットでもあんのかよ

276 名前:デフォルトの名無しさん mailto:sage [2016/08/28(日) 14:50:45.95 ID:Feey9nzY.net]
>>268
自演でなくこんなのに構う奴がいるわけないだろいい加減にしろ

277 名前:デフォルトの名無しさん mailto:sage [2016/08/28(日) 14:58:41.58 ID:mcF9PVw2.net]
>>271
残念ながら自演じゃないんだよな
ワッチョイでもIPでも出せばいいのか

278 名前:デフォルトの名無しさん mailto:sage [2016/08/28(日) 15:55:00.14 ID:ERRoyT16.net]
>>270
>主語は質問者なのは当たり前だろ
あなたは自然言語の能力が低いんですね納得しましたw
>>251の発言をした>>256に対して「普通は流れでわかる」
と言ったことを
「君は分からないかも知れないけど質問者は流れで分かる」
という意味だったというのはいくら何でも無理があります
だって>>256に対してもわかることを求める日本語ですから
でも自然言語スキルが低いならそうなって
しまうのも仕方ないですねwww

>質問者のレスと見比べたら質問者じゃなくても普通はわかるしな
あれー、話をループさせてますね
分からない人が実在して、論外ならスルーすればいいのに
あなたはその人にわざわざ「普通は流れでわかる」
と言い出したんですよ嫌がらせです?

279 名前:デフォルトの名無しさん mailto:sage [2016/08/28(日) 16:08:13.50 ID:mcF9PVw2.net]
>>273
省略した理由を誤解してたから「見易さのためじゃなく質問者は省略してもわかるから」って言ってんだが
「君は分からないかも知れないけど」ってのはお前の妄想で付いた装飾

論点と関係無い突込みが増えてんぞ

最初お前が
> わからない人に向けた説明
と言っていた部分に対して「質問者はわかってるだろ」って話
わかるかな?

280 名前:デフォルトの名無しさん mailto:sage [2016/08/28(日) 16:42:40.31 ID:60yVMOKI.net]
あーうっぜーこいつら



281 名前:デフォルトの名無しさん mailto:sage [2016/08/28(日) 17:25:15.61 ID:mcF9PVw2.net]
ID変えるつもりはないからNGしといてくれ

282 名前:デフォルトの名無しさん mailto:sage [2016/08/28(日) 17:48:36.17 ID:ABmxF0GC.net]
こんな時は日付が変るまで じっと我慢ですよ 

283 名前:デフォルトの名無しさん mailto:sage [2016/08/28(日) 17:49:28.89 ID:ERRoyT16.net]
>>274
>質問者は省略しても
その質問者への限定という書かれていない意図が
>>257のレスでは相手に伝わりえないと二度も言っているのですが
自然言語能力の低い人には無駄でしょうね

>最初お前が
> わからない人に向けた説明
(略)
>わかるかな?
また話をループさせるんですね
あなたは質問者に向けた回答を持ち出して
それを理解できなかった>>256に向かって
「普通は流れでわかる」と言ったから
ボクは僭越ながら物申したんですw
>>258の「わからない人」が質問者だと
思ってしまったあなたは本当に残念です

いずれにせよ原因はあなたが自然言語
を正しく
使えなかったからとわかったので
ここまでにしますw

284 名前:デフォルトの名無しさん mailto:sage [2016/08/28(日) 18:51:50.91 ID:mcF9PVw2.net]
>>278
ややこしくしたいだけだろお前

>>256 > 見易さのために、いろいろ省略してあるという解釈をすることにした。
に対して
省略した理由
× 見易さ
○ 質問者には流れでわかる
って話だと何回言ったらいいんだ

暇潰しはできたか?宿題やれよ

285 名前:デフォルトの名無しさん mailto:sage [2016/08/28(日) 18:56:59.03 ID:nd9FhnVh.net]
なんでいつも荒れてるの?

286 名前:デフォルトの名無しさん mailto:sage [2016/08/28(日) 20:49:38.76 ID:VK4fyJjM.net]
このスレには一度した自分の発言を曲げてはならないという掟があるらしい

287 名前:デフォルトの名無しさん mailto:sage [2016/08/28(日) 21:02:58.25 ID:rpWzJfiX.net]
>>256
わからなかった?>>229が適当に省略してわるかったよ
許してやってくれ、な?

288 名前:デフォルトの名無しさん mailto:sage [2016/08/29(月) 07:54:39.69 ID:25l6qL+D.net]
>>282
>>229のアンカ先>>226も見ろ
どう見ても合わせてるだろ

むしろ>>223を理解して>>228のレスしてるしな
>>223を理解できなかった>>224-225だろこいつID:ERRoyT16

289 名前:デフォルトの名無しさん mailto:sage [2016/08/29(月) 08:20:12.37 ID:uxClxO+f.net]
人じゃなくレスを参照したいから228を指したんだろう
荒らしは去れ

290 名前:デフォルトの名無しさん mailto:sage [2016/08/29(月) 08:23:37.46 ID:25l6qL+D.net]
都合が悪いと「荒らし」と思考停止
楽でいいよな



291 名前:デフォルトの名無しさん mailto:sage [2016/08/29(月) 17:38:20.97 ID:zb9cEIRR.net]
1つのフォームウィンドウをメインフォームとし、
他のフォームはWndParentをそのメインフォームとして子フォームを作成するアプリを作っています。

いま、メインフォームを含めた全フォームをEnableWindowでDisableにし、
新しい子フォームを1つだけ表示させます。要するにモーダルなフォームです。

この状態でアプリケーションを非アクティブにします。
そして、メインフォームをクリックします。
すると、WM_ACTIVATEAPPが送られ、モーダルな子フォームがアクティブになります。
ここまではいいのですが

アプリケーションが非アクティブで、Enableでない別の子フォームをクリックしても
WM_ACTIVATEAPPや、WM_WINDOWPOSCHANGINGが送られてこず
まったくアクティブになりません。Spy++で見たところ、WM_SERCURSORしか
送られてきてませんでした。子フォームのクリックではメインフォームにも何も届きません。

どうやったらDisableされた子フォームをクリックするとアプリケーションが
アクティブになるようになるのでしょうか。

よろしくお願いします。

292 名前:デフォルトの名無しさん mailto:sage [2016/08/29(月) 17:59:17.27 ID:uxClxO+f.net]
こっちで聞いた方がいいと思う
Win32API質問箱 Build122
echo.2ch.net/test/read.cgi/tech/1451988219/

293 名前:デフォルトの名無しさん mailto:sage [2016/08/29(月) 18:06:32.78 ID:zb9cEIRR.net]
ありがとう。

いってきます。

294 名前:デフォルトの名無しさん [2016/09/02(金) 01:11:30.72 ID:kTzgtLgu.net]
arduinoのコードを検証したところ
次のようなエラーが出ました

error: variable or field 'function' declared void
error: cannot convert 'String::length' from type 'unsigned int (String::)()const' to type 'const int

みなさんこれはどのようにして解決するのですか?`s(・'・;) エートォ...

295 名前:デフォルトの名無しさん mailto:sage [2016/09/02(金) 01:31:35.82 ID:p8KtkBbH.net]
>>289
↓こちらへどうぞ。
echo.2ch.net/test/read.cgi/tech/1187922645/

296 名前:デフォルトの名無しさん mailto:sage [2016/09/02(金) 01:32:43.96 ID:00KDa+3S.net]
○length()
×length

297 名前:デフォルトの名無しさん mailto:sage [2016/09/02(金) 01:38:08.12 ID:th3uA5/I.net]
エラーになった、ソースコードも書け

const int に変換できない。
定数だから、実行時に代入できない。
コンパイル時(実行前)に、値が決まっている必要がある

298 名前:デフォルトの名無しさん [2016/09/02(金) 01:45:27.20 ID:kTzgtLgu.net]
>>290
こんなすれあったのですね
みなさんありがとうございました

299 名前:デフォルトの名無しさん [2016/09/02(金) 01:57:54.27 ID:kTzgtLgu.net]
>>292
lengthについては
int x = a->length();
という風に使っています
何か悪いんでしょうか?

300 名前:デフォルトの名無しさん mailto:sage [2016/09/02(金) 03:36:05.10 ID:kWkQROgW.net]
漫画喫茶のダイス(DICE)を経営してるのはベルシティ(ザ シティ)というパチンコ店です。
ザ シティ・ベルシティ伊勢佐木町店(神奈川県)の周りにはソープランドがたくさんあります(ソープランド街です)。
このパチンコ店は韓国人か中国人が経営者の可能性があります(パチンコ店のほとんどは韓国人が経営してます)。
ザ シティ・ベルシティ伊勢佐木町店の周りには韓国料理店がたくさんあり、数キロ先には横浜中華街があります(韓国人、中国人がすごく多い地域です)。
普通はこんな場所に店を出さない気がします。

DICE系列 関東圏4
hayabusa6.2ch.net/test/read.cgi/netspot/1467360487/


ダイス(DICE)=まんがランド(漫画喫茶)=ちょっと気分転館(漫画喫茶)=ねっとラボ=ベルシティ(ザ シティ)というパチンコ店


パチンコ店のほとんどは韓国人が経営してます



301 名前:デフォルトの名無しさん mailto:sage [2016/09/02(金) 04:05:59.10 ID:th3uA5/I.net]
>>294
int ではなく、unsigned int じゃないの?

int だと、負の値も受け付ける。
unsigned int では、正の値のみ

君は、変数の型を知らずに、プログラミングしているのか?

302 名前:デフォルトの名無しさん mailto:sage [2016/09/02(金) 04:25:05.17 ID:4UgFxqK+.net]
>>291
どうしてこのスレはこうも文盲が多いんだ? []
[ここ壊れてます]

304 名前:デフォルトの名無しさん mailto:sage [2016/09/02(金) 08:07:15.67 ID:JARk4f24.net]
>>289のエラーの原因が>>291ってことだろ。

305 名前:デフォルトの名無しさん [2016/09/02(金) 08:25:27.86 ID:kTzgtLgu.net]
無事エラーがなくなりました
みなさまありがとうございました(( _ _ ))ペコリ

306 名前:デフォルトの名無しさん mailto:sage [2016/09/02(金) 10:05:15.65 ID:4UgFxqK+.net]
>>298
それは理解した上で、他のクソレスが一体何なのかと気になった

307 名前:デフォルトの名無しさん mailto:sage [2016/09/02(金) 13:28:54.99 ID:+blpbVZU.net]
>変数の型を知らずに、プログラミングしているのか?
C++だとよくあるな
テンプレートのクッソ長い型なんて正確に覚えてないし

308 名前:デフォルトの名無しさん mailto:sage [2016/09/02(金) 13:33:53.61 ID:MJ/JY2i4.net]
型が合わなければ警告が出てフムフムになると思うけど

309 名前:デフォルトの名無しさん mailto:sage [2016/09/02(金) 13:56:28.78 ID:LbMFm82d.net]
autoあるしぃ

310 名前:デフォルトの名無しさん mailto:sage [2016/09/02(金) 15:56:43.58 ID:aRf0CVeC.net]
auto の多用は認知症の素



311 名前:デフォルトの名無しさん mailto:sage [2016/09/02(金) 15:59:58.22 ID:MJ/JY2i4.net]
auto aaa=func();
みたいなのはいんでしょ

312 名前:デフォルトの名無しさん mailto:sage [2016/09/02(金) 18:24:45.18 ID:qjeLwgBZ.net]
どうしてもauto使った方が良い場合以外は使わないほうがいいと思うなあ
俺はイテレータくらいにしか敢えて使わないようにしてるよ

313 名前:デフォルトの名無しさん mailto:sage [2016/09/03(土) 01:20:41.38 ID:B/2UNgqO.net]
make_unique使う時
イテレータ使う時
テンプレート関数なんかで引数の型が決められない時
範囲for使う時
lambda式で関数オブジェクト宣言する時

314 名前:デフォルトの名無しさん mailto:sage [2016/09/03(土) 01:35:36.36 ID:YfCK8gma.net]
なーる 引数の型が決められない時か・・・
範囲for はもうそのまま覚えてるな。
for(const auto &x:obj) cout<<x<<endl;

315 名前:デフォルトの名無しさん mailto:sage [2016/09/03(土) 18:43:22.27 ID:p04JtSr4.net]
POSITIONは書くのが面倒だからautoが重宝する

316 名前:デフォルトの名無しさん mailto:sage [2016/09/05(月) 20:55:19.66 ID:/f1vqBwu.net]
char c=0x82;
int x=c;
キャストしないと駄目なの?

317 名前:デフォルトの名無しさん mailto:sage [2016/09/05(月) 21:27:06.58 ID:1ue4xWo4.net]
しなくてもコンパイル通っただろ
訊かないと分からないの?バカなの?

318 名前:デフォルトの名無しさん mailto:sage [2016/09/05(月) 22:07:39.45 ID:PotsNJZO.net]
キャストはしてんじ「ねーかな

319 名前:デフォルトの名無しさん mailto:sage [2016/09/05(月) 22:19:02.20 ID:yPAKLa+c.net]
0x82を符号無しの数として扱いたいなら
int x=(unsigned char)cとかにしないと
桁あふれが出るので
気をつけてな。

320 名前:デフォルトの名無しさん mailto:sage [2016/09/05(月) 22:24:39.84 ID:si7+YH3F.net]
処理系の仕様かコンパイルオプションでcharがunsignedなら駄目じゃない。が…



321 名前:デフォルトの名無しさん mailto:sage [2016/09/06(火) 01:09:10.68 ID:81btUJay.net]
>>312
暗黙の型変換をキャストとは言わないでしょ。

322 名前:デフォルトの名無しさん mailto:sage [2016/09/06(火) 03:10:36.78 ID:fHacDyq+.net]
>>313
charへ入れた時点で溢れているという発想は無いのかね

>>314
charが82hを表現できる可能性があるという発想は無いのかね

>>315
質問者がC++でなくCだったという発想は無いのかね
「暗黙の型変換」

323 名前:デフォルトの名無しさん mailto:sage [2016/09/06(火) 03:16:15.72 ID:81btUJay.net]
>>316
CでもC++でも、>310のコードには暗黙の型変換はあるいっぽうでキャストは無いという点で違いは無いと思ってる。
CとC++でここらへん何か違うの?

324 名前:デフォルトの名無しさん mailto:sage [2016/09/06(火) 03:33:16.04 ID:fHacDyq+.net]
>>317
Cは「値」の変換、C++は「型」の変換を基本としているので用語が少し違う。
C

325 名前:ネら「暗黙の変換」。せめて「暗黙の型の変換」。
明示的・暗黙についてはその通り
[]
[ここ壊れてます]

326 名前:デフォルトの名無しさん mailto:sage [2016/09/06(火) 08:40:48.67 ID:r9CpfiZJ.net]
で、それが >>317 にどんな関係があるんだ?
まさかちんけな知識自慢じゃないよね?

327 名前:デフォルトの名無しさん mailto:sage [2016/09/06(火) 08:44:13.71 ID:ZDYfZL/r.net]
>>312は「かな入力」

328 名前:デフォルトの名無しさん mailto:sage [2016/09/06(火) 09:34:47.75 ID:81btUJay.net]
>>318
> Cは「値」の変換、C++は「型」の変換を基本としているので用語が少し違う。

そーなの?と思って改めて調べてみたけど、んなこたーなかった。何見て言ってんの?

ISO C (n1570) 6.3 Conversions/1
> Several operators convert operand values from one type to another
> automatically. This subclause specifies the result required from such an
> implicit conversion, as well as those that result from a cast operation
> (an explicit conversion).

ISO C++ (n4606) 4 [conv]/1
> Standard conversions are implicit conversions with built-in meaning.

これらの言う暗黙の変換にはこっそりlvalue(to rvalue)の変換が混ざってたりするんで、
「暗黙の型変換」と言えば暗黙の変換のうち型に関するものに限定する、っていう
常識的な理解で問題ないでしょ。


ちなみにJIS Cは"implicit conversion"に「暗黙の型変換」って訳語をあててた。
規格の翻訳版として不適切な気はする。
kikakurui.com/x3/X3010-2003-01.html#35
> 6.3 型変換
> 幾つかの演算子は,オペランドの値をある型から他の型へ自動的に型変換する。
> 6.3 は,この暗黙の型変換(implicit conversion)の結果及び
> キャスト演算[明示的な型変換(explicit conversion)]の結果に対する要求を
> 規定する。

329 名前:デフォルトの名無しさん mailto:sage [2016/09/06(火) 12:50:01.17 ID:bgQCWsty.net]
PromotionとConversionって知ってるか?
まず、キミらはそこから始めなさい

330 名前:デフォルトの名無しさん mailto:sage [2016/09/06(火) 13:46:19.94 ID:4l7E9vnw.net]
基底クラスでpublicな関数は派生クラスもpublicじゃないとダメと思い込んでた
合わせなくていいんだな



331 名前:デフォルトの名無しさん mailto:sage [2016/09/06(火) 20:17:11.61 ID:MzOIjXFt.net]
派生クラスでprivateにしたらどうなるんだ?

基底クラスにキャストしたら使えるようになるのか。

332 名前:デフォルトの名無しさん mailto:sage [2016/09/06(火) 20:45:54.56 ID:4l7E9vnw.net]
>>324
ごめん仮想関数の話

class A
{
public: virtual void funcA(void);
}

class B : public A
{
private: void funcA(void);
public: void funcB(void) { funcA(); }
}

333 名前:デフォルトの名無しさん mailto:sage [2016/09/06(火) 22:04:33.70 ID:VCItaBw6.net]
>>324
その通り
C++は言語仕様がクソだから

334 名前:デフォルトの名無しさん mailto:sage [2016/09/07(水) 01:56:12.00 ID:R4iuTWHL.net]
質問なんだが
>>325のように派生クラスでvirtualを省略するとどうなるの?

ちゃんとoverrideされるのか、それともreintroduceされるのか。

335 名前:デフォルトの名無しさん [2016/09/07(水) 02:49:01.60 ID:7cFIJKpv.net]
>>327
される。

336 名前:デフォルトの名無しさん mailto:sage [2016/09/07(水) 08:33:01.46 ID:df+fCk0r.net]
>>327
派生クラスとして使わないならvirtual無くてもおk

337 名前:デフォルトの名無しさん mailto:sage [2016/09/07(水) 09:31:03.12 ID:dkr8Avrg.net]
派生クラスはvirtualつけなくても自動的にvirtualじゃない?

338 名前:デフォルトの名無しさん mailto:sage [2016/09/07(水) 10:02:54.39 ID:sjjNPEW0.net]
class A {
public: virtual void funcA() { cout << "A::funcA" << endl; }
};

class B : public A {
private: void funcA() { cout << "B::funcA" << endl; }
public: void funcB() { funcA(); }
};

class C : public B {
public: void funcA() { cout << "C::funcA" << endl; }
};

int main()
{
 A a;
 B b;
 C c;
 A* ar[] = { &a, &b, &c };
 a.funcA(); b.funcB(); c.funcA();
 ar[0]->funcA(); ar[1]->funcA(); ar[2]->funcA();
 return 0;
}

339 名前:デフォルトの名無しさん mailto:sage [2016/09/07(水) 19:05:35.17 ID:R4iuTWHL.net]
>>331
それこそが大問題。そこが一番気になるところでした。

私の予想だけど、派生クラスではどの関数もvirtualがついてないから
VTableはオーバーライドされてないんじゃないかな。

だから、その派生クラスでは自分の実装したメソッドが呼ばれるけど
Aにキャストしたとたん、全部 "A::funcA"になるのでは?

340 名前:デフォルトの名無しさん mailto:sage [2016/09/07(水) 19:25:24.71 ID:5LAjH7P/.net]
そらキャストしてんだからそうなるんじゃ



341 名前:デフォルトの名無しさん mailto:sage [2016/09/07(水) 19:49:23.45 ID:R4iuTWHL.net]
いやいや、virtualだったらキャストしても派生クラスのメソッドが呼ばれますよ。

342 名前:デフォルトの名無しさん mailto:sage [2016/09/07(水) 20:25:00.69 ID:5LAjH7P/.net]
>>334
>>331にはvirtualねぇだろ

343 名前:デフォルトの名無しさん mailto:sage [2016/09/07(水) 20:55:51.13 ID:YLqxd+vc.net]
悪いのは目?それとも頭?

344 名前:デフォルトの名無しさん mailto:sage [2016/09/07(水) 20:57:39.08 ID:stIp4lX5.net]
iteratorを持つクラスや配列は
vector<int> numAry = {...};
for(int num : numAry)
のようにかけますが
N回ループしたいとき
for(int i : N)
に似たような形で書くことはできないのでしょうか

345 名前:デフォルトの名無しさん [2016/09/07(水) 21:12:41.71 ID:XQsQ/Oqp.net]
i : N 用意してifでブレイク

346 名前:デフォルトの名無しさん mailto:sage [2016/09/08(木) 02:27:53.09 ID:ex0VxBXc.net]
for (int i = 0; i < N; ++i)

347 名前:デフォルトの名無しさん mailto:sage [2016/09/08(木) 04:13:38.50 ID:s+VkNmnn.net]
ないみたいすね

348 名前:デフォルトの名無しさん mailto:sage [2016/09/08(木) 05:29:50.37 ID:aAWt9FIS.net]
>>337
一応そんな感じの機能がC++17に提案されてはいたはず

今はまだない

349 名前:デフォルトの名無しさん mailto:sage [2016/09/08(木) 07:28:25.21 ID:QY4vZ8U6.net]
>>334
処理系によってはキャストしても元のメソッドが呼ばれることがある

350 名前:デフォルトの名無しさん mailto:sage [2016/09/08(木) 07:56:15.50 ID:P8D+cYPH.net]
「virtualだったらキャストしても派生クラスのメソッドが呼ばれますよ」
 ↓
「処理系によってはキャストしても元のメソッドが呼ばれる」

そんな、同じことをわざわざ繰り返さなくても



351 名前:デフォルトの名無しさん mailto:sage [2016/09/08(木) 08:22:20.64 ID:/jas+dzW.net]
>>334
基底クラスのメソッドにはvirtualがあるから派生クラスのメソッドが呼ばれるって指摘だろうが
なら>>332の「だから」前後が繋がらなくね?
> Aにキャストしたとたん、全部 "A::funcA"になるのでは?

352 名前:デフォルトの名無しさん mailto:sage [2016/09/08(木) 09:05:24.30 ID:155KpMPy.net]
codepad.org/V3ndGQgI

遡ってって親に virtual があれば、子は暗黙に virtual になってるっぽい
なお規格がどうなってるかは知らない

353 名前:デフォルトの名無しさん mailto:sage [2016/09/08(木) 10:18:11.79 ID:P8D+cYPH.net]
相変わらず日本語が不自由な奴が多いなこのスレは

>>331の派生クラスはvirtualが無いからたぶん非virtual。だから基底クラスにキャストしたら基底クラスの関数が呼ばれるのでは?」
 ↓
「非virtualならキャストしたら基底クラスが呼ばれて当然だろ?」←健常者
 ↓
「でもvirtualなら派生クラスが呼ばれる」←アスペ
 ↓
「virtualが見えない」←文盲
 ↓
「処理系依存みたいだぜ」←嘘つき
 ↓
「基底クラスにvirtualが有ったら派生クラスもvirtualになるって指摘だろ?」←アスペ

354 名前:デフォルトの名無しさん mailto:sage [2016/09/08(木) 10:59:04.81 ID:/jas+dzW.net]
>>346
× 派生クラスもvirtualになるって指摘だろ?
○ 派生クラスのメソッドが呼ばれるって指摘だろ?

その文で言う健常者>>333と文盲>>335と最後のアスペ>>344は俺な

「virtualがついてないから」とか言っておいて
「virtualだったら」はおかしいだろって指摘が>>335
アンカミスしたりしてるが正しくは
>>332はvirtualがない場合って話だろ」だったわすまん

355 名前:デフォルトの名無しさん mailto:sage [2016/09/08(木) 12:10:17.61 ID:YGjJsTy2.net]
>>331
virtualを抜くと
>ar[0]->funcA(); ar[1]->funcA(); ar[2]->funcA();
で全部"A::funcA"出力するんだな
>a.funcA(); b.funcB(); c.funcA();
この部分はそれぞれ実体のある関数を呼んでいるけど
ar[0]->funcA();
みたいなポインター間接にしたとたん挙動が異なる
不思議と言うか罠だな

356 名前:デフォルトの名無しさん mailto:sage [2016/09/08(木) 12:16:01.18 ID:/jas+dzW.net]
>>348
それって当たり前

357 名前:デフォルトの名無しさん mailto:sage [2016/09/08(木) 12:16:04.55 ID:P8D+cYPH.net]
>不思議と言うか罠だな
>不思議と言うか罠だな
>不思議と言うか罠だな

Javaからやってきたんだろうか

358 名前:デフォルトの名無しさん mailto:sage [2016/09/08(木) 12:18:40.43 ID:XrgdeCGY.net]
なんかもう流れが元の質問を見失ってるな
始まりは>>327

359 名前:デフォルトの名無しさん mailto:sage [2016/09/08(木) 12:26:49.90 ID:P8D+cYPH.net]
アスペの>>328はさておいて
>>330が答えてるのに
3分あれば自分で試せることを引きずる必要はない

360 名前:デフォルトの名無しさん mailto:sage [2016/09/08(木) 13:07:17.51 ID:nnNTpHVe.net]
資料に当たってみたよ。規格でなくて悪いがね。
『プログラミング言語C++』第4版、p.589より
「仮想関数をオーバーライドする関数は、デフォルトでvirtualとなる。
派生クラス内でvirtualを記述するのは、可能ではあるが不要だ」

>>327 の質問に対する答えは「オーバーライドされる」(>>330の通り)
ただし俺は reintroduce という用語が分からない。



361 名前:デフォルトの名無しさん mailto:sage [2016/09/08(木) 13:08:23.79 ID:nnNTpHVe.net]
実験用のソースは次の感じかな。(>>331の改変)

#include <iostream>
using namespace std;
class A      { public: virtual void func() {cout << "A::func()" << endl;} };
class B: public A { public:     void func() {cout << "B::func()" << endl;} };
class C: public B { public:     void func() {cout << "C::func()" << endl;} };
int main()
{
  A a;
  B b;
  C c;
  A* ar[] = { &a, &b, &c };
  B* br[] = { &b, &c };

  cout << "Call directly" << endl;
  a.func(); b.func(); c.func();

  cout << "Call from A*" << endl;
  ar[0]->func(); ar[1]->func(); ar[2]->func();

  cout << "Call from B*" << endl;
  br[0]->func(); br[1]->func();

  return 0;
}

A* の配列でオーバーライドされてるのは当然として、
B* の配列経由でもオーバーライドされてるのが分かると思う。
少なくとも、手元の環境ではオーバーライドされた。

362 名前:デフォルトの名無しさん mailto:sage [2016/09/08(木) 14:59:05.43 ID:hiYVTcO5.net]
その状況で派生クラスでvirtualは不要とかc++erなら常識だと思ってた
>>327の質問のポイントはclassB::funcAがprivateになっている点だと思ったんだが
ideonではprivateでもオーバーライドされて、結果的にprivateな関数を外部から呼び出せる形になるみたいだね

https://ideone.com/1XnLya

363 名前:デフォルトの名無しさん mailto:sage [2016/09/08(木) 16:40:15.71 ID:uEaamPLV.net]
>>348
頭大丈夫?

364 名前:353 mailto:sage [2016/09/08(木) 16:54:34.41 ID:nnNTpHVe.net]
俺が実験した環境だと B::func() を private にするとコンパイルエラー。

(変更前: 全体は >>354 を参照)
class A      { public: virtual void func() {cout << "A::func()" << endl;} };
class B: public A { public:     void func() {cout << "B::func()" << endl;} };
class C: public B { public:     void func() {cout << "C::func()" << endl;} };

(変更後: class B のfunc()をpublicからprivateに変更)
class A      { public: virtual void func() {cout << "A::func()" << endl;} };
class B: public A { private:    void func() {cout << "B::func()" << endl;} };
class C: public B { public:     void func() {cout << "C::func()" << endl;} };

エラーが指摘された個所は…
b.func() ... private関数を外から呼んでるからエラー
br[0]->func() ... ポインタ経由なだけで上と同じ
br[1]->func() ... C::func() はpublicに再指定したのに!

ar[] では A::func() がpublicだから呼べる
br[] では B::func() がprivateだから呼べない
コンパイル段階としては妥当な判断と思えるし、
>>355 のソースとも矛盾してないね。

確かに規格でどうなってるか気になってきたわ。

365 名前:デフォルトの名無しさん mailto:sage [2016/09/08(木) 17:00:35.17 ID:P8D+cYPH.net]
なんだこの長文は
規格はクソみたいな記述しか無いぞ
結論はprivateだろうと>>330の通り

366 名前:デフォルトの名無しさん mailto:sage [2016/09/08(木) 17:03:40.96 ID:P8D+cYPH.net]
>br[] では B::func() がprivateだから呼べない
>コンパイル段階としては妥当な判断と思える

良いところに気がついたな
ハゲはアホだからそういう言語仕様にした

367 名前:デフォルトの名無しさん mailto:sage [2016/09/08(木) 17:30:40.83 ID:/jas+dzW.net]
mainでprivate関数を呼べないのは当たり前だろ
class Bのメソッド内からしか呼ばれない設計だからprivateなんだし

br[1]->func()はbrがclass Bのポインタだから

全て当たり前なんだが

368 名前:デフォルトの名無しさん mailto:sage [2016/09/08(木) 19:05:13.67 ID:H7f3BOen.net]
いくら初心者スレだからって、流石に教科書一通りすらも目を通さずに質問するのはお互い時間の無駄だから反省してね

369 名前:デフォルトの名無しさん mailto:sage [2016/09/08(木) 20:00:20.28 ID:P8D+cYPH.net]
よく老人は教科書って言葉を使うけど、教科書ってなんだ?
まさかハゲ本とか言わないよな

370 名前:デフォルトの名無しさん mailto:sage [2016/09/08(木) 20:47:09.90 ID:opSvRovk.net]
特定プロセスにてCreateMutexで生成されたMutexオブジェクトを閉じるというのはC++で可能なのでしょうか?



371 名前:デフォルトの名無しさん mailto:sage [2016/09/09(金) 00:42:47.72 ID:6Bh01W2V.net]
よしではまずお前の考える「閉じる」の定義を言ってみろ

372 名前:デフォルトの名無しさん mailto:sage [2016/09/09(金) 03:31:42.51 ID:vj6paJQh.net]
プログラムが終了すれば全て終わると思います

373 名前:デフォルトの名無しさん [2016/09/09(金) 07:44:34.03 ID:SVVRFbIW.net]
教科書とは規格書のことである。規格書の全てが頭に入ってないものは質問すら許されないのだ

374 名前:デフォルトの名無しさん mailto:sage [2016/09/09(金) 07:57:07.39 ID:vj6paJQh.net]
恐ろしい世界だ

375 名前:デフォルトの名無しさん mailto:sage [2016/09/09(金) 08:02:07.78 ID:z8Otf9Pu.net]
Windowsのミューテックスはプロセスに
またがる資源だったよね

376 名前:デフォルトの名無しさん mailto:sage [2016/09/09(金) 08:46:22.36 ID:puYtutU5.net]
プロセスが死んだら所有権を放棄してハンドルを閉じるところまでOSが面倒を見ている
※ ハンドルを閉じる
 リンクカウンタを減らして 0 になったらオブジェクトを破棄

Advanced Windows に書いてあったかな?

377 名前:デフォルトの名無しさん mailto:sage [2016/09/09(金) 09:33:03.04 ID:D/rbZjJQ.net]
>>363
それは「C++でWin32APIを使用できるか」と同義

378 名前:デフォルトの名無しさん mailto:sage [2016/09/09(金) 09:49:32.83 ID:QrmkumON.net]
自プロセスでもってるMutexハンドルは勿論CloseHandleで閉じれるけど
Mutexオブジェクト自体を破棄することは出来ないなあ
出来たら困る

379 名前:デフォルトの名無しさん mailto:sage [2016/09/09(金) 21:23:39.52 ID:mcpsSWXB.net]
まぁプロセスの実行権を奪うことは可能な訳だから、結果として他プロセスのMutexハンドルも閉じれるとも言える

380 名前:デフォルトの名無しさん mailto:sage [2016/09/09(金) 22:47:33.90 ID:YD15XtYf.net]
プロセスにアタッチしてやりゃクローズするのも余裕ではある



381 名前:デフォルトの名無しさん mailto:sage [2016/09/09(金) 23:27:12.13 ID:vj6paJQh.net]
シグナルを送ればコロっと。

382 名前:デフォルトの名無しさん mailto:sage [2016/09/09(金) 23:30:00.31 ID:9rk0CEE3.net]
PostMessage(hwnd, WM_QUIT, 0, 0);

383 名前:デフォルトの名無しさん mailto:sage [2016/09/10(土) 02:19:28.34 ID:FV6B4AWT.net]
PostMessageのエラーもチェックしないシロウトwwwwwwww

384 名前:デフォルトの名無しさん mailto:sage [2016/09/10(土) 02:22:35.93 ID:AaaFlHcQ.net]
PostMessageはメモリが枯渇する前にフェイルするから要注意だな

385 名前:デフォルトの名無しさん mailto:sage [2016/09/10(土) 02:25:54.65 ID:AaaFlHcQ.net]
PostQuitMessageなら戻り値をチェック【出来ない】ので、オススメだ。

386 名前:デフォルトの名無しさん mailto:sage [2016/09/10(土) 02:37:55.32 ID:nNi8wB7Z.net]
ハライチ?

387 名前:デフォルトの名無しさん mailto:sage [2016/09/10(土) 06:37:28.08 ID:LzJTocys.net]
今って権限違うアプリにウィンドウメッセージ送っても弾かれるんじゃなかったか

388 名前:デフォルトの名無しさん mailto:sage [2016/09/13(火) 00:37:21.83 ID:Vt1Q9cOd.net]
ここにいる皆は、private継承なんて使っているかい?
使っている人は、どんな時に使っているか
教えてほしいな

389 名前:デフォルトの名無しさん mailto:sage [2016/09/13(火) 18:34:02.29 ID:XDS42h3G.net]
よしではまずお前の「private継承」の定義を言ってみろ

390 名前:デフォルトの名無しさん mailto:sage [2016/09/13(火) 18:44:26.08 ID:f8j179dI.net]
class A { };
class B : private A { };
これじゃないんか?



391 名前:デフォルトの名無しさん mailto:sage [2016/09/13(火) 18:45:51.78 ID:XDS42h3G.net]
それ、派生してるけど何も「継承」してないだろ

392 名前:デフォルトの名無しさん mailto:sage [2016/09/13(火) 19:17:46.64 ID:f8j179dI.net]
派生の意味で言ってるんじゃないんか?て意味ね

class A { public: virtual void func(void); };
class B : private A { private: void func(void); };

こっちは>>325あたりから出たしと思って

393 名前:デフォルトの名無しさん mailto:sage [2016/09/13(火) 19:51:29.95 ID:XDS42h3G.net]
なるほど
年をとって3つ以上前のレスは見えなくなったありがと
使ったこと無いからわからん

394 名前:デフォルトの名無しさん mailto:sage [2016/09/13(火) 20:41:13.16 ID:f8j179dI.net]
気にせんといて
俺もわからん

395 名前:デフォルトの名無しさん mailto:sage [2016/09/13(火) 21:21:41.42 ID:Vt1Q9cOd.net]
うん、用語おかしくてごめんね
>>383みたいなもののこと言いたかったんだ

396 名前:デフォルトの名無しさん mailto:sage [2016/09/14(水) 00:30:39.31 ID:aIInqOrt.net]
正直他のクラスのprotectedメンバを外には見せずに使いたいときくらいだろ
> 使っている人は、どんな時に使っているか

397 名前:デフォルトの名無しさん mailto:sage [2016/09/14(水) 00:35:07.25 ID:aIInqOrt.net]
protectedメンバを持ってるクラスそのものを外には見せずに、か

398 名前:デフォルトの名無しさん mailto:sage [2016/09/14(水) 21:03:55.07 ID:q8o26gzh.net]
使ったことある。レアケースだと思う

399 名前:デフォルトの名無しさん mailto:sage [2016/09/14(水) 21:12:53.32 ID:JEExw83M.net]
基本イレギュラって事すか

400 名前:デフォルトの名無しさん mailto:sage [2016/09/14(水) 22:04:08.34 ID:g3+hWH3w.net]
イレギュラなんて事ない。有用なケースなんていくらでもある
一例を挙げれば、例えばコールバックインターフェースを定義してコールバック関数はpublicにするけど
それを実装する方ではprivate継承するとか俺は普通にやってる



401 名前:デフォルトの名無しさん mailto:sage [2016/09/16(金) 13:14:34.58 ID:PpYmmEIW.net]
>>383
そのC++の構文を真似てたD言語は後にアクセス指定部分を廃止し public に統一した

402 名前:デフォルトの名無しさん mailto:sage [2016/09/16(金) 17:53:06.94 ID:8h9JJDXL.net]
C++以外でprivate派生のある言語ってあんの?

403 名前:デフォルトの名無しさん mailto:sage [2016/09/18(日) 15:11:55.72 ID:hCxjOJdn.net]
threadを使ったfor文の中身(書き込み先)が独立なfor文を
マルチスレッド化するコード例を教えてください
例えば
std::vector<int> v;
v.resize(1000);
for(int i = 0 ; i < 1000 ; i++)
{
v[i] = 2*i+1;
}

404 名前:デフォルトの名無しさん mailto:sage [2016/09/18(日) 15:13:33.65 ID:hCxjOJdn.net]
あ、変数っぽいのがあったほうが良いですね
std::vector<int> v;
v.resize(1000);
const int a = 2;
const int b = 1;
for(int i = 0 ; i < 1000 ; i++)
{
v[i] = a*i+b;
}

405 名前:デフォルトの名無しさん mailto:sage [2016/09/18(日) 15:20:02.00 ID:i6p5P4+c.net]
>>396
OpenMP

406 名前:デフォルトの名無しさん mailto:sage [2016/09/18(日) 16:12:58.12 ID:8TOAmXme.net]
>>396
宣言直後にサイズ変更ってなんか要領悪くないですか

407 名前:デフォルトの名無しさん mailto:sage [2016/09/18(日) 17:01:22.76 ID:epT5qit0.net]
また的外れな突っ込みする奴が来たな

408 名前:デフォルトの名無しさん mailto:sage [2016/09/18(日) 18:31:52.64 ID:VS8wi63A.net]
茶化すの好きです(⌒,_ゝ⌒)

409 名前:デフォルトの名無しさん [2016/09/19(月) 11:41:29.54 ID:nWsdJupQ.net]
C/C++を勉強してるんだがこの言語の不得意分野を補完する言語って何があるの?
並行で別言語触り始めようと思ってるんだが
Cが手続き言語、C++がオブジェクト指向なんだろ
低級言語
非ロジック言語
非手続き言語
純粋関数型言語
非純粋関数型言語
スクリプト言語とかいろいろあるけどとりあえずPythonPerlRubyあたりが人気だしやっとけばいいのか

410 名前:デフォルトの名無しさん mailto:sage [2016/09/19(月) 12:39:21.77 ID:uf1tk+gF.net]
非ロジック言語って何?



411 名前:デフォルトの名無しさん mailto:sage [2016/09/19(月) 15:59:04.94 ID:+itM0fM3.net]
C言語は構造型

C++の弱点と言えば
・強力過ぎてcgiなどで権限を制限し難い
・ビルド環境が無いと動くものを作れない
・環境のコアな部分をいじれるので環境依存になりやすい

412 名前:デフォルトの名無しさん mailto:sage [2016/09/19(月) 20:07:15.41 ID:80/BHnqI.net]
新しいパラダイム
実行時の配列の添え字アクセスが有効範囲にあるかコンパイル時にチェックする言語とか

413 名前:デフォルトの名無しさん mailto:sage [2016/09/19(月) 20:54:44.56 ID:3+VF/HK8.net]
>>405
添字の値が外部から与えられたらどうしようもない
ってことぐらいは普通にプログラム組んでたらわかりそうなもんだが...

414 名前:デフォルトの名無しさん mailto:sage [2016/09/19(月) 22:24:36.42 ID:aveOgqLD.net]
>強力過ぎてcgiなどで権限を制限し難い

つまり「ボクはcgiの何たるかをまるで理解してません」
ってことだな

415 名前:デフォルトの名無しさん mailto:sage [2016/09/21(水) 16:37:20.95 ID:6R9yOnVc.net]
int sum{}; という初期化はありですか。

416 名前:デフォルトの名無しさん mailto:sage [2016/09/21(水) 17:01:59.00 ID:K2D2Rq8+.net]
>>408
『プログラミング言語C++』第4版のp.168あたりを見ると、
ありどころか、ハゲ先生はその形式での初期化を勧めてるね。

「C++11以降なら型によらず同じ書き方で
デフォルトの初期化ができるからマジ{}オヌヌメ。
って言いながら今でも int sum = 0; とか
うっかり書いちゃうこともあるんだ、てへぺろ」

みたいな記述がある。

417 名前:デフォルトの名無しさん mailto:sage [2016/09/21(水) 18:22:23.33 ID:cJThJ26e.net]
int i {0}; 式作法を敷衍していたらvector v {1024,0};でヒドい目にあった

418 名前:デフォルトの名無しさん mailto:sage [2016/09/21(水) 20:39:17.08 ID:mzpKxj3U.net]
江添によるとハゲ自身がinitializer_listを取るコンストラクターにうっかり使ってバグってる本を出したんだっけか。
もう、迷ったらハゲの逆を選択するしかない

419 名前:デフォルトの名無しさん mailto:sage [2016/09/21(水) 20:51:30.68 ID:l42SpJ8P.net]
{}はinitializer_list前提で使って、コンストラクタ呼び出す時は()に統一すればいいんじゃね?
基本型の場合は使いたければint i {}にすればいい。

420 名前:デフォルトの名無しさん mailto:sage [2016/09/21(水) 21:05:24.87 ID:6R9yOnVc.net]
>>409 トン
あのハゲはてへぺろまで使うのか おとろしいハゲだ。

int i[100]={}; は便利だと思って、int i{};やったらコンパイラもなんも言わなかったんで はい。
つか int i;で0初期化の規格にならんのかな。



421 名前:デフォルトの名無しさん mailto:sage [2016/09/21(水) 21:20:16.98 ID:7Xpfd1N0.net]
initializer_lisや配列初期化以外の{}を規格に入れたのが間違い
普通に=0しろ

422 名前:デフォルトの名無しさん mailto:sage [2016/09/22(木) 07:56:10.92 ID:uum3cLOt.net]
int <| 0 |>; を提案

423 名前:デフォルトの名無しさん mailto:sage [2016/09/22(木) 07:57:07.38 ID:uum3cLOt.net]
int i <| 0 |>;

424 名前:デフォルトの名無しさん mailto:sage [2016/09/22(木) 07:59:02.23 ID:uum3cLOt.net]
ms dom <| 0 |>;

425 名前:デフォルトの名無しさん [2016/09/22(木) 19:41:09.05 ID:1GDV9io1.net]
<i|H|j>

426 名前:デフォルトの名無しさん mailto:sage [2016/09/22(木) 20:57:57.50 ID:csMhzqFc.net]
やめれ

427 名前:デフォルトの名無しさん mailto:sage [2016/09/22(木) 22:28:18.80 ID:X4UeXH89.net]
vectorにinitializer_listのコンスコを追加したのがおかしいだろ。
initializer_listは別の書式にするべきだった。
int a{10}; // 整数の初期化
int a[2] {10,20}; //配列の初期化
struct A {int a,b;} g{10,20};// 集合体の初期化
struct A {A(int,int){}} g{10,20}; // クラスの初期化
vector<int> g{10,20};// コイツさえいなけりゃ

428 名前:デフォルトの名無しさん mailto:sage [2016/09/22(木) 23:57:21.17 ID:UBDA34w0.net]
>>420
これは確かに思う
一度はまった

429 名前:デフォルトの名無しさん mailto:sage [2016/09/23(金) 00:29:17.31 ID:tPpdE/S0.net]
コンパイラは頭がウニになってんだろな

430 名前:デフォルトの名無しさん mailto:sage [2016/09/23(金) 00:51:01.95 ID:z/oo94n5.net]
Warning欲しい



431 名前:デフォルトの名無しさん mailto:sage [2016/09/23(金) 10:24:07.62 ID:M8l9LwvJ.net]
むしろ引数つきコンストラクタ呼べるのが混乱の元

432 名前:デフォルトの名無しさん mailto:sage [2016/09/23(金) 13:10:24.94 ID:z2QCychJ.net]
引数なしで生成してから設定しろと?
それじゃオーバーヘッドが生じるじゃないですか

433 名前:デフォルトの名無しさん mailto:sage [2016/09/23(金) 13:11:38.55 ID:M8l9LwvJ.net]
いや{}でって話

434 名前:デフォルトの名無しさん mailto:sage [2016/09/23(金) 13:22:44.40 ID:whHVCxTc.net]
>>425
従来通り()でやればいいだけ
変な「統一性」なるものを無理やり入れたことが混乱の元になってる

435 名前:デフォルトの名無しさん mailto:sage [2016/09/23(金) 13:29:12.53 ID:z2QCychJ.net]
アナル

436 名前:デフォルトの名無しさん mailto:sage [2016/09/23(金) 13:33:16.60 ID:ircl/elV.net]
でも新しいもんでやりたいみたいな

437 名前:デフォルトの名無しさん mailto:sage [2016/09/23(金) 14:39:02.57 ID:z+X1CJw6.net]
以下で実行すると、 printf("あいうえお\n");が実行されないのですが原因はどういったものになるでしょうか?
具体的には、scanfで5回目の数値を入力してエンターを押すとコマンドプロンプトが消えてしまいます。
お助けいただけますと幸いです。どうぞよろしくおねがいいたします。

#include <stdio.h>
#define scanf scanf_s

int main(void)
{
int test[5];
int tmp, i, s, t, j;

printf("テストの点数を入力してください。\n");
for (i = 0; i < 5; i++) {
scanf("%d", &test[i]);
}
printf("あいうえお\n");


return 0;
}

438 名前:デフォルトの名無しさん mailto:sage [2016/09/23(金) 14:59:51.73 ID:hdVg5emL.net]
直接実行するんじゃなくてコマンドプロンプトから起動してみ

439 名前:デフォルトの名無しさん mailto:sage [2016/09/23(金) 15:01:18.43 ID:z2QCychJ.net]
ミーハーで節操がない癖に頑固

自己紹介です

440 名前:デフォルトの名無しさん mailto:sage [2016/09/23(金) 15:06:09.29 ID:z+X1CJw6.net]
>>431
アドバイスありがとうございました。そして自己解決もしました!
新しいプロジェクトを



441 名前:デフォルトの名無しさん mailto:sage [2016/09/23(金) 15:07:29.87 ID:z+X1CJw6.net]
すみません、途中で書き込んでしまいました…。
新しいプロジェクトを作っていたので、リンカーのサブシステム設定?をコンソールにしたら、
無事想定どおりになりました。
正しく処理されているけど、処理が終わって高速で閉じてしまっていたんですね。ありがとうございました。

442 名前:デフォルトの名無しさん mailto:sage [2016/09/23(金) 19:07:06.65 ID:WiufwV3J.net]
std::transform の疑問なのですが、
en.cppreference.com/w/cpp/algorithm/transform では
while (first1 != last1) {
*d_first++ = unary_op(*first1++);
}
return d_first;
となっていますが
cpprefjp.github.io/reference/algorithm/transform.html では
効果が
[result,result + (last - first)) 内のイテレータ i の要素に、それぞれ op(*(first + (i - result))) を代入する
となっています。
日本語の方の op(*(first + (i - result))) の - resultはどこから来ているのでしょうか?
テストプログラム作って動かしてみても日本語の方の説明を理解することが出来ません。
気にせずに英語の方を信じていれば良さそうですが...

443 名前:デフォルトの名無しさん mailto:sage [2016/09/23(金) 19:14:11.35 ID:jjS354wW.net]
どう見ても関数の引数なのだが

444 名前:434 mailto:sage [2016/09/23(金) 19:37:03.24 ID:WiufwV3J.net]
説明が悪すぎました
動作を見てみると
op(*(first + i))
と記述したほうが良いと思うのですが、
op(*(first + (i - result)))
としなければいけない理由はあるのでしょうか?
単純に引数を返す関数を与えてやると、firstからlastの値を、resultからresult+(last-first)にコピーすることになり、
op(*(first+(i-result)))と説明できる動作で無いように思えます。

そもそも、イテレータ同士を足し合わせるような記述が良いのかどうかもわかっていませんが

445 名前:デフォルトの名無しさん mailto:sage [2016/09/23(金) 20:01:47.95 ID:kJ5RCJcw.net]
拝見いたしました! 関数の引数だと思います!

446 名前:デフォルトの名無しさん mailto:sage [2016/09/23(金) 20:15:05.19 ID:kJ5RCJcw.net]
拝見いたしました!iとresultは同じ型で、尚且つOutputIteratorだからです!
例えば元がint列で出力先がfloat列となるとしたらあなたの書き方では型エラーとなります!
関心事はインデックスです。だから差を取るのです! std::distance

447 名前:デフォルトの名無しさん mailto:sage [2016/09/23(金) 20:32:57.96 ID:FB5yu9xq.net]
>>437
イテレータはポインタの汎化
(first + i)の値firstとiそれぞれをポインタだと考えてみると?

448 名前:436 mailto:sage [2016/09/23(金) 20:39:29.86 ID:WiufwV3J.net]
>>439
なるほど、わかりました。
iが何なのか分かってなかった

449 名前:からですね。 []
[ここ壊れてます]

450 名前:デフォルトの名無しさん mailto:sage [2016/09/23(金) 23:31:15.85 ID:FY4YgdZ3.net]
これだからDTは



451 名前:デフォルトの名無しさん [2016/09/24(土) 04:56:39.70 ID:wJtABjr3.net]
コピーコンストラクタがよく分かりません。
誰か簡潔に説明してくれませんか?

452 名前:デフォルトの名無しさん mailto:sage [2016/09/24(土) 05:05:40.95 ID:lXjdqoQb.net]
そのまま
すでにあるインスタンスの情報を元に
それをコピーして新しいインスタンスを作るコンストラクタ
一般的にそのコピーの内部処理としてディープコピーが要求されるから注意が必要というだけ

453 名前:デフォルトの名無しさん mailto:sage [2016/09/24(土) 05:07:01.10 ID:lXjdqoQb.net]
あと継承関係でもなんか注意が必要だった気がするな

454 名前:デフォルトの名無しさん mailto:sage [2016/09/24(土) 05:14:45.91 ID:oYgGfkv1.net]
オブジェクトから同じ内容のコピーオブジェクトを作るという需要があるから
その機能は構造を知ってるクラス自身が持つべきだよね というただそれだけ

でも実際はインターネット上にあふれる情報ゴミを見ればわかるように
コピーが散在すると一元管理が出来なかったり邪魔になるケースも多い

455 名前:デフォルトの名無しさん mailto:sage [2016/09/24(土) 11:19:42.02 ID:sun0lWHr.net]
>>443
A a(param);
A copy = a;

このcopyは自分と同じ型の他のオブジェクトのコピーの意味で生成する。
このコピー生成をメンバーごとのコピーでなくて色々処理するために用意する特別な引数のコンストラクターがコピーコンストラクター。
その形は
A(A const&)
A(A const &, int = 100) など

456 名前:デフォルトの名無しさん mailto:sage [2016/09/24(土) 11:39:12.83 ID:r3S5KKxj.net]
コピーコンストラクを使うかどうかはコンパイラが判断する?

457 名前:デフォルトの名無しさん mailto:sage [2016/09/24(土) 11:44:20.93 ID:sun0lWHr.net]
する場合がある
例: A a = A{};
例: A a = f();
例:
void f() {
 A a;
 return a;
}

458 名前:デフォルトの名無しさん mailto:sage [2016/09/24(土) 11:45:41.83 ID:sun0lWHr.net]
fの戻りの型間違えたまあいいか

459 名前:デフォルトの名無しさん mailto:sage [2016/09/24(土) 16:08:40.62 ID:9U1MP9t0.net]
コピーと移動がよく分かっていないのですが、コピーか移動かを瞬時に判別できる方法はありませんか?
a = std::move(b); と書かれた場合はすぐに移動だと分かりますが
a = b; とだけ書かれた場合、コピーなのか移動なのかをすぐには判断出来ません。

460 名前:デフォルトの名無しさん mailto:sage [2016/09/24(土) 16:13:53.21 ID:a/wjW3kE.net]
>std::move(b); と書かれた場合はすぐに移動だと分かりますが

んなこたーない



461 名前:デフォルトの名無しさん mailto:sage [2016/09/24(土) 16:17:23.25 ID:9U1MP9t0.net]
>>452
えっ?
std::moveが移動の意味で使われないなら一体どういう意味で使われるのでしょう?
実際にコピーになるのか移動になるのかは別としてプログラマーの意図としてはstd::moveは移動の意味で使っているのではないのですか?

462 名前:デフォルトの名無しさん mailto:sage [2016/09/24(土) 16:22:42.28 ID:L3fdYMLr.net]
a = b;はコピーです判断の余地はありません

463 名前:デフォルトの名無しさん mailto:sage [2016/09/24(土) 16:23:20.57 ID:a/wjW3kE.net]
>コピーか移動かを瞬時に判別できる方法はありませんか?
 ↓
>実際にコピーになるのか移動になるのかは別として

勝手に大前提をすり替えられても…

464 名前:デフォルトの名無しさん [2016/09/24(土) 16:37:36.25 ID:g/gfVTwZ.net]
>>451
おいおい、>>453の意味であれば、見たまんま上が移動で、下がコピーでしょ。
それ以外の解釈があるのか逆に聞きたいわ。

465 名前:デフォルトの名無しさん [2016/09/24(土) 16:39:07.35 ID:/HMHbDuU.net]
ぶひ

466 名前:デフォルトの名無しさん mailto:sage [2016/09/24(土) 16:41:46.40 ID:r3S5KKxj.net]
ムブするのであれば && か 対応関数 が見えるはず

467 名前:デフォルトの名無しさん mailto:sage [2016/09/24(土) 16:54:53.93 ID:a/wjW3kE.net]
>判別できる方法はありませんか?
>とだけ書かれた場合 (中略) 判断出来ません
 ↓
>判断の余地はありません

>判別できる方法はありませんか?
>とだけ書かれた場合 (中略) 判断出来ません
 ↓
>見たまんま

このスレを表すかのようなアスペな回答 👀
Rock54: Caution(BBR-MD5:0be15ced7fbdb9fdb4d0ce1929c1b82f)


468 名前:デフォルトの名無しさん mailto:sage [2016/09/24(土) 16:59:16.75 ID:L3fdYMLr.net]
自己紹介きた

469 名前:デフォルトの名無しさん mailto:sage [2016/09/24(土) 17:26:26.88 ID:BW8EWCg4.net]
>>452
理由を示さず否定なんて誰でもできる

以降のレス見てもケチつけたいだけって丸分かり

470 名前:デフォルトの名無しさん mailto:sage [2016/09/24(土) 18:22:28.37 ID:M/J9F64h.net]
移動ってのが、オブジェクトのメモリコピーだよね。
でコピーってのがコピーコンストラクタによるデータの複写(ポインタとか更新)
ってことかな。

うーん、コピーコンストラクタを作らなかったらオブジェクトのメモリコピーになるんだっけ?
コピーコンストラクタがあるかどうかは、コード見ないと判定できないと思う。
std::moveはよく知らない。

でも、メモリコピーってあんまり必要ないのでは?
ポインタ渡しか、参照渡しにしておいて、コピー



471 名前:ェ必要がなときは
明示的に仮想関数作って渡したら問題にならないのでは。
A a;
A copy = a;
という書き方をそもそもやめる、という提案です。
virtual A* copy();をAに導入し
class B : public A{} // copyも実装する。
B b;
A* copy = b.copy();
[]
[ここ壊れてます]

472 名前:デフォルトの名無しさん mailto:sage [2016/09/24(土) 18:53:15.96 ID:Qp3BxrXe.net]
>>451 がコピーとか移動とか言ってるのはスマートポインタのイメージでしょ

473 名前:デフォルトの名無しさん mailto:sage [2016/09/24(土) 19:06:23.86 ID:M/J9F64h.net]
>>463
そうなんですか。
詳しくないので私は引っ込みます。

474 名前:デフォルトの名無しさん mailto:sage [2016/09/24(土) 19:24:14.35 ID:L3fdYMLr.net]
メモリコピー?スマートポインタ?
ついにmoveセマンティクス知らないのに口出すやつまで登場したか

475 名前:デフォルトの名無しさん mailto:sage [2016/09/24(土) 19:47:12.69 ID:tf67xW+x.net]
先ずは共通認識の構築からだ

476 名前:デフォルトの名無しさん mailto:sage [2016/09/24(土) 21:10:16.06 ID:M/J9F64h.net]
すみません。
>>451へのレスではなく、>>443からの流れで書いていました。

moveも多少読んでみました。
がいまいちよくわからない。
まあ参照使ってれば「私は」いいや。他の人はともかく。

477 名前:デフォルトの名無しさん mailto:sage [2016/09/24(土) 21:31:30.73 ID:a/wjW3kE.net]
コピーか移動かを瞬時に判別できる方法を教えて貰えなかった>>451が哀れ

478 名前:デフォルトの名無しさん mailto:sage [2016/09/24(土) 21:59:48.77 ID:WCJRreB0.net]
まぁ実際使いみちないよなmoveセマンティクスって

479 名前:デフォルトの名無しさん mailto:sage [2016/09/24(土) 22:05:08.48 ID:L3fdYMLr.net]
はいまた一人

480 名前:デフォルトの名無しさん [2016/09/24(土) 22:13:13.66 ID:g/gfVTwZ.net]
>>469
めっさ使っとるちゅーねん。



481 名前:デフォルトの名無しさん mailto:sage [2016/09/24(土) 22:53:19.88 ID:M/J9F64h.net]
moveって使うと得られるメリットってなんなん?

高速化以外で。
ソースコードの可視性が劇的によくなるとかなら積極的に採用してもいいけど。

482 名前:デフォルトの名無しさん mailto:sage [2016/09/24(土) 23:15:18.97 ID:WQBsW3re.net]
moveって実質右辺値参照へのキャストでしょ?
static_cast<HOGE &&>(X)みたいな手で毎回キャストを書くようなことを避けられる

あとはその変数がmoveされてそれ以後は使える保証がないことの明示

だと思ってる

483 名前:デフォルトの名無しさん mailto:sage [2016/09/24(土) 23:16:36.25 ID:qaJz0JNz.net]
moveの重要な点は「コピーではなく所有権を移動するだけ」ってことでしょ
ただ1つだけ存在すべきオブジェクトはmoveがないと相当使いずらいのでは?

484 名前:デフォルトの名無しさん mailto:sage [2016/09/24(土) 23:38:03.71 ID:M/J9F64h.net]
d.hatena.ne.jp/gintenlabo/20110116/1295195945

ここを読んでなんとなくわかった。
でも私はこのサイトの一番最初の参照を使ったやり方でも悪くないと思ってる。

まあ、あれだね。
moveを使うと、かっこいい。ってところだろうか。

とはいえ、分かってる人だけで使うならともかく
あまり知らない人がいるプロジェクトとかで使うのはちょっとためらわれるかな。

速度:参照よりわずかに早い
可読性:人を選ぶ
これを使うことで劇的によくなるアルゴリズムとか・・・:参照とあまり変わらない

に見えました。違ってるかな・・・
>>474も参照使えば問題ないし。

うーん・・・

485 名前:デフォルトの名無しさん mailto:sage [2016/09/24(土) 23:55:16.55 ID:WQBsW3re.net]
俺たち別にmove推奨委員会とかじゃないし
使う人が少ないと罰をうけたりする訳じゃないから好きにしたらいいんじゃないかな

質問に対して回答は試みるけど、如何に〜が魅力的であるかプレゼンしろなんていうのに付き合う義務はないんだよね

486 名前:デフォルトの名無しさん mailto:sage [2016/09/25(日) 00:10:39.35 ID:GqGzTSc4.net]
自分が理解できないものをそれゆえにいくら否定しても理解できてる人には届かんのよ

487 名前:デフォルトの名無しさん mailto:sage [2016/09/25(日) 00:12:43.53 ID:lJk8v4pc.net]
参照だと所有者が消えた際にオブジェクトも消える問題がある。
参照を貰った人よりも所有者が絶対に長生きするなら、参照で渡してもいい。

shared_ptr で所有権を共有する方法もあるけど、
確実に一人しか所有できないオブジェクトは所有権を移譲していかないといけないので、moveセマンティクスが必要になる。
これは unique_ptr を std::move で移譲するようにコーディングされる。

488 名前:デフォルトの名無しさん mailto:sage [2016/09/25(日) 00:14:56.89 ID:UzqqdlMx.net]
unique_ptrみたいにコピー代入演算子が潰されてるようなやつはstd::moveせんといかん

489 名前:デフォルトの名無しさん [2016/09/25(日) 00:50:41.25 ID:lStwGWWP.net]
auto_ptrで嫌な目にあったの思い出した。
だからmoveセマンティクスの構文ラベルサポートとunique_ptrはかなり嬉しかった。
それまで、自作のcopy潰したauto_ptrもどきとswapを多用してたからなー。

490 名前:デフォルトの名無しさん mailto:sage [2016/09/25(日) 02:43:29.63 ID:pfZGi8ro.net]
moveセマンティクスが導入された一番の動機は一時オブジェクトの扱いなのであって
std::moveなんてのは付け足しに過ぎん



491 名前:デフォルトの名無しさん mailto:sage [2016/09/25(日) 02:55:36.41 ID:ojcO179+.net]
お前絶対プログラミングしてねえだろって奴が偉そうに語っててワロタ

492 名前:442 [2016/09/25(日) 02:57:09.04 ID:jPdJhJQ+.net]
今朝コピーコンストラクタについて質問した者です。
答えてくれた方ありがとうございました。

しかし理解は完全にはできませんでした…。
皆さんのレスを参考に勉強を深めたいと思います。

493 名前:デフォルトの名無しさん mailto:sage [2016/09/25(日) 03:14:52.75 ID:pfZGi8ro.net]
moveセマンティクスについてはこのアーティクルが肝心なことを簡潔に書いてると思う
www.ibm.com/support/knowledgecenter/ja/SSGH3R_12.1.0/com.ibm.xlcpp121.aix.doc/proguide/rvaluereferences.html
C++幼稚園児諸君は読んでみて

494 名前:デフォルトの名無しさん mailto:sage [2016/09/25(日) 07:33:31.51 ID:hrPU7kVw.net]
ああ、Java, C# で、文字列を、+ でつなぐな、という問題か

一時オブジェクトがすぐ、GCされて非効率だから、
String.Buffer を使えと、よく言われる

495 名前:デフォルトの名無しさん mailto:sage [2016/09/25(日) 07:37:03.57 ID:Wcpea8Wx.net]
GCならまだマシで動的メモリ確保の遅いC++で
一時オブジェクトを量産したら被害甚大

496 名前:デフォルトの名無しさん [2016/09/25(日) 11:20:30.57 ID:vCHFqWrv.net]
OpenCVを用いた画像処理プログラミングで
IPlImage* img;
img->imageData[img->widthStep*y+x]
という記述があるのですが
widthStep*y+x
という部分が特に理解出来ません。
この*マークは何の意味があるんでしょうか?
C++も初めて使うので、*がC++の文法によるものなのか
OpenCVの文法によるものなのかも分かりません。
ついでにimageDataというものが何なのかもよく分かりません。
誰か教えてください><

497 名前:デフォルトの名無しさん mailto:sage [2016/09/25(日) 11:26:29.80 ID:0li9cgt4.net]
* 掛け算の記号

(x, y) における画像の参照
 1行あたりのデータ数 widthStep に 現在行 y をかけ x 列目 で実現

498 名前:デフォルトの名無しさん mailto:sage [2016/09/25(日) 11:33:00.28 ID:fXLErY67.net]
C++初めてって他の言語はやってたんかな
* が 掛け算じゃない言語って少なそう

499 名前:デフォルトの名無しさん [2016/09/25(日) 11:59:03.03 ID:rJ5VXYcV.net]
img->widthStep * y + x
とか
x + y * img->widthStep

とおなじ

500 名前:デフォルトの名無しさん mailto:sage [2016/09/25(日) 11:59:22.83 ID:+9MWYzA+.net]
>>486
C++だから動的確保のスピードが遅いのか?根拠は?



501 名前:デフォルトの名無しさん [2016/09/25(日) 12:08:05.79 ID:vCHFqWrv.net]
>>488-490
ありがとうございます。
掛け算なのはわかりました、imageDataとかwidthStepとか知らないものが入り乱れてたので
訳が分からなかったのですが、どちらかというとやっぱりOpenCV側への理解が自分に足りてないのが1番問題だったとわかりました。

502 名前:デフォルトの名無しさん mailto:sage [2016/09/25(日) 12:25:29.89 ID:1B4pL85n.net]
じゃあクラスのメンバとして変数を持つのと
関数ブロック内で持つのはどっちがいいん?
メモリと速度の観点それぞれ

503 名前:デフォルトの名無しさん mailto:sage [2016/09/25(日) 12:34:27.18 ID:Kl1oOdje.net]
>>493
関数ブロック内で持つってどういうことだよ
autoとstaticどっちの話だ

504 名前:デフォルトの名無しさん mailto:sage [2016/09/25(日) 12:36:44.52 ID:1B4pL85n.net]
あぁごめん両方

1, クラスのメンバ
2, 関数ブロック内でauto
3, 関数ブロック内でstatic

505 名前:デフォルトの名無しさん mailto:sage [2016/09/25(日) 13:29:18.14 ID:hrPU7kVw.net]
スタック領域からメモリを取得する、Local変数が速い

ヒープ領域からメモリを取得する方法でも、メモリプールのように、
あらかじめ確保されている領域から、メモリを取得すれば速い

506 名前:485 mailto:sage [2016/09/25(日) 13:47:43.52 ID:oG/N7H54.net]
>>491
標準ライブラリの既定のアロケータが劇遅なのは周知の事実だろ
アレクサンドレスクやメイヤー先生も認めていることを今更疑うのか?
ideone.com/2E5tI1
ideone.com/8nv9TX
あとGCは解放処理が別スレッドで行われることもお忘れ無く

507 名前:デフォルトの名無しさん mailto:sage [2016/09/25(日) 14:40:25.37 ID:HSyNyUub.net]
静的領域に確保し、後は解放すらせず無理矢理上書きするのが最も高速

508 名前:デフォルトの名無しさん mailto:sage [2016/09/25(日) 15:25:23.88 ID:pfZGi8ro.net]
>>497
固定サイズのnew、delete繰り返してもアロケータの性能評価にはなってないな
もうひと工夫欲しいところだ

509 名前:デフォルトの名無しさん mailto:sage [2016/09/25(日) 15:38:53.20 ID:Xdpp91mz.net]
>>497
delete呼ばずに測るか、GCするまで測るかしないと不公平じゃね。

510 名前:デフォルトの名無しさん mailto:sage [2016/09/25(日) 16:21:28.26 ID:prRy0Y/9.net]
>>497
いったい何を測定したつもりになってるんだ?
このバカは



511 名前:デフォルトの名無しさん mailto:sage [2016/09/25(日) 20:13:21.40 ID:1aUptooJ.net]
>>497
遅いから日本では自社製作の高速アロケータ使っているところがほとんどだろ?

512 名前:デフォルトの名無しさん mailto:sage [2016/09/26(月) 00:56:43.41 ID:Pk4ESFoo.net]
言いたい事は既に>>499-501に書いてあった

513 名前:デフォルトの名無しさん mailto:sage [2016/09/26(月) 08:09:58.71 ID:O7LHb0BE.net]
要するに自前アロケーターを持ってこないとstd::stringは遅いんだな?

514 名前:デフォルトの名無しさん [2016/09/26(月) 08:18:52.70 ID:KcJYed3k.net]
自作アロケータなんてこだわっても意味なし。
それより自動解放・確保を減らすほうがムダがない。
たとえば確保に10ミリ秒と1000ミリ秒かかる二つがあったとしても、いったん確保後に解放せず
使い回せば全体としては大差はない。

515 名前:デフォルトの名無しさん mailto:sage [2016/09/26(月) 08:21:37.30 ID:O7LHb0BE.net]
要するに自動解放・確保を減らす工夫をしないとstd::stringはゴミなんだな?

516 名前:デフォルトの名無しさん [2016/09/26(月) 08:24:57.98 ID:KcJYed3k.net]
google-perftoolsが出てきたとき、アロケータは対して意味なしと思い知った。
実験すると確かに早かったりするのだが、実用アプリのボトルネックがメモリ確保なんて事がほぼない。
たとえば全体の処理時間の1-2% 部分を100倍速にしたところで体感できない。




Cアプリを高速化せよ! - 正式リリースされたgoogle-perftoolsを試す
TCMalloc(Thread-Caching Malloc)は通常のmallocよりも高速なメモリ割り当てを実現するライブラリであり、
テスト環境ではglibc 2.3のptmalloc2に比べて約6倍の処理速度を記録したという。
news.mynavi.jp/articles/2009/01/27/perftools/

517 名前:デフォルトの名無しさん [2016/09/26(月) 08:27:48.27 ID:KcJYed3k.net]
>>506
実測すべき。
よほどstringの確保を乱用してない限りこだわる意味なし。
ふつうのプログラム

518 名前:してたらそこがボトルネックに
なることは少ないはず。もしなってたら自動解放させないようにしたらいい。
[]
[ここ壊れてます]

519 名前:デフォルトの名無しさん mailto:sage [2016/09/26(月) 09:09:06.02 ID:UNhnvz4Q.net]
そもそも文字列の連結多用するならbuilder使わなきゃjavaでもc#でも遅いだろ。
c++なら始めに一度十分なサイズでreserveしておけばいい。

520 名前:デフォルトの名無しさん [2016/09/26(月) 09:47:47.74 ID:J1+8+U1V.net]
サブルーチンを外部クラス化して毎回newして呼び出すと、
サブルーチンとして使ってた時よりも遅くなるのでしょうか。



521 名前:デフォルトの名無しさん mailto:sage [2016/09/26(月) 13:21:14.93 ID:dCLpbBIB.net]
本当に遅いんですかねぇ。g++でもそうなんですか。

522 名前:デフォルトの名無しさん mailto:sage [2016/09/26(月) 15:56:50.93 ID:6CUCyCpl.net]
というか遅い場合は、普通はプロファイリングして、どこの関数が処理時間の何割を占めているかを調べて
占めているものから許容最低限までトップダウン的に高速化していくでしょ。
ボトムアップ的に取り敢えずメモリ確保解放は〜なんて着手するわけない。
手を入れるなら予めここを改善するしかないと判明しているからやるんであって、こんなことやっても意味ない言説は的外れ

523 名前:デフォルトの名無しさん mailto:sage [2016/09/26(月) 20:21:18.22 ID:BQOhZwsD.net]
>>512
開発途中で改善点を洗い出すためにプロファイリングするからな
その結果、メモリ確保解放を改善したほうが良いとなれば改善すると

524 名前:デフォルトの名無しさん mailto:sage [2016/09/26(月) 20:32:03.69 ID:up4fCe4G.net]
逆に言えばもしアロケーションがネックになってるならC/C++なら対処する方法があるということ
Javaや.NetじゃそうはいかずGCで立ち往生状したりする

525 名前:デフォルトの名無しさん [2016/09/26(月) 20:51:14.28 ID:Tqv0EJxC.net]
初歩的な質問です。
for文の条件式の箇所には論理積(論理和)を用いた式を使えますか?(i>=0 && i<=10 など)

526 名前:デフォルトの名無しさん mailto:sage [2016/09/26(月) 20:56:31.00 ID:fWQfq8Yx.net]
使える
論理積(論理和)の結合も式だしー

527 名前:514 [2016/09/26(月) 21:20:18.48 ID:Tqv0EJxC.net]
>>516
ありがとうございます。

528 名前:デフォルトの名無しさん mailto:sage [2016/09/27(火) 09:11:01.94 ID:lZ2V1Ihe.net]
>>517

while(条件式)
for( ; 条件式 ; )
やってる事はどっちも同じで「真の間」だからね

529 名前:デフォルトの名無しさん mailto:sage [2016/09/27(火) 14:59:00.77 ID:2KXCoLj+.net]
forを使う時はループ回数が決まってるっぽいイメージ

530 名前:デフォルトの名無しさん mailto:sage [2016/09/27(火) 15:02:00.27 ID:BRQxJXVF.net]
無限ループは
while (1) で記述する派
for ( ; ; ) で記述する派



531 名前:デフォルトの名無しさん mailto:sage [2016/09/27(火) 15:44:37.05 ID:nYSsADem.net]
#define forever true

while( forever ){
:
:
}

532 名前:デフォルトの名無しさん mailto:sage [2016/09/27(火) 17:29:44.12 ID:Kmv19/IP.net]
カーニハンは無限ループは while (1) か for (;;) で書け、
他の書き方はするな、みたいなことを言ってるね。

彼自身は for (;;) を使い、"for-ever" と読み下すそうな。
普段から英語で話す人には分かりやすいのかも。

533 名前:デフォルトの名無しさん mailto:sage [2016/09/27(火) 17:37:17.82 ID:pauJ19dH.net]
#define e ;
#define v
#define r
for( e v e r ) {
;
}

534 名前:デフォルトの名無しさん mailto:sage [2016/09/27(火) 18:01:10.82 ID:lZ2V1Ihe.net]
#define forever for(;;)
forever {
}

535 名前:デフォルトの名無しさん mailto:sage [2016/09/27(火) 18:46:31.81 ID:cO8I5ivP.net]
それだと
#define forever while(1)

とかもありになっちゃって普通

536 名前:デフォルトの名無しさん mailto:sage [2016/09/27(火) 19:29:43.84 ID:bFdF3zA0.net]
>>520
俺は
> for ( ; ; ) で記述する派
の方
当時使ってたコンパイラが
> while (1) で記述する派
に警告を出してたから

537 名前:デフォルトの名無しさん mailto:sage [2016/09/27(火) 19:45:39.04 ID:s5OR0fYf.net]
whileって実は要らなかったんじゃない?
while(条件式)とfor(;条件式;)ってタイプ数同じだし

538 名前:デフォルトの名無しさん mailto:sage [2016/09/27(火) 19:51:55.86 ID:N5Quo4Cu.net]
初回は必ず通って末尾で判定する do { } while (条件) は残って欲しい

539 名前:デフォルトの名無しさん mailto:sage [2016/09/27(火) 20:16:54.55 ID:3O+TtbVt.net]
>>527
そんなことを言い出したら if と goto あれば do も for も while も要らんわけで...

540 名前:デフォルトの名無しさん mailto:sage [2016/09/27(火) 21:13:05.71 ID:g24JTUzj.net]
いやそれは違うだろう



541 名前:デフォルトの名無しさん mailto:sage [2016/09/27(火) 21:23:09.13 ID:nYSsADem.net]
所詮gotoのシンタクティックシュガーよ

542 名前:デフォルトの名無しさん mailto:sage [2016/09/27(火) 23:04:57.72 ID:g24JTUzj.net]
gotoとforじゃ似ても似つかないけど
whileとforは類似点が多く
forがあればwhile要らないんじゃねって意見はわかる
特に最近はrange-based forが使えるようになったから
ますますwhileの出番はなく、俺の中でwhileは空気

543 名前:デフォルトの名無しさん mailto:sage [2016/09/27(火) 23:50:51.34 ID:yio6JmTZ.net]
goto使うと叩かれるから
いまはdo { } while (0)だよな

544 名前:デフォルトの名無しさん mailto:sage [2016/09/28(水) 00:34:57.27 ID:5gV7Hb6z.net]
gotoは末尾再起最適化に使うだろ

545 名前:デフォルトの名無しさん [2016/09/28(水) 01:38:36.66 ID:LOSUa8nH.net]
>>526
無限ループ構文になっていても、カッコの中にbreakやexitという記述があれば警告メッセージは出さない、というのがスジですよねぇ。

546 名前:デフォルトの名無しさん mailto:sage [2016/09/28(水) 06:55:16.68 ID:6UKmmY9W.net]
>>532
物事の本質を捉える能力低すぎやろ w

547 名前:デフォルトの名無しさん mailto:sage [2016/09/28(水) 06:57:01.41 ID:6UKmmY9W.net]
>>535
そこまでのフロー解析をコンパイラに求めるのもどうかと思う
C なら longjmp 、C++ だと例外で一気抜けとかもあるし

548 名前:デフォルトの名無しさん mailto:sage [2016/09/28(水) 14:11:54.13 ID:rAk8UzYM.net]
仕組みだけに着目すればgotoがあれば繰り返し文は要らないと
極論を言っているように思えるが
これは究極アセンブラがあればC++は要らないと言っているようなもので
生産性や可読性が全く加味されてない
さらに拡大すると、最終的には人を雇えばプログラムを書かなくてもよいという話にもなり
まったく意味がない話になる
どの「程度」の話をしているかということが全くわかってない

whileをforで置き換えてもタイプ数は変わらないし可読性も落ちないし
生産性も変わらないのでwhile文は空気という話

繰り返し文禁止で全部gotoで書けと言われればかなりの苦痛だが
while文禁止でfor文で書けと言われても、特別困ることはない
実際の作業性を加味したうえで、whileは空気

549 名前:デフォルトの名無しさん [2016/09/28(水) 15:15:57.60 ID:+gKRoTUg.net]
かつてダイクストラ大先生が go to 有害論をブッテいたけれども、
そのことは、もう忘却の彼方に成ったのでしょうかね。

Fortran IVを多少なりとも構造化しようとして、カーニハンとプローガーのRATFORもどきを
作って、構造化したFRORTNの有難さを感じた世代としては、なんともいえない淋しさ
を感じます

550 名前:デフォルトの名無しさん [2016/09/28(水) 15:21:14.38 ID:LOSUa8nH.net]
>>538
ファイル入出力とかで使うんじゃ…。
getline関数とかとセットで。



551 名前:デフォルトの名無しさん mailto:sage [2016/09/28(水) 15:24:56.37 ID:BVBInYIb.net]
コンピューターサイエンスを怠けてプログラミングばかりしてると本質が見えなくなる

552 名前:デフォルトの名無しさん mailto:sage [2016/09/28(水) 16:18:02.00 ID:vx4Qp0Ki.net]
forもwhileも両方使うね。無限ループは for (;;) 派だわ。

while (1)でもいいけど、でもfor(;;)やwhile(1)はないな。

553 名前:デフォルトの名無しさん mailto:sage [2016/09/28(水) 16:31:28.12 ID:4k0idPe6.net]
>>542
括弧の前(後)にスペース入れなきゃ気がすまない人いるけど
俺はそんなことにこだわる理由が全然理解できない
スペースなくても別に見づらくないし

554 名前:デフォルトの名無しさん mailto:sage [2016/09/28(水) 16:41:00.47 ID:6dmTX/P9.net]
>>543
if() {
}
if ()
{
}

x = 1 or x=1
( 何か ) or (何か)

他にも色々人によって違い出るで
forだけスペース無し(x=0;x<count;x++)で他は有りとかな

555 名前:デフォルトの名無しさん mailto:sage [2016/09/28(水) 16:44:43.02 ID:LrnfCbIH.net]
関数はつける、関数以外は離す、だなあ大抵は

556 名前:デフォルトの名無しさん mailto:sage [2016/09/28(水) 16:51:51.44 ID:vx4Qp0Ki.net]
そうそう、関数と構文を区別したいんだよね。
ifは関数じゃないぞっていう意気込み

もっと言うと、Swiftみたいにifに括弧ない方が好き

557 名前:デフォルトの名無しさん mailto:sage [2016/09/28(水) 17:07:27.59 ID:4k0idPe6.net]
やっぱり全然理解できないifが関数のわけないのに
茶道の作法みたいなもんですね

558 名前:デフォルトの名無しさん mailto:sage [2016/09/28(水) 17:21:01.78 ID:LrnfCbIH.net]
>>547
return や sizeof にカッコつけるほう?
sizeof はつけざるをえないときもあるが

559 名前:デフォルトの名無しさん mailto:sage [2016/09/28(水) 17:21:09.78 ID:84oTFcVa.net]
合理性を問うのは不毛な議論に陥りやすいので、習慣・宗教・嗜好だと割り切る
そのうえで、スタイルが指示されているなら従う

560 名前:デフォルトの名無しさん mailto:sage [2016/09/28(水) 17:42:01.82 ID:4k0idPe6.net]
>>548
明確な基準はないけど必要、あるいは括弧付けたほうが分かりやすいと判断した場合以外は付けないな



561 名前:デフォルトの名無しさん mailto:sage [2016/09/28(水) 17:44:07.81 ID:U6w9RFFk.net]
明確に関数じゃないとわかるのにつけないわけだよね
やってることは同じじゃん

562 名前:デフォルトの名無しさん mailto:sage [2016/09/28(水) 17:55:48.87 ID:BVBInYIb.net]
そんな些末なことに拘ってる暇があったらアルゴリズムを一つでも多く使いこなせるように稽古するべき

563 名前:デフォルトの名無しさん mailto:sage [2016/09/28(水) 17:55:55.64 ID:4k0idPe6.net]
>>551
意味不明
関数は付けなきゃ文法エラーだがreturnには付ける「必要」はないんだが

564 名前:デフォルトの名無しさん mailto:sage [2016/09/28(水) 17:57:34.46 ID:4k0idPe6.net]
>>552
その通り
無能に限ってくだらないことに拘るんだよなあ

565 名前:デフォルトの名無しさん mailto:sage [2016/09/28(水) 18:51:33.57 ID:6dmTX/P9.net]
むしろ>>554が他人の癖に拘ってるっていう
いくら部下のやり方の方が優れてても「俺のやり方じゃないと通さない」っていうダメ上司みたいw

566 名前:デフォルトの名無しさん mailto:sage [2016/09/28(水) 18:58:21.84 ID:4k0idPe6.net]
>>555
別にw
括弧/スペース要らないところで他人がどうしようが困らないし
変なこだわり持ってこっちに強制してきそうな無能に反論してるだけだよ

567 名前:デフォルトの名無しさん mailto:sage [2016/09/28(水) 19:15:06.35 ID:6dmTX/P9.net]
>>556
強制してきそうってのは完全に妄想
やっぱりくだらない事に拘って反論してるわけやん

568 名前:デフォルトの名無しさん mailto:sage [2016/09/28(水) 19:17:18.51 ID:l25Piyms.net]
整形ツールにおまかせ
 オプションで目が眩みそうになるけど・・・ 色々な流儀があるんだなー

569 名前:デフォルトの名無しさん mailto:sage [2016/09/28(水) 19:36:11.27 ID:4k0idPe6.net]
>>557
キミは知らんようだけど実際にそういうくだらないことを強制してくるやつはいるんだよ
>>542はそういうやつの典型的パターンだったからそれに反応しただけ

570 名前:デフォルトの名無しさん mailto:sage [2016/09/28(水) 20:07:54.67 ID:X231kNmm.net]
>>538
本当にわかってないんだな w

> while文禁止でfor文で書けと言われても、特別困ることはない

で、お前は while 使ってないんだよね?



571 名前:デフォルトの名無しさん mailto:sage [2016/09/28(水) 20:10:50.74 ID:6dmTX/P9.net]
>>559
>>542自身が区別したいだけやん
それも妄想

572 名前:デフォルトの名無しさん mailto:sage [2016/09/28(水) 20:18:07.08 ID:vx4Qp0Ki.net]
546の「茶道の作法みたいなもんですね」の言葉には賛成、まさにその通り。
あとコーディングルールを強制するつもりはない、
俺が心の中でこのコードないなと思うだけだ。

仕事が出来ないとは言わないが、細部に拘れないやつに良いものは作れないと思ってる。
まあ拘りすぎもダメだけど

そういえば、return に()つけると意味が変わるっけ?

573 名前:デフォルトの名無しさん mailto:sage [2016/09/28(水) 20:18:59.22 ID:4k0idPe6.net]
>>561
本当に「自身」だけならどうでもいいんだけどねーw
意味のない区別を強制してくるやつが居るってこと
こいつが現状どういう立場なのか知らんけど、俺はそういう芽を見つけたら駆除したくなる
そういうバカが何かの間違いで俺に指示する立場になるということは良くあることだから

まあ、もうこの話題はいいわ

574 名前:デフォルトの名無しさん mailto:sage [2016/09/28(水) 20:20:57.74 ID:l25Piyms.net]
>>562
return の 括弧の有無で意味は変わらないねー

575 名前:デフォルトの名無しさん mailto:sage [2016/09/28(水) 20:28:45.13 ID:29lmmJ5U.net]
>>564
タイプを間違ってた時に
コンパイルでエラーになるか
リンクでエラーになるか

576 名前:デフォルトの名無しさん mailto:sage [2016/09/28(水) 20:28:52.14 ID:vx4Qp0Ki.net]
>>563
何様と思われるだろうけど、忠告させてくれ。
何度もコードを指摘されるのは562にも問題があると思う。
周りに合わせるのは大事だし、プログラムが動けば良いってもんじゃない。

577 名前:デフォルトの名無しさん mailto:sage [2016/09/28(水) 20:29:20.01 ID:vx4Qp0Ki.net]
>>564
>>565
いや、確か意味があったはずなんだ。

578 名前:デフォルトの名無しさん mailto:sage [2016/09/28(水) 20:33:52.73 ID:l25Piyms.net]
>>567
sizeof とごっちゃになってない?

int a;
変数 は括弧不要 → sizeof a
型名 は括弧必要 → sizeof (int)

579 名前:デフォルトの名無しさん mailto:sage [2016/09/28(水) 20:37:58.36 ID:vx4Qp0Ki.net]
なんか右辺値にならないとか、そんなのだった気がする。

580 名前:デフォルトの名無しさん mailto:sage [2016/09/28(水) 20:42:59.61 ID:l25Piyms.net]
C++ の細かい話には疎いので ざっくりぐぐった
return <expression> ;
return <braced-init-list> ; // C++11 以降

<expression> 中の括弧の有無で 右辺値に なれる/なれない が変わる?



581 名前:デフォルトの名無しさん mailto:sage [2016/09/28(水) 21:07:56.71 ID:vx4Qp0Ki.net]
Effective Modern C++ に書いてあった。
元々は、decltype(x)とdecltype((x))の違いで、
C++14で、decltype(auto) func() { ... みたいに書けるようになったため、
return x; と return (x); で意味が変わり、
return (x); だとローカル変数の参照を返すので危ないと書いてあった。

そもそも decltype(auto) func() を作る機会が思いつかないので免れたかな。

582 名前:デフォルトの名無しさん mailto:sage [2016/09/28(水) 21:14:12.43 ID:l25Piyms.net]
>>571
ありがとう 認識を改めないといかんなー

583 名前:デフォルトの名無しさん mailto:sage [2016/09/28(水) 21:31:51.90 ID:SLrbrHK3.net]
>>571
>decltype(x)とdecltype((x))の違い
あったな。これが原因(の絡みで)でreturn x; と return (x); で意味が異なるってなるってなったのか
C++11すらあんまりわかってない俺はdecltypeにautoのdecltype(auto)って何だこりゃだな。
俺は停滞しまくりだが、C++はC++17近しだよな

584 名前:デフォルトの名無しさん mailto:sage [2016/09/28(水) 21:56:38.09 ID:hvZOs0TR.net]
右辺値になれるかどうかを質問していたのに
関係無い回答で納得してしまう>572が謎だ

585 名前:デフォルトの名無しさん mailto:sage [2016/09/28(水) 22:14:11.17 ID:l25Piyms.net]
右辺値云々は余所へやって return x と return (x) で意味が変わることがある というので十分おなか一杯

586 名前:デフォルトの名無しさん mailto:sage [2016/09/28(水) 22:42:49.97 ID:RacjfkjO.net]
int i = 0;
decltype(auto) j = i;
decltype(auto) k = (i);
間違いなく今世紀最大のクソ言語

587 名前:デフォルトの名無しさん mailto:sage [2016/09/28(水) 22:53:44.80 ID:vx4Qp0Ki.net]
int x = 0;
decltype(auto) y = (x + x);
このとき y は int

588 名前:デフォルトの名無しさん mailto:sage [2016/09/28(水) 23:05:10.47 ID:RacjfkjO.net]
そもそも何が "decl" typeやねん >decltype(x+x)

589 名前:デフォルトの名無しさん mailto:sage [2016/09/28(水) 23:32:02.96 ID:4k0idPe6.net]
>>566
老婆心は微笑ましいけど「何度もコードを指摘される」なんてことは発生したことはなくあなたの妄想でしかないから
その辺はしょうがなくうまく立ち回れるくらいのスキルは持ってるんだよねえw
自営でプログラマーやってるから
ただ指摘されないようにくだらないルールに合わせるのがウザイというだけ

590 名前:デフォルトの名無しさん [2016/09/29(木) 00:15:22.02 ID:AHkufWWD.net]
指定された通りに作成するのが仕事だろう。
それが嫌ならプログラマなど止めてしまえ。

コーディング規則なんて会社ごとに違うわ



591 名前:デフォルトの名無しさん [2016/09/29(木) 01:16:13.60 ID:EoqEFEeY.net]
そんな思考停止したプログラマばっかりの職場なんて嫌だな

592 名前:デフォルトの名無しさん mailto:sage [2016/09/29(木) 01:29:45.45 ID:NvmLPMZP.net]
ここでもうまく立ち回ればいいのに。

593 名前:デフォルトの名無しさん mailto:sage [2016/09/29(木) 01:32:35.94 ID:yhZ0k38r.net]
コーディング規約程度の事で思考停止だの何だの言うくらいなら
その無駄なリソースをコーディングに向けてさっさと仕上げろよ
ってことかなーと思うんですけどね

594 名前:デフォルトの名無しさん [2016/09/29(木) 01:49:53.91 ID:EoqEFEeY.net]
>>583
あなたはどんな糞なコーディング規約強制されても文句一つ言わずに従って最高のパフォーマンス出せるの?
ご立派ですねー

595 名前:デフォルトの名無しさん mailto:sage [2016/09/29(木) 02:11:35.90 ID:BbAsmN5n.net]
この争いはC++生みの親の頭より不毛だ

596 名前:デフォルトの名無しさん mailto:sage [2016/09/29(木) 02:32:48.74 ID:WkkMqF34.net]
業界あるある
コーディング規約強制されたことを無能の言い訳にする

597 名前:デフォルトの名無しさん mailto:sage [2016/09/29(木) 03:15:40.91 ID:GOP4Mzoo.net]
従う方が楽だわな。
ほんとに変な規約なら、そのプロジェクト自体が・・・

598 名前:デフォルトの名無しさん mailto:sage [2016/09/29(木) 07:35:02.93 ID:i0zTb688.net]
どっちでも構わないような書き方がコーディング規約で明文化されてて、
実際それをチェックする偉い人がいる現場だとイライラは募るかもね。
不明瞭な仕様とか、データ構造の妥当性とかはまるっきり放置するのに
ifと括弧の間のスペースだの、中括弧の位置だのは細かく見る人。

書く方からすれば「ツールで調べりゃすむ程度のことに拘る無能」だが、
書かせてる方は「簡単な規約さえ遵守できない無能」と思ってるかも。

599 名前:デフォルトの名無しさん mailto:sage [2016/09/29(木) 07:55:30.76 ID:RURjFibh.net]
>>582
ここでそんなことする必要ねーからだよ
不必要などうでもいいものを強制するやつってみんな独特なニオイがするな

600 名前:デフォルトの名無しさん mailto:sage [2016/09/29(木) 07:57:55.46 ID:RURjFibh.net]
最初から規約出してくれるならまだいいんだけど
一万行書いたあたりで突然出してくる客だって実在した



601 名前:デフォルトの名無しさん mailto:sage [2016/09/29(木) 08:36:54.31 ID:ot+4hkTI.net]
>>563
それ>>542に言う意味無いやん
勝手に芽と思ってるだけだからやっぱり妄想

>>579
> 「何度もコードを指摘される」なんてことは発生したことはなく
これが本当ならこんなとこで誰かも分からないレスに拘るはず無いやん?
> 合わせるのがウザイというだけ
しかもそのストレスを>>542にぶつけたっていう性格の悪さw

>>589
> ここでそんなことする必要ねーからだよ
ふーん?>>542にケチつける必要も無いけど?

602 名前:デフォルトの名無しさん mailto:sage [2016/09/29(木) 12:58:21.83 ID:mzV7fH7J.net]
gotoもreturnも極力減らした方がいい
ただし、減らすために別途変数や条件分岐が必要になるなら減らさない方がマシ

というのが俺の中での結論。
異論はいろいろんあると思う

603 名前:デフォルトの名無しさん mailto:sage [2016/09/29(木) 14:20:35.64 ID:RURjFibh.net]
>>591
めっちゃ絡んできてワロタ
なんかトラウマ刺激したのか

604 名前:デフォルトの名無しさん mailto:sage [2016/09/29(木) 14:26:40.32 ID:ot+4hkTI.net]
>>593
本題と関係無かったり矛盾した事言ってるからな

605 名前:デフォルトの名無しさん [2016/09/29(木) 14:40:48.50 ID:8bkROWkC.net]
gotoはゼロがいいが、リターン、continue、ブレイクは使っていいだろ?
gotoの代替として、こういうのはアリだろ? 
機械=PC=コンパイラにとってはgotoもこれも大差はないだろうが。
人間にとっては良い。想定外のイチに処理が飛ばないので。

do {
if(・・・) break;
if(・・・) break;
・・・
} while(0);

606 名前:デフォルトの名無しさん mailto:sage [2016/09/29(木) 15:51:12.03 ID:f38tS6Kw.net]
誰も得しない自転車置き場の議論をいつまで続けるの

607 名前:デフォルトの名無しさん mailto:sage [2016/09/29(木) 16:48:56.17 ID:bYV2i+3U.net]
いい加減言語の話しろよお前ら。
そんなことより今からC/C++をやる価値があるかどうか知りたい。

608 名前:デフォルトの名無しさん mailto:sage [2016/09/29(木) 18:23:40.73 ID:oWXJ/mgT.net]
知らないならやる価値あり

609 名前:デフォルトの名無しさん mailto:sage [2016/09/29(木) 19:18:47.52 ID:FmqTjmM/.net]
BASICで痛い経験をしてるとgoto文は最後の手段だな
break2回入れたとこがあった。goto文にした方が良かったな

610 名前:デフォルトの名無しさん mailto:sage [2016/09/29(木) 19:22:58.46 ID:XGa6uwRB.net]
>>592
内部状態が増えるのだけは簡便だよね



611 名前:デフォルトの名無しさん mailto:sage [2016/09/29(木) 21:13:57.17 ID:4t22bSxz.net]
私はwhile使う派だけど、場合によってどちらも使えたほうがいいな。

forは無限ループっていうイメージが私の中にない。
少しの例外を除きカウンタにしか使ってない。

スペースはあってもなくてもあまり気にしないけど i = 1 ;
って、最後のセミコロンの前にスペースを入れるやつがいるんだが、
これだけは気になる。

612 名前:デフォルトの名無しさん mailto:sage [2016/09/29(木) 21:17:39.56 ID:NvmLPMZP.net]
>>597
C/C++はやった方が良い。逆に聞くけど何の言語やったことあります?

613 名前:デフォルトの名無しさん mailto:sage [2016/09/29(木) 22:14:52.26 ID:SDSapxWl.net]
>>595
> gotoの代替として、こういうのはアリだろ? 

昔はそう言うコードを書いてたけど今は goto の方が素直でわかりやすい気がしてる

614 名前:デフォルトの名無しさん mailto:sage [2016/09/29(木) 22:39:08.69 ID:jq9v4dMk.net]
多重の制御文から抜けるのにはgotoは不可欠だと思うな。
逆にその目的だけなら”goto”って名前じゃなくていいよな。

615 名前:デフォルトの名無しさん mailto:sage [2016/09/29(木) 22:54:48.76 ID:f38tS6Kw.net]
>>597
C++はともかくCは必須だよ。新興言語にはライブラリをCで書いてラップしてるだけって例が結構ある

616 名前:デフォルトの名無しさん mailto:sage [2016/09/29(木) 23:15:01.84 ID:jq9v4dMk.net]
“sasaki”でもいいんじゃないかと思ったが、やっぱり”goto”が一番合理的だな。

617 名前:デフォルトの名無しさん [2016/09/30(金) 00:12:00.58 ID:cU7plTv4.net]
いやsatoだろ

618 名前:デフォルトの名無しさん mailto:sage [2016/09/30(金) 00:20:01.36 ID:W3Po0jck.net]
ikeyaでどうだろう

619 名前:デフォルトの名無しさん mailto:sage [2016/09/30(金) 00:20:59.92 ID:gp3T6GzE.net]
いっそのこと予約語を自由にカスタムできるようにする

620 名前:デフォルトの名無しさん mailto:sage [2016/09/30(金) 00:52:29.44 ID:UE8fG3iM.net]
みんな発狂するわ



621 名前:デフォルトの名無しさん mailto:sage [2016/09/30(金) 03:44:49.57 ID:0KJtriWI.net]
はじめまして、初めてこちらを利用させていただきます。
cは学先の頃触ったばかりで、以降はJavaやらPythonやら様ってきたのですが、やはり教養のためと、C++の勉強のためにもCの勉強を復活しようと思います。

最近のCのおすすめ書籍、ありましたら教えてください。またC++もよかったら。

ぜひお知恵をお貸しいただけますようお願いします。

622 名前:デフォルトの名無しさん mailto:sage [2016/09/30(金) 07:06:05.39 ID:wZVscf4Q.net]
>>611
https://www.amazon.co.jp/dp/4320026926/

623 名前:デフォルトの名無しさん mailto:sage [2016/09/30(金) 13:23:41.75 ID:PZ9iLra5.net]
でもいきなりC++からやったほうがいいってハゲ先生も言ってるからなぁ。
望洋先生の本でいいと思うけどなぁ。

624 名前:デフォルトの名無しさん mailto:sage [2016/09/30(金) 13:56:58.76 ID:pF7S0LoS.net]
これから始めるならもうgoとかrustでもいい気がするんだけど。
c言語とかc++はもう過去の資産のためとか仕事でしかたなくとかそういいうレベルに落ちついてると思う。

625 名前:デフォルトの名無しさん mailto:sage [2016/09/30(金) 14:10:22.08 ID:6eP7Gy33.net]
バカでも参入出来るのがLLなだけ

626 名前:デフォルトの名無しさん mailto:sage [2016/09/30(金) 18:19:24.02 ID:wTHCPI/2.net]
>>614
C/C++に需要がないと思ってる? 冗談だよね? <

627 名前:br> 過去の資産だけでなく新規案件でも需要あるでしょ []
[ここ壊れてます]

628 名前:デフォルトの名無しさん [2016/09/30(金) 19:58:59.15 ID:uFRLLqks.net]
>>611
苦しんで覚えるC言語って本が良いって聞いたことある。

629 名前:デフォルトの名無しさん mailto:sage [2016/09/30(金) 20:08:37.93 ID:wZVscf4Q.net]
何よりもまずC/C++で鍛えられるときいているのだが

630 名前:デフォルトの名無しさん mailto:sage [2016/09/30(金) 20:12:02.69 ID:7C0TQRjF.net]
Delphiがいいよ、文法が厳密だし。

C++はなんでもあり。



631 名前:デフォルトの名無しさん mailto:sage [2016/09/30(金) 20:16:33.13 ID:wZVscf4Q.net]
>>619
その delphi の厳密さって,単に LL(1) とか,そんなレベルでの厳密さでしょう?マニアにしかわからないよ‥

632 名前:デフォルトの名無しさん [2016/09/30(金) 20:22:10.76 ID:CijhFsAG.net]
LLVM/Clangが出てきてからはLLVMアセンブラに変換さえできれば
C/C++の文法を使用する必要はないな。
JavaやDOTNETも似た感じだが、LLVMは仮想マシン上ではネイティブへ最適化して変換できるからな。

633 名前:デフォルトの名無しさん mailto:sage [2016/09/30(金) 20:39:50.46 ID:FIOMq8zg.net]
再帰で型を決定できるのは多分C++だけ

634 名前:デフォルトの名無しさん mailto:sage [2016/09/30(金) 20:46:42.87 ID:wZVscf4Q.net]
>>622
実例は?

635 名前:デフォルトの名無しさん mailto:sage [2016/09/30(金) 21:07:42.48 ID:FIOMq8zg.net]
>>623
標準ライブラリのtupleはテンプレートで再帰して実装している

636 名前:デフォルトの名無しさん mailto:sage [2016/09/30(金) 21:21:32.87 ID:8XUol38t.net]
>>614
C/C++を使っているのはおっさんが非常に多いからな
大分前から若い奴はC/C++は過去の資産用言語ってとらえているよな。
若い奴は過去の資産のための言語を先がまだまだある俺のメイン言語にするのは止めたほうが良いって思っている奴が激多いだろな
>>619 
delphiの仕事は(ほとんど)ないが、非常に有能な若い奴の個人での主用言語はDelphiなんだろ(?)

ともかく若い時のメイン言語や個人での主用言語は以後の土方人生に大きく影響するだろうからな

637 名前:デフォルトの名無しさん mailto:sage [2016/09/30(金) 21:56:22.22 ID:FIOMq8zg.net]
C++は近年急速に進化しているのに知らない奴が多い
boost.filesystemも標準化するしboost.asio辺りが標準化すれば環境依存で苦手だったIO周りはかなり改善される

638 名前:デフォルトの名無しさん [2016/09/30(金) 22:08:58.15 ID:YcxBPQVN.net]
急速に進化してなお部分配列はつかない

639 名前:デフォルトの名無しさん mailto:sage [2016/09/30(金) 22:19:24.29 ID:FIOMq8zg.net]
boost.rangeでなんとか

640 名前:デフォルトの名無しさん mailto:sage [2016/09/30(金) 22:49:37.43 ID:kxYP78ac.net]
昔読んだ図鑑のアンモナイトの説明に、「進化しすぎて絶滅した」と書いてあった。



641 名前:デフォルトの名無しさん mailto:sage [2016/09/30(金) 22:51:06.39 ID:yLds8XB4.net]
なんやねんそれーw

642 名前:デフォルトの名無しさん mailto:sage [2016/09/30(金) 23:19:43.63 ID:OobEUz+z.net]
牙が伸びすぎて自分に刺さる面白生物と同じあれか

643 名前:デフォルトの名無しさん [2016/09/30(金) 23:29:34.87 ID:+AsgA5H7.net]
>>624
そう実装しなければならないわけじゃないけどな
愚直に再帰で実装されてるlibstdc++をclang++3.4で使うとmake_tupleの17個でテンプレートの再帰の上限達してエラーになる

644 名前:デフォルトの名無しさん mailto:sage [2016/09/30(金) 23:40:15.93 ID:jSdmuZ95.net]
進化しすぎて絶滅というのは今の環境に合わせて特殊化しすぎて変化に適応できなくなるからや

645 名前:デフォルトの名無しさん mailto:sage [2016/09/30(金) 23:46:27.49 ID:toiPz6CM.net]
C++って完全にCの上位互換なの?

646 名前:デフォルトの名無しさん [2016/09/30(金) 23:47:25.48 ID:+AsgA5H7.net]
>>634
違う

647 名前:デフォルトの名無しさん mailto:sage [2016/10/01(土) 01:47:00.44 ID:HQO6WfZW.net]
>>631
笑った。
C++は古い家を建て増し急速進化させて、急速キテレツ化しているって感じだからな
時期にグラフィック関連も標準ライブラリに入るんだろ?

648 名前:デフォルトの名無しさん [2016/10/01(土) 01:59:01.04 ID:hwPNFikt.net]
>>635
上位互換じゃない?
Cに劣る要素が見当たらないんだけど。

649 名前:デフォルトの名無しさん mailto:sage [2016/10/01(土) 02:09:47.19 ]
[ここ壊れてます]

650 名前: ID:+g0scf9p.net mailto: >>637
C言語にしかない仕様があるから完全には上位互換ではない
[]
[ここ壊れてます]



651 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2016/10/01(土) 02:14:52.12 ID:Ja0BXeAr.net]
C++ではnewはキーワードだから変数名に使えない。
C++ではvoid *型からの代入に型キャストが必要だとか。

652 名前:デフォルトの名無しさん mailto:sage [2016/10/01(土) 02:19:27.05 ID:HQO6WfZW.net]
>>638
CもC++同様に進化しているからな。
俺らCもスレッド必要ニダ。じゃPOSIXをパクって標準でサポートするようにするニダよとかしてたりな

653 名前:636 [2016/10/01(土) 02:44:14.10 ID:hwPNFikt.net]
へえー、そうなんだ。
あとは構造体を機能拡張してクラスも使えるようになれば便利なんだけどな。継承とかはなくていいから。

654 名前:デフォルトの名無しさん mailto:sage [2016/10/01(土) 02:59:13.83 ID:+g0scf9p.net]
言語は軽量な方が良い場合もあるのでいらないです

655 名前:デフォルトの名無しさん mailto:sage [2016/10/01(土) 03:01:25.37 ID:+g0scf9p.net]
あとC言語はあまりにも処理系が多すぎるて大きな変更をしても、どうせほとんどの場合で使えないから意味が無い

656 名前:640 mailto:sage [2016/10/01(土) 05:55:37.76 ID:hwPNFikt.net]
これは手厳しい。

657 名前:デフォルトの名無しさん [2016/10/01(土) 06:50:44.04 ID:cvsJ/xEf.net]
>>638
現行のC++はC99の仕様を参照しててそれの大体は使えるけど、
C99にあってC++には無い機能の一つに可変長配列(VLA)がある。g++やclang++ではコンパイラ拡張で使えるけど

658 名前:デフォルトの名無しさん mailto:sage [2016/10/01(土) 11:24:10.07 ID:VchZZ4F3.net]
OSやドライバがCやC++で書かれてる以上、なるべくオーバーヘッドを減らして動作させたいときなんかは大体C/C++で書く必要があるでしょ
そうじゃない世界は過去資産活用と感じられるのだろうけれど。

659 名前:デフォルトの名無しさん [2016/10/01(土) 13:41:24.02 ID:tJCoDE3r.net]
そのレベルの最適化が必要でC++が使える環境でfortran使いの独壇場でないフィールドってどこだ?

660 名前:デフォルトの名無しさん mailto:sage [2016/10/01(土) 14:37:19.52 ID:HXUnT6fU.net]
ゲームとか?



661 名前:デフォルトの名無しさん mailto:sage [2016/10/01(土) 14:49:35.51 ID:+g0scf9p.net]
数値計算ではFortran使ってるとか言うけど老人が惰性で使ってるだけでC++より優れている点はないだろう

662 名前:デフォルトの名無しさん [2016/10/01(土) 14:57:16.35 ID:7Mwksrxi.net]
Frotranでは、4倍長(16バイト)計算ができます。有効数字をすくなくとも30桁確保出来るので、
20桁の精度で計算しなければならない天文計算では重宝しますし、行列計算がサブルーチンを
作らなくても、出来るので、3次元の座標回転の計算する場合に重宝しています。

天文計算もC++の2倍長計算でやって居たのですが、有効数字が15桁ではちょっと足りなくて
やむなく、Fortranに切換えました。
ただ書き変えがなかなか面倒です。

663 名前:デフォルトの名無しさん mailto:sage [2016/10/01(土) 15:01:45.15 ID:dR7+Y2Tj.net]
物理計算の分野でも元はfortranで書かれていたツールがC++で書き直されてるとか多いようだな
よく知らないけどROOTとかGEANTとか

664 名前:デフォルトの名無しさん mailto:sage [2016/10/01(土) 15:09:43.92 ID:dR7+Y2Tj.net]
4倍精度はGCCで使ったことあるな

665 名前:デフォルトの名無しさん mailto:sage [2016/10/01(土) 15:31:37.25 ID:+g0scf9p.net]
>>650
C++にも多倍長演算のライブラリはたくさんあるし組み込み型としてlong doubleとかGCCなら__float128が定義されている
もちろんそれが使えるかどうかは環境次第だができないというわけではない
Fortranにしても疑似ではなく本物の4倍精度を扱おうと思ったら専用のハードとコンパイラが必要だから言語がどうとかいう問題ではないと思う
行列計算も組み込み型かのような使い方ができるライブラリもたくさんあるしFortranでなければならない点にはならない

666 名前:デフォルトの名無しさん mailto:sage [2016/10/01(土) 16:00:09.83 ID:l0L6Bk0U.net]
<boost/multiprecision/float128.hpp>

667 名前:デフォルトの名無しさん [2016/10/01(土) 16:11:51.37 ID:7Mwksrxi.net]
まあFrotranには長い歴史のよって積み重ねられた数値計算ライブライーが豊富にあるから、
簡単には捨てられない。
ただFortranでこまるのは、文字処理関係に弱いことです。
例えば数字文字列を直接数値に変換する関数
たとえばC/C++のatoi()などがないので、
いったん、その数値を文字として出力し、それを数値として
あらためて読み込むという処理が必要になり面倒です。

668 名前:デフォルトの名無しさん mailto:sage [2016/10/01(土) 17:54:37.90 ID:PXUewI6a.net]
>>647
ゲーム
数理ファイナンス

669 名前:デフォルトの名無しさん mailto:sage [2016/10/01(土) 18:08:01.01 ID:TJEFC+Kp.net]
>>655
>例えば数字文字列を直接数値に変換する関数
>たとえばC/C++のatoi()などがないので、
>いったん、その数値を文字として出力し、それを数値として
>あらためて読み込むという処理が必要になり面倒です。
すげー面倒くさいコトしてるね。内部ファイル使えよ。

670 名前:デフォルトの名無しさん mailto:sage [2016/10/01(土) 18:08:56.38 ID:0/7bEmyj.net]
DAW、3DCG



671 名前:デフォルトの名無しさん mailto:sage [2016/10/01(土) 18:14:54.78 ID:dR7+Y2Tj.net]
むしろ「fortran使いの独壇場のフィールド」こそ超ニッチなのであって
そうじゃない分野を一々挙げる必要もないレベル
特にネットワークを始めとした外部インターフェースが異常に弱いからねfortranは

672 名前:デフォルトの名無しさん mailto:sage [2016/10/01(土) 18:25:09.47 ID:mCe+YKjm.net]
大抵のfortranコンパイラは他の言語のオブジェクトとリンク出来るので心配しないで良いよ
出来ないのは見た事ないな

673 名前:デフォルトの名無しさん [2016/10/01(土) 22:24:38.05 ID:0ZCGRp5b.net]
>>649
最近のfortranはC++と違ってPythonみたいな部分配列取れる上に多次元配列の扱いもめっちゃ楽やぞ

674 名前:デフォルトの名無しさん mailto:sage [2016/10/01(土) 22:31:44.62 ID:Bzv21fY0.net]
Fortranなんてまだ生きてたのかよ
コボルみたいな長寿だな
もう独壇場じゃなくてエンジニアは土壇場だろ

675 名前:デフォルトの名無しさん [2016/10/01(土) 22:41:23.56 ID:0ZCGRp5b.net]
Fortranは進化している
問題はFortranのメインユーザーである老害がFortran77しか使えないことだ
オワコンやね

676 名前:デフォルトの名無しさん mailto:sage [2016/10/01(土) 22:55:16.37 ID:XObvXcZu.net]
ボイジャー 「お前らなにいってんの

677 名前:デフォルトの名無しさん mailto:sage [2016/10/01(土) 23:20:40.00 ID:HQO6WfZW.net]
>>661
そうなんんか。超骨董言語も進化しているんだな
俺Fortranは全く使ったことがないからさっぱりだけど
C/C++からすごい奴作成のFortranの数値ライブラリとかを呼び出して使っている奴はいそうだよな
GCCだとC/C++だけじゃなくFortarnも提供しているgcc build多いからな

678 名前:デフォルトの名無しさん [2016/10/02(日) 00:07:16.38 ID:L5k+5V7w.net]
MingWのg++をダウンロードして、
long double
をテストしてみたけれど、16桁でdoubleと同じ。
20桁以上の数値を計算したいので、どうしてもFortranを使うしかないかもしれない。
もし無料で、30桁以上のlong doubleが使えるC++のコンパイラが
あれば教えてください。

679 名前:デフォルトの名無しさん mailto:sage [2016/10/02(日) 00:18:54.63 ID:TJofyDyJ.net]
誰かが教えたらきっと「クッソ遅いんですけど欠陥品?」
と言い出すに違いない

680 名前:デフォルトの名無しさん mailto:sage [2016/10/02(日) 00:18:54.94 ID:LuMhVifb.net]
小数点以下なんか当てにならんのに30桁あってもしゃあないでw



681 名前:デフォルトの名無しさん [2016/10/02(日) 00:51:43.82 ID:UcBrllwC.net]
多倍長ライブラリ

682 名前:デフォルトの名無しさん [2016/10/02(日) 00:54:13.82 ID:UcBrllwC.net]
使う機会なくやってないが、これを機会に
定番のGMP、mpirとその小数点版の動作確認してみるか。

683 名前:デフォルトの名無しさん mailto:sage [2016/10/02(日) 00:56:16.21 ID:LuMhVifb.net]
GMPな。ヘッダ見ただけでやる気なくして自分で作ったわw

684 名前:デフォルトの名無しさん mailto:sage [2016/10/02(日) 02:54:49.06 ID:uMOBDxf3.net]
>>662
×独壇場
○独擅場

685 名前:デフォルトの名無しさん mailto:sage [2016/10/02(日) 04:39:29.16 ID:U2lDH2Tz.net]
doubleが64bitでも long double が128bitと限らないからね。
インテルCPU環境だと80bitの浮動小数点数が long double だったりする。
数値演算コプロセッサの8087が外付けだった時代からの名残りとか。

んで、複雑で精度の高い数値計算のためにFORTRANのライブラリを使うけど、
それ以外の部分は別の言語で楽に書きたい、とか考えると
中継部分をCで書くのが一番自然だったりする。
引数がどういう具合にスタックに積まれて関数に渡されるか、みたいな
生のバイトデータを扱う高級アセンブラ的な使い途ね。

686 名前:デフォルトの名無しさん mailto:sage [2016/10/02(日) 06:54:41.53 ID:QFl4EKwL.net]
gccだとlibquadmathがFORTRANを有効にしてないと入らないのが不親切

687 名前:デフォルトの名無しさん [2016/10/02(日) 09:43:38.75 ID:Ojkv5xCl.net]
質問です。
endlとflashが出てきましたが、endlは\nと違うんですか?

688 名前:デフォルトの名無しさん [2016/10/02(日) 10:09:26.77 ID:UcBrllwC.net]
ほとんどの場合、\nと同等あつかいでいいとおもうが。
\nは改行ではあるが、ただちに画面等に出力するかの保証なしと、
改行には\r\nとかもあるし、windowsではワイド文字の場合もある。それらを一括あつかいできる。

689 名前:デフォルトの名無しさん mailto:sage [2016/10/02(日) 14:09:37.97 ID:arJtaGW9.net]
>windowsではワイド文字の場合もある。それらを一括あつかいできる

へー、ソースは?

690 名前:デフォルトの名無しさん [2016/10/02(日) 14:39:57.22 ID:UcBrllwC.net]
>>677
ワイド文字出力のときも、endl。


wcout - MSDN - Microsoft

使用例
wcout ステートメントの CString インスタンスは、次の例に示されているように const wchar_t* にキャストする必要があります。

CString cs("meow");
wcout << (const wchar_t*) cs << endl;

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



691 名前:デフォルトの名無しさん mailto:sage [2016/10/02(日) 14:46:19.06 ID:arJtaGW9.net]
まさかそこまで基礎知識が無いとは思わなかった失礼

692 名前:デフォルトの名無しさん mailto:sage [2016/10/02(日) 14:48:47.78 ID:qO/j016b.net]
CStringとか

693 名前:デフォルトの名無しさん mailto:sage [2016/10/02(日) 14:55:32.36 ID:aAAtYBE2.net]
ワイド文字でも\nなのは変わらんだろ。ただワイド文字リテラル使う必要があるだけで。

694 名前:デフォルトの名無しさん [2016/10/02(日) 14:58:34.15 ID:UcBrllwC.net]
"\n" ≠ L"\n" だが。
wcout<<endl; はコンパイルできるはずだが、
wcout<<"\n";はNGのはずだぞ。

695 名前:デフォルトの名無しさん mailto:sage [2016/10/02(日) 15:04:41.90 ID:arJtaGW9.net]
>>682
おまえは>>676の時点で「"\n"」でなく「\n」と書いているのだが
いきなり何を関係無いことを言い出すんだ

696 名前:デフォルトの名無しさん mailto:sage [2016/10/02(日) 15:09:35.82 ID:vJd4d8QB.net]
おっとこれは流石に言いがかり

697 名前:デフォルトの名無しさん mailto:sage [2016/10/02(日) 15:12:36.41 ID:vJd4d8QB.net]
>>682
>wcout<<"\n";はNGのはずだぞ。
俺のところのVS2015ではエラーにならんな。Unicode設定でもマルチバイト設定でも。
規格的にどうなのか知らんが。

698 名前:デフォルトの名無しさん mailto:sage [2016/10/02(日) 15:30:07.93 ID:arJtaGW9.net]
規格の27.7.3.6.4を見る限りwcoutもcharを受け付けるように見えるのだが気のせいだろうか

template<class charT, class traits>
basic_ostream<charT, traits>& operator<<(basic_ostream<charT, traits>& out, const char* s);

699 名前:デフォルトの名無しさん mailto:sage [2016/10/02(日) 15:52:56.19 ID:GxRMdu/c.net]
L"\n"にする必要はないんか

700 名前:674 mailto:sage [2016/10/02(日) 21:12:02.90 ID:Ojkv5xCl.net]
答えてくれた方、ありがとうございました。
細かな説明はよく分かりませんでしたが…。



701 名前:デフォルトの名無しさん mailto:sage [2016/10/02(日) 23:47:14.06 ID:arJtaGW9.net]
>>676-687のカオスなやりとりから答えを読み取ったらエスパー

取りあえず『endlは改行した後、ただちに出力させる』と覚えと

702 名前: []
[ここ壊れてます]

703 名前:デフォルトの名無しさん mailto:sage [2016/10/03(月) 00:01:19.31 ID:H4QXTqVf.net]
endlはフラッシュかかるから素人がprintfと比較して無茶苦茶遅いとか言い出す。
まあリダイレクトせず端末だと変わらんのだが

704 名前:デフォルトの名無しさん mailto:sage [2016/10/03(月) 00:20:07.22 ID:mwBLg7E9.net]
なんでprintfの方がcoutより速いのですか?

705 名前:デフォルトの名無しさん mailto:sage [2016/10/03(月) 01:16:43.54 ID:+IxkRGi8.net]
フォーマットの処理が入るからじゃないかな

706 名前:デフォルトの名無しさん mailto:sage [2016/10/03(月) 01:17:57.28 ID:+IxkRGi8.net]
逆か
printfのほうが遅いのか

707 名前:デフォルトの名無しさん mailto:sage [2016/10/03(月) 01:21:03.00 ID:+IxkRGi8.net]
さらに逆だprintfのほうが早いのか
スレ汚しスマン

708 名前:687 [2016/10/03(月) 01:27:52.00 ID:z0FmA4JV.net]
>>689
では\nはただちに出力させないんですか?

今読んでるRさんの本クセあるんです…。

709 名前:デフォルトの名無しさん [2016/10/03(月) 01:36:43.55 ID:4zOL+ykU.net]
またカオスになってるなー

710 名前:デフォルトの名無しさん mailto:sage [2016/10/03(月) 01:51:12.26 ID:KavFsBqz.net]
ちょっとくらい実装読もうよ



711 名前:デフォルトの名無しさん mailto:sage [2016/10/03(月) 02:09:06.85 ID:HZ6jvwGI.net]
速いか遅いかは実装の問題だから個別の話になるけど
ストリームの下回りにprintf系を呼び出してる実装は遅くなる要素しかない

712 名前:デフォルトの名無しさん mailto:sage [2016/10/03(月) 02:20:08.83 ID:a2PPRqH/.net]
\n は単に、幾つかある制御文字の中の1つだろ。
それが文字列の中に、入っているというだけ

その文字列がいつ出力されるのか、とは別の話

713 名前:デフォルトの名無しさん mailto:sage [2016/10/03(月) 13:28:46.20 ID:/2MLxVBW.net]
printfでも開業すればフラッシュかからなかった?
デフォルトはどうだったけか

714 名前:デフォルトの名無しさん [2016/10/03(月) 13:30:37.31 ID:RKI08UEe.net]
しらないが、printf自体の標準がフラッシュつきでは。仕様かは不明だが遅延するコンパイラはしらん。

715 名前:デフォルトの名無しさん mailto:sage [2016/10/03(月) 13:33:00.39 ID:AhgtfWPz.net]
ここのタイミングで書き出しをある程度確定させたいなら
fflush() を明示的によぶしかなかろうて

716 名前:デフォルトの名無しさん [2016/10/03(月) 13:33:43.23 ID:RKI08UEe.net]
有名だったか・・・



UNIX系でprintfを使って文字を表示する場合、改行の"\n"を出力しないかぎり画面に文字が表示されないことは有名な話です。
しかし、場合によっては改行しないで画面に文字を表示したいときがあります。
そういうとき、fflushを使うと望み通りに文字列を画面に表示する事が可能です。
www.geocities.co.jp/SiliconValley/6071/technic/49.html

717 名前:デフォルトの名無しさん mailto:sage [2016/10/03(月) 14:38:26.43 ID:D+L5V3ve.net]
printfてかstdoutがデフォルトでは行バッファなのな
stderrはバッファなし
setbuf(stdout, NULL)すればstdoutもバッファしなくなる

718 名前:デフォルトの名無しさん mailto:sage [2016/10/03(月) 15:30:00.70 ID:+VMXdctO.net]
もともと速い装置に吐き出すときはバッファは仇となるってこと?

719 名前:デフォルトの名無しさん mailto:sage [2016/10/03(月) 15:37:18.77 ID:Bx8lzmG+.net]
その都度fopen fcloseしてたら遅いから
最初にfopen 終了時にfclose 書き込み時に毎回fflushしてるわ

720 名前:デフォルトの名無しさん mailto:sage [2016/10/03(月) 17:54:45.44 ID:lnVrcGil.net]
printfしたあとに毎回fflushしたことは有るが
iostream並みに遅くなった試しがない



721 名前:デフォルトの名無しさん mailto:sage [2016/10/03(月) 19:12:08.38 ID:64xioRW9.net]
printfのfがflushのfだと思ってた頃が僕にもありました

722 名前:デフォルトの名無しさん mailto:sage [2016/10/03(月) 21:50:18.41 ID:KavFsBqz.net]
streamは型を決めるために色々やってるからな
その代わりstreamは型安全
型を決め打ちしてるprintf,scanfとの速度の違いはそこ

723 名前:デフォルトの名無しさん mailto:sage [2016/10/03(月) 22:18:16.86 ID:eL0UbW2l.net]
まじかよ
型安全はオーロードでゼロオーバーヘッドだと思ってたぜ

724 名前:デフォルトの名無しさん mailto:sage [2016/10/03(月) 22:23:57.42 ID:jTjA6fWe.net]
だからunixでは標準出力が端末か否かでprintfの改行で自動フラッシュかどうか変わるんだって。

725 名前:デフォルトの名無しさん mailto:sage [2016/10/03(月) 22:38:55.02 ID:jTjA6fWe.net]
フォーマットを文字列定数で与えたprintfはコンパイラがコンパイル時にフォーマット文字列のパースまでしてしまうという特別な最適化かけるから速い。
組み込みの疑似関数みたいなもの。
真面目に関数呼び出しするならstreamの処理の方が速い筈なんだけどね。
さらにsync_with_stdioも重い原因

726 名前:デフォルトの名無しさん mailto:sage [2016/10/04(火) 01:04:24.06 ID:yYMkyBvy.net]
今日プログラム作ってたらセグメンテーションフォールトが出て解決できなかったから
力を貸して欲しいです。

unsigned char ch; // バイナリファイルを読み込んだ結果
int length; // バイナリファイルのサイズ

std::string methodA () {
string str = std::string(ch, length) // バイナリを格納したunsigned char型文字列をstring型に変換
printf(

727 名前:デフォルトの名無しさん mailto:sage [2016/10/04(火) 01:52:17.07 ID:tduX/YMQ.net]
C++にオーバーヘッドなど許されん!

728 名前:デフォルトの名無しさん mailto:sage [2016/10/04(火) 08:30:12.26 ID:cpDRv874.net]
>>713
unsigned char ch; // これは1バイトしか格納できません

729 名前:デフォルトの名無しさん mailto:sage [2016/10/04(火) 09:15:52.17 ID:b3H+v7Is.net]
>>713
str = std::string(length, ch);

730 名前:デフォルトの名無しさん mailto:sage [2016/10/04(火) 16:26:43.41 ID:Izmk1Ydi.net]
アンサインド キャー



731 名前:デフォルトの名無しさん [2016/10/04(火) 21:11:47.03 ID:WEyUe7wf.net]
ところでコンストラクタは関数の一種ですか?

732 名前:デフォルトの名無しさん mailto:sage [2016/10/04(火) 22:02:14.17 ID:PvvXDjpC.net]
イエス、マダーム

733 名前:717 [2016/10/04(火) 23:57:04.72 ID:WEyUe7wf.net]
>>719
ありがとうございます。

ただ、「わかりやすいJava」という本で(Javaの本ではありますが)、コンストラクタは、名前がクラス名と同じであり、戻り値の記述も無いため、メソッドでは「ない」と明言されていたので当惑していました。
どうとらえればいいですかね?

734 名前:デフォルトの名無しさん mailto:sage [2016/10/05(水) 00:06:46.73 ID:Pt+EeEmo.net]
C++とJavaは違うからなんとも
その本が信用できないなら規格書かなんかでJavaにおけるメソッドの定義を調べてくれ

735 名前:デフォルトの名無しさん mailto:sage [2016/10/05(水) 00:13:00.25 ID:SIzgJBAg.net]
C++:コンストラクターは関数。メソッド何それ
C#:コンストラクターは関数だがメソッドではない
JavaScript:コンストラクターは関数
Java:関数何それ。コンストラクターはメンバーですらない。メソッドでもない

736 名前:デフォルトの名無しさん mailto:sage [2016/10/05(水) 00:31:15.00 ID:SIzgJBAg.net]
Javaはこうだな
・クラスの中に含まれるもの
 ・コンストラクター
 ・メンバー
   ・フィールド
   ・メソッド
   ・インナークラス
C++はこうか
・クラスの中に含まれるもの=メンバー
 ・static_assertとか
 ・コンストラクター <関数>
 ・非静的メンバー関数 <関数>
 ・静的メンバー関数 <関数>

関係無いがC++のドラフトのメンバー定義に「deduction guide」が追加されてるな 何だこりゃ

737 名前:719 [2016/10/05(水) 01:31:05.26 ID:D107n7zL.net]
>>721-723
ありがとうございます。

みなさんのレスを参考に、C++では関数ですがJavaではメソッドではない、という捉え方をさせて貰うことにします。

738 名前:デフォルトの名無しさん mailto:sage [2016/10/05(水) 01:38:47.50 ID:TxD7Qy4b.net]
最後『ー』で伸ばされるとうっすらストレスを感じる

739 名前:デフォルトの名無しさん mailto:sage [2016/10/05(水) 01:45:28.08 ID:RYEURUHh.net]
パンにバタ塗ってコーヒ飲んでろ

740 名前:723(追記) mailto:sage [2016/10/05(水) 02:02:03.30 ID:D107n7zL.net]
調べたらどうやら関数とメソッドが似てはいるものの違うようです。
メソッドはクラスの中でのみ定義されるもので云々とあり、この辺に理由があるみたいです(間違っていたらすいません)。



741 名前:デフォルトの名無しさん mailto:sage [2016/10/05(水) 02:04:14.94 ID:PU8Th8F3.net]
麺麭に牛酪塗って珈琲飲んでろ

742 名前:デフォルトの名無しさん mailto:sage [2016/10/05(水) 03:21:56.55 ID:VfzqlzrY.net]
Delphiの規格で悪いけど・・・

メソッドってのはクラスのメンバ関数。
暗黙のうちにthisポインタを引数として持つものを言う。

関数は普通の関数。引数に余分なものは追加されない。

743 名前:デフォルトの名無しさん mailto:sage [2016/10/06 ]
[ここ壊れてます]

744 名前:(木) 00:35:54.12 ID:U3zAstIl.net mailto: VisualStudio2015の環境でC++でコーディングした場合のことなのですが、
複数のプロジェクトで、原因不明なLNK2019: 未解決の外部シンボルのエラーが発生します
これを無くすべくコメントアウトして、エラーの個所を特定しようといじっていると突如このエラーが消えます。
かと思えば忘れたころにまた同じエラーが発生し、繰り返すことになるのですが、一体何が原因なのでしょうか?
ソースコードが膨大なのであげることは憚られるのですが、よくある原因の、関数名が一致していない為、ではないようです。
また、他のPC上では問題なく動作するのです。
どなたか同じ現象に悩まされたことがある方はいますか?
[]
[ここ壊れてます]

745 名前:デフォルトの名無しさん mailto:sage [2016/10/06(木) 00:53:46.69 ID:lB9calLC.net]
>>730
ビルド順かなぁ?

746 名前:デフォルトの名無しさん mailto:sage [2016/10/06(木) 06:10:09.00 ID:5ou6x1p8.net]
昔のC、というか今でもmakeでビルドするような環境だと、
リンク時にライブラリを書き並べる順番によっては
外部参照名の解決に失敗するって問題が起きたが、
統合開発環境にも適用できる話か分からん。

747 名前:デフォルトの名無しさん mailto:sage [2016/10/06(木) 06:32:05.17 ID:WlcexWUS.net]
依存関係設定してないとか
プロジェクトまたがるヘッダファイルをプロジェクトに含めてないとか

748 名前:デフォルトの名無しさん mailto:sage [2016/10/06(木) 07:01:57.67 ID:5esayM0K.net]
そもそもリンクというものを理解してないだろ

749 名前:デフォルトの名無しさん mailto:sage [2016/10/08(土) 13:15:21.33 ID:uEHRjK0l.net]
ポインタのポインタについて教えてください。
int a[640][480];
みたいなことをやりたいのですが、サイズがデカすぎるとかでエラーになるので
int **a;
ってやってみました。

a[0][0]=0;
はエラーなく通るのに
a[1][0]にするとエラーになります。
何が原因で、どうやったらエラーを出さなくできますか?

750 名前:デフォルトの名無しさん mailto:sage [2016/10/08(土) 13:22:46.86 ID:5VQX36u5.net]
>>735
members3.jcom.home.ne.jp/progstudio/cpp_tips2.html



751 名前:デフォルトの名無しさん mailto:sage [2016/10/08(土) 13:25:37.16 ID:d3anv779.net]
>>735
ポインタと配列は異なる
特にポインタのポインタと二次元配列は全然異なる
その辺の理解が足りないのが原因

752 名前:デフォルトの名無しさん mailto:sage [2016/10/08(土) 13:30:01.26 ID:++vYQgKn.net]
>>735
ポインタの指す先の領域を用意していないからだろう
ideone.com/sGFvMy

753 名前:デフォルトの名無しさん mailto:sage [2016/10/08(土) 13:31:28.24 ID:S1TCpLDs.net]
//メモリの確保をしてないか、メモリの確保の仕方が不十分なのが原因かと考えます

//↓はポインタのポインタなので
int **a;


//以下の様に確保した後に
const int width = 640, height = 480;
a = new int*[width];

//さらに各要素ごとにメモリを確保する必要があります
for (int i = 0;i<width;++i) {
a[i] = new int[480];
}

//開放するときも以下の様にする必要があります
for (int i = 0; i<width; ++i) {
delete[] a[i];
}

delete[] a;

754 名前:デフォルトの名無しさん mailto:sage [2016/10/08(土) 13:33:18.30 ID:S1TCpLDs.net]
height=480ってしたのに下で480書いてしまった悲しい

755 名前:デフォルトの名無しさん [2016/10/08(土) 13:54:03.31 ID:G10JdEJj.net]
>>736-740
皆さん親切にありがとうございます。
無事プログラムが動きました、感動しました

756 名前:デフォルトの名無しさん mailto:sage [2016/10/08(土) 14:04:34.19 ID:YyjS4FMP.net]
>>739
スマポを使いましょう
ideone.com/u2konZ

757 名前:デフォルトの名無しさん mailto:sage [2016/10/08(土) 14:11:31.33 ID:5VQX36u5.net]
わざわざ2次元配列をポインタで表現するくらいなら
std::vector<std::vector<int>> a(640, std::vector<int>(480));でいい

758 名前:デフォルトの名無しさん mailto:sage [2016/10/08(土) 14:12:07.25 ID:S1TCpLDs.net]
俺もcで書いてりゃよかったな

759 名前:デフォルトの名無しさん mailto:sage [2016/10/08(土) 15:11:38.03 ID:c34JK7xB.net]
>>739
確保解放でもforってめんどくね?

int **a, width = 5, height = 10;

a = new int*[width];
a[0] = new int[width*height];

for(int i=1;i<width;i++) {
 a[i] = (&a[0][width*i]);
}
// a[i][j]でアクセスして色々処理
delete [] a[0];
delete [] a;

760 名前:デフォルトの名無しさん mailto:sage [2016/10/08(土) 16:07:58.05 ID:zvqyvirK.net]
>>739
Javaからこっち来た人かな?



761 名前:デフォルトの名無しさん mailto:sage [2016/10/08(土) 16:13:12.13 ID:S1TCpLDs.net]
>>742,745
ポインタだけ作ってnewあるいはmalloc等メモリ確保をしない辺りの習熟度の人間にそのレベルのものを提示していいとは考えなかった

何を目的に>>735でこのようなことをしようと考えたのかが提示されない状態で質問の回答になる最低限のものを用意した

>>745
非常に面倒くさい

762 名前:デフォルトの名無しさん mailto:sage [2016/10/08(土) 17:08:39.87 ID:h4PrAZ2Y.net]
質問者のレベルや質問内容に合わせた回答をするのは当然のこと。
他人の回答を見て「お前のやり方はまだまだだ」などとドヤ顔する方が恥ずかしい。
それでもコンテナー・スマポまではまだ良いとして、自分でdeleteするコードを自慢し始めるのは可哀想で仕方ない

763 名前:デフォルトの名無しさん mailto:sage [2016/10/08(土) 17:38:45.55 ID:ij4u4Pj5.net]
レベルってなら初心者にnew deleteさせるとか一番ダメなパターンじゃね。

764 名前:デフォルトの名無しさん mailto:sage [2016/10/08(土) 18:00:13.42 ID:c34JK7xB.net]
>>747
だよなw

>>748
元の回答に合わせてそれならこっちが楽だなとレスしただけだぞ?
被害妄想か?

765 名前:デフォルトの名無しさん mailto:sage [2016/10/08(土) 18:26:43.73 ID:S1TCpLDs.net]
>>750
あえてやった理由はこんな感じ

640と480ってなんか画像っぽいなー
でもその並びだとたぶん縦横逆だと思うんだよなー
でも画像とか一言も言ってないしなー
っていうかまだポインタのポインタとか手を付けるのやめた方がいいんじゃないかなー
でも対案だしたりやめろって言って質問の回答になってないって言われるのも嫌だしなー

めんどくささのアピールもかねて馬鹿正直に確保と開放ならべよう

766 名前:デフォルトの名無しさん mailto:sage [2016/10/08(土) 18:29:21.29 ID:ZGEVZk/0.net]
コードは書かずに済むに越したことはない
コードは書けば書くほどバグの発生確率を上げるのだから
好き好んでごちゃごちゃ書き連ねる奴の気が知れない

767 名前:デフォルトの名無しさん mailto:sage [2016/10/08(土) 18:46:06.88 ID:eEcijZqv.net]
>>739は初心者風というか、まだわかるけど
>>745はもうなんていうか酷い
突っかかっといてこれってどうよ

forで開放するのが面倒だからとそんなどうでもよいこと考えて
トリッキーなこと考える暇があるんなら
もっと簡単にこう↓書けば済むだけの話なのに

int (*a)[640] = new int [480][640]; //確保
//↓使う
for( int y = 0; y < 480; ++y )
for( int x = 0; x < 640; ++x )
{
  a[y][x] = 0;
}
delete[] a; //解放

これなら初心者でも全然わかるし、確保にも開放にもfor文いらない
圧倒的シンプル
もともとC++はこうして使うことを想定して文法が作られている
まったくの既定路線、標準的解法
シンプルにしたい場合、まずこれが思いつかなきゃダメ
ここがスタート地点、場合によってはゴール

なんで糞なテクニックを使いたがるのか、そして教えたがるのか
中途半端に改良した結果糞で何がしたいのかわからない

768 名前:デフォルトの名無しさん mailto:sage [2016/10/08(土) 18:50:39.29 ID:eEcijZqv.net]
ちなみに、int (*a)[640] っていう宣言が初心者には難しいっていうんなら
autoを使え

auto a = new int [480][640];
delete[] a;

何にも難しいことはない

769 名前:デフォルトの名無しさん mailto:sage [2016/10/08(土) 20:12:00.66 ID:c34JK7xB.net]
>>75

770 名前:3
あれを突っかかっといてってやっぱり被害妄想やん?
[]
[ここ壊れてます]



771 名前:デフォルトの名無しさん mailto:sage [2016/10/08(土) 20:17:45.09 ID:Cqh//nwv.net]
正直な感想を言ってみたい
ID:c34JK7xB はよく恥ずかしげもなく出てこれたなw
しかしそれ以上に恥ずかしいのは>>751のレス
一文字一文字噛みしめるように恥ずかしい
テレ隠しでオタオタしちゃってるのが染み出てて恥ずかしい

772 名前:デフォルトの名無しさん mailto:sage [2016/10/08(土) 20:21:59.42 ID:c34JK7xB.net]
対案無しなら誰でもどうとでも言えるぞ

773 名前:デフォルトの名無しさん [2016/10/08(土) 20:26:04.37 ID:MCoYyYao.net]
inline関数で配列宣言をJava風に記述出来るように、することは出来ますか?
例:int[3] a;など
なんか変か。

774 名前:デフォルトの名無しさん mailto:sage [2016/10/08(土) 20:28:06.20 ID:5VQX36u5.net]
>>743でいいだろなんで意味も無く生ポインタ使うんだ
初期化も解放も不要
代入演算子でコピーもできるしムーブセマンティクスも効くから戻り値に取ってもコピーコストがかからない

775 名前:デフォルトの名無しさん mailto:sage [2016/10/08(土) 20:41:49.95 ID:XnkulnEl.net]
typedef int array_t[640][480]; //型の宣言
array_t a; //変数宣言
a[1][2] = 3; //使用

776 名前:757 [2016/10/08(土) 21:23:59.81 ID:MCoYyYao.net]
>>760
ありがたいんですが、タイプデフの記述の所の意味がよくわかりませんでした…。

777 名前:デフォルトの名無しさん mailto:sage [2016/10/08(土) 21:38:47.98 ID:XnkulnEl.net]
>>761
ああごめん、734向けに書いたんだけど、同じだよ。
int型の配列自体を型として、必要なスコープで宣言するわけ。
あとは普通の変数と同様に使える。
>>758なら、
typedef int MyArray_t[3]; //型宣言(スコープ)
MyArray_t a; //変数宣言のみ
MyArray_t a = {0,1,2}; //変数宣言と初期化
MyArray_t b[10]; //配列型の配列

void hoge(MyArray_t *a) //ポインタ渡し
{
 (*a)[0] = 3; //デリファレンスして使用
}

などなど

778 名前:デフォルトの名無しさん mailto:sage [2016/10/08(土) 21:40:59.84 ID:XnkulnEl.net]
6行目(スコープ)は無視してw
大抵、ヘッダでtypedefしてグローバルスコープで使う事が多いかな
ファイルスコープでもローカルでもいいよ

779 名前:デフォルトの名無しさん mailto:sage [2016/10/08(土) 21:47:38.72 ID:h4PrAZ2Y.net]
何だかstd::arrayを再発名してるようなコードだな
とは言え初心者にも使えて例外安全なコードが今ひとつ思い浮かばなかった
ideone.com/zXaG2N

780 名前:デフォルトの名無しさん mailto:sage [2016/10/09(日) 00:45:44.65 ID:JlGswBM7.net]
>>743
それが楽だよな。
Cならともかく、今のC++で2次元配列でnew/delete処理を必死にするってなんかなって感じだよな



781 名前:760 [2016/10/09(日) 00:49:46.77 ID:CesbDVy8.net]
>>762-763
あ、そうでしたか。
いずれにしてもありがとうございました。

782 名前:デフォルトの名無しさん mailto:sage [2016/10/09(日) 01:24:05.62 ID:g5Vm/sHI.net]
縦横のデータでも普通は一次元でやるわなぁ

783 名前:デフォルトの名無しさん mailto:sage [2016/10/09(日) 02:48:02.25 ID:6J6aWDOQ.net]
ポインタをわかりやすく説明してくれまいか

784 名前:デフォルトの名無しさん mailto:sage [2016/10/09(日) 02:55:46.68 ID:D5DA+Fn6.net]
「メモリ空間上の位置を示す値(ポインタ値/アドレス値)とそれ用の変数(ポインタ変数)」

この概念はわかるだろうから、あとは使えば使い方がわかる
使わないと使い方はわからない

785 名前:デフォルトの名無しさん [2016/10/09(日) 03:04:49.63 ID:CesbDVy8.net]
>>768
アドレスを格納する変数です。
int a;
と定義するとaには整数を代入できるわけですが、この整数の代わりに、変数などに割り当てられているアドレス番地を代入できる変数です。
*を使って、
int *p;

int* pt; // C++のみ
などと記述できます。

786 名前:デフォルトの名無しさん mailto:sage [2016/10/09(日) 03:09:56.06 ID:kQ8uTekw.net]
>>770
その「C++のみ」ってのは意味あんの?

787 名前:デフォルトの名無しさん [2016/10/09(日) 03:18:09.67 ID:PDnvlXCF.net]
cでのファイルの読み書きとかそういう動的な処理以外
ガリガリとポインタ使う機会ってあるの?

788 名前:デフォルトの名無しさん [2016/10/09(日) 03:18:41.04 ID:PDnvlXCF.net]
追記
オブジェクトの参照とかもつかうよね

789 名前:デフォルトの名無しさん mailto:sage [2016/10/09(日) 03:22:40.73 ID:b4dakfPd.net]
追記厨うざい

790 名前:デフォルトの名無しさん mailto:sage [2016/10/09(日) 03:25:52.97 ID:KWlu0vko.net]
>>772
動的ポリモーフィズム



791 名前:デフォルトの名無しさん mailto:sage [2016/10/09(日) 03:46:11.99 ID:D5DA+Fn6.net]
文字列・画像・音声の編集では目的の値にポインタでアクセスするし
構造体およびその不完全型/不透過型はポインタでやりとりするし
qsortのコールバックの引数はvoid**だし

792 名前:デフォルトの名無しさん mailto:sage [2016/10/09(日) 07:19:46.25 ID:tK5O0Gp1.net]
>qsortのコールバックの引数はvoid**だし
いつから775はそう思いこんでいた

793 名前:デフォルトの名無しさん mailto:sage [2016/10/09(日) 07:28:20.26 ID:D5DA+Fn6.net]
あれ違ったっけと思って見てみたら引数はconst void *だなw
void **にキャストするのと勘違いしてたわ

794 名前:デフォルトの名無しさん mailto:sage [2016/10/09(日) 08:49:16.06 ID:X7nfytgR.net]
>>747>>751

795 名前:デフォルトの名無しさん mailto:sage [2016/10/09(日) 09:23:27.23 ID:X7nfytgR.net]
すみません、間違えて変なアンカーを打ってしまいました
>>747>>751
画像処理のラベリングというのをやりたかったんですが
C言語もC++も初心者なので四苦八苦しながらやっているところです

796 名前:デフォルトの名無しさん mailto:sage [2016/10/09(日) 09:49:01.74 ID:X7nfytgR.net]
もうひとつ質問したいのですが
a[0]=240
a[1]=10004
a[2]=1023
a[3]=5409
みたいな配列があったとして
配列aをsortすると、中身だけがsortされて
a[0]=10004
a[1]=5409
a[2]=1023
a[3]=240
ってなると思うのですが、

a[0]=240
a[1]=10004
a[2]=1023
a[3]=5409
↓この配列に対して
b[0]=1
b[1]=3
b[2]=2
b[3]=0
というように、配列の中身の大小に対応した配列の番号を取り出したいような時
どういった処理をするのがベストですか?
2つの対応した数字を、片方だけの値でsortして並び替えられれば1次元配列じゃなくても
vectorでも2次元配列でも手段は問わないのですが。。

797 名前:デフォルトの名無しさん mailto:sage [2016/10/09(日) 10:32:44.96 ID:1crSfiNI.net]
vector<pair<int, int>> a;

798 名前:デフォルトの名無しさん [2016/10/09(日) 10:56:03.81 ID:X7nfytgR.net]
>>782
ありがとうございます!

799 名前:デフォルトの名無しさん mailto:sage [2016/10/09(日) 11:17:33.47 ID:+yqYMy9C.net]
>>781
C/C++ ちゃんぽんだが Visual Studio 2015 で確認

#include <stdio.h>
#include <stdlib.h>

int a[] = { 240, 10004, 1023, 5409 };

static int compare(const void* x, const void* y) {
int xa = a[*(size_t*)x];
int ya = a[*(size_t*)y];
if (xa < ya) {
return 1;
} else if (ya < xa) {
return -1;
} else {
return 0;
}
}

int main()
{
const auto N = sizeof a / sizeof a[0];
size_t b[N];
for(size_t i = 0; i < N; i++){
b[i] = i;
}
qsort(b, N, sizeof b[0], compare);
for (size_t i = 0; i < N; i++) {
printf(

800 名前:デフォルトの名無しさん mailto:sage [2016/10/09(日) 11:19:17.64 ID:+yqYMy9C.net]
あっ、" 以降切れるのか...
まあ、結果を表示してるだけだからわかるかな



801 名前:デフォルトの名無しさん mailto:sage [2016/10/09(日) 11:25:57.79 ID:PLoscqr1.net]
切れるってマジか
test " test " test

802 名前:デフォルトの名無しさん mailto:sage [2016/10/09(日) 11:26:16.66 ID:PLoscqr1.net]
きれへんがなー

803 名前:デフォルトの名無しさん mailto:sage [2016/10/09(日) 11:39:46.96 ID:M9nJsIdd.net]
前に同じような処理が必要になった時は、添字の配列を用意してそれを元の値で比較・ソートした

class cmp {
public:
int *p;
cmp(int *a) : p(a) {}
bool operator()(int x, int y) { return p[x] > p[y]; }
};

int a[4] = {240, 10004, 1024, 5409};
int b[4] = {0, 1, 2, 3};
sort(b, b + 4, cmp(a));

ラムダ使えるなら関数オブジェクト用意しなくてもいい
sort(b, b + 4, [&](int x, int y){ return a[x] > a[y]; });

804 名前:デフォルトの名無しさん mailto:sage [2016/10/09(日) 12:26:16.01 ID:X7nfytgR.net]
>>784-788
皆さん色々ありがとうございます
少しずつ調べながら試していこうと思います

805 名前:デフォルトの名無しさん mailto:sage [2016/10/09(日) 14:08:02.04 ID:+yqYMy9C.net]
>>786-787
なんか条件よくわからんが切れる時がある

806 名前:デフォルトの名無しさん mailto:sage [2016/10/09(日) 16:57:10.40 ID:kyAYUOur.net]
#include <iostream>
#include <memory>

int main()
{
constexpr int COL = 640, ROW = 480;
std::unique_ptr<int[][ROW]> a(new int[COL][ROW]);

a[1][0] = 9999;

std::cout << a[1][0] << std::endl;
}

こんなのとか

807 名前:デフォルトの名無しさん mailto:sage [2016/10/09(日) 23:50:28.31 ID:Ldbc2NOo.net]
モンスタークレーマー「newなんて!ウチの子が真似したらどうするんですか!!」

808 名前:デフォルトの名無しさん [2016/10/10(月) 01:09:26.35 ID:Bk4kbXB6.net]
禿にクレーム?

809 名前:デフォルトの名無しさん mailto:sage [2016/10/10(月) 04:43:03.74 ID:6bVjh2uR.net]
>>784-787
2chのバグだろ

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

810 名前:デフォルトの名無しさん mailto:sage [2016/10/10(月) 05:12:42.07 ID:9uF4C/7F.net]
#include <iostream>
#include <algorithm>
#include <vector>
#include <utility>

int main()
{
int a[] = { 244, 10004, 1023, 5409 };
int b[] = { 0, 1, 2, 3 };
constexpr int N = sizeof(a) / sizeof(a[0]);
typedef std::pair<int, int> PII;
std::vector<PII> vpii;

for (int i = 0; i < N; i++)
vpii.emplace_back(std::make_pair(a[i], b[i]));

std::sort(b, b + N, [&](int x, int y){ return a[x] > a[y]; });
for (auto i : b)
std::cout << i << std::endl;

std::sort(std::begin(vpii), std::end(vpii), [](PII& x, PII& y){ return x.first > y.first; });
for (auto i : vpii)
std::cout << i.second << std::endl;
}



811 名前:デフォルトの名無しさん mailto:sage [2016/10/11(火) 16:20:43.32 ID:IeH7nGOE.net]
初歩的な質問かもしれませんが調べても見つけられなかったので教えてください

以前までスタック領域はL3キャッシュ等に確保されているから高速で容量が小さく(1MB程度)低級でOSに支配されていると考えていたのですが
同じく初心者の友人がスタックオーバーフローした!スタックサイズ変える!256MB!などと言って解決しており気が狂いそうになりました
ヒープ領域を使うべき、とかオーバーフローについての解決策は理解しているつもりですので、
スタック領域がハードウェア的に一体どこに確保されているのかご教示いただけませんか?

RAMが番地によってアクセス速度が変わることなんてありませんよね?

812 名前:デフォルトの名無しさん mailto:sage [2016/10/11(火) 16:47:29.16 ID:Tk+cPNjp.net]
普通にメインメモリの領域に取られる
大雑把にいうとコード、データ、スタックを置く三つの領域に分けて管理されてる

813 名前:デフォルトの名無しさん mailto:sage [2016/10/11(火) 17:04:53.76 ID:IeH7nGOE.net]
となるとなんでスタック領域のアクセスは他のデータ領域などに比べて速いんでしょう?

814 名前:デフォルトの名無しさん mailto:sage [2016/10/11(火) 17:10:12.67 ID:Xd5sJMpc.net]
確保は速いけど、アクセスは特別には速くないよキャッシュに乗る可能性が高いということはあるけど
それは色んな条件に左右される

815 名前:デフォルトの名無しさん mailto:sage [2016/10/11(火) 17:14:29.27 ID:5pUb4ulq.net]
プログラムカウンタ当たっているRAM上のアドレス: コード
スタックレジスタに当たっているRAM上のアドレス: スタック
他: データ

816 名前:デフォルトの名無しさん mailto:sage [2016/10/11(火) 17:31:30.02 ID:IeH7nGOE.net]
なるほど…
容量が小さいことでデータの局所性が高まりキャッシュの使用効率が上がった結果速まることがあるだけで
ハード的には同じRAMで速度は変わらないんですね
皆様のお陰で少し冷静になれました、ありがとうございました!

817 名前:デフォルトの名無しさん mailto:sage [2016/10/11(火) 18:39:21.42 ID:n/wutvzL.net]
C言語マスターしたら暗記アプリって簡単に作れますか?

818 名前:デフォルトの名無しさん mailto:sage [2016/10/11(火) 18:41:25.35 ID:Tk+cPNjp.net]
無理だね

819 名前:デフォルトの名無しさん mailto:sage [2016/10/11(火) 18:45:21.60 ID:sSjTKHHD.net]
暗記アプリってなんですか?

820 名前:デフォルトの名無しさん mailto:sage [2016/10/11(火) 20:18:01.85 ID:nwrHMQee.net]




821 名前:アプリ」って単語の時点で想像するようなものは無理な気がする []
[ここ壊れてます]

822 名前:デフォルトの名無しさん mailto:sage [2016/10/11(火) 20:20:47.82 ID:DTQ2U52n.net]
一時記憶力向上ゲームみたいなもんかと

823 名前:デフォルトの名無しさん mailto:sage [2016/10/11(火) 20:23:57.73 ID:hGW6J+ki.net]
リマインダーとかではなく暗記ってところがわからない

824 名前:デフォルトの名無しさん mailto:sage [2016/10/11(火) 20:54:38.77 ID:rvdgZgux.net]
ankiみたいなのだろ?

825 名前:デフォルトの名無しさん mailto:sage [2016/10/11(火) 21:12:59.40 ID:DIlrAbrX.net]
>>803
おいおい、まぁ、前提条件のC言語マスターが激しく大変だろからな

暗記アプリってpiを100万桁覚えるとかするためのアプリだろ

826 名前:デフォルトの名無しさん [2016/10/12(水) 01:11:33.10 ID:KqiGITqk.net]
暗器アプリだったら何か物騒な感じだよね

827 名前:デフォルトの名無しさん [2016/10/12(水) 01:22:12.02 ID:qs09U+gu.net]
例えばクイズ形式でどんどん覚えていくようなソフトをCで開発したいってことでしょ?
出来るんじゃないの?(CUIなら)

828 名前:デフォルトの名無しさん [2016/10/12(水) 09:18:15.90 ID:0qBDR/o0.net]
C言語マスターしてんだったら必要になり次第ドキュメント読みつつGUIプログラム組むのなんて簡単だろ?
他に専門的な知識が要るものでもないし。
出来ないならそれはC言語をマスターしてないだけだ。

829 名前:デフォルトの名無しさん mailto:sage [2016/10/12(水) 11:04:24.26 ID:ygteO6C5.net]
その暗記アプリ、ゲームエンジン使えばうまく行きそうな気はする

830 名前:デフォルトの名無しさん mailto:sage [2016/10/12(水) 11:21:12.98 ID:UeSSOb4c.net]
その程度ならマイクラで作れるだろ



831 名前:デフォルトの名無しさん mailto:sage [2016/10/12(水) 11:56:10.32 ID:Bk/iMyy8.net]
質問者そっちのけで勝手な仕様作り上げてまで回答したいの?

832 名前:デフォルトの名無しさん mailto:sage [2016/10/12(水) 12:56:24.44 ID:Mk78s3RE.net]
CUIならC言語持ち出すまでもないだろう
暗記アプリってのがどんなものか判らないけど多分Perlがお似合い

833 名前:デフォルトの名無しさん mailto:sage [2016/10/12(水) 19:15:05.77 ID:oek5pIEh.net]
何を暗記するのに使いたいですか?

834 名前:デフォルトの名無しさん mailto:sage [2016/10/12(水) 22:53:32.28 ID:nedjmfNo.net]
言語マスターなんて日本語を読み書きできるのと
ラノベを出筆するくらいに方向性の違う能力。
若しくはオナニーマスターだけどDTみたいな。

835 名前:デフォルトの名無しさん [2016/10/14(金) 00:22:29.38 ID:SrS85Be2.net]
例えがちょっとだけお下品。

836 名前:デフォルトの名無しさん mailto:sage [2016/10/14(金) 06:57:45.98 ID:5cxOTwUL.net]
これがちょっとだけお下品なら、普通のお下品や
すごくお下品な例えを見てみたくなるな。

『はじめてのC』もちょっと狙った感じの書名だったね。

837 名前:デフォルトの名無しさん mailto:sage [2016/10/16(日) 22:01:00.01 ID:E0PWP2JD.net]
はじめてのCを良書だと思っていた時期があった

838 名前:デフォルトの名無しさん mailto:sage [2016/10/16(日) 22:03:48.41 ID:E0PWP2JD.net]
あと「エキスパートCプログラミング 知られざるCの深層」も
規格を熟読した今となってはゴミ同然

839 名前:デフォルトの名無しさん mailto:sage [2016/10/17(月) 05:16:11.27 ID:WQbb/OBd.net]
つまり、毎晩寝る前に規格書を睡眠薬代わりに読むのが最強というわけか

840 名前:デフォルトの名無しさん mailto:sage [2016/10/17(月) 08:20:50.29 ID:N3gfqfmr.net]
ハゲの本を読む度に強烈な睡魔似襲われる
催眠効果と呼ぶことにする



841 名前:デフォルトの名無しさん mailto:sage [2016/10/17(月) 20:09:15.87 ID:R5CCSZPr.net]
ロベールの本を読むとなんか得体の知れないドーパミンが出る。
これをロベール効果と呼ぶ。

842 名前:デフォルトの名無しさん mailto:sage [2016/10/17(月) 21:13:06.88 ID:zv6p4a9y.net]
新作のC++入門書が出ると思わず買ってしまう。
これをハゲビジネスと呼ぶ。

843 名前:デフォルトの名無しさん mailto:sage [2016/10/18(火) 02:01:21.65 ID:ZR16vIyY.net]
最近の新作C++入門書ってなにかある?

844 名前:デフォルトの名無しさん mailto:sage [2016/10/18(火) 02:50:22.82 ID:oHxKXjdy.net]
C++プライマー 第5版

845 名前:デフォルトの名無しさん [2016/10/18(火) 10:19:50.74 ID:UbcBgpHB.net]
プライマーしょぼくなったよね。
見た目が。

846 名前:デフォルトの名無しさん mailto:sage [2016/10/18(火) 10:30:46.41 ID:ESUrlaKZ.net]
字が小さくて地味みたいな

847 名前:デフォルトの名無しさん mailto:sage [2016/10/18(火) 18:38:57.10 ID:M5JRNYhH.net]
いつまでも入門書買い漁るのは飽きた。やはり、本家本と仕様書で勉強するのが最強への道ではないか

848 名前:デフォルトの名無しさん mailto:sage [2016/10/18(火) 18:46:35.82 ID:0a1WOMu5.net]
モアエヘクティブC++とかですか

849 名前:デフォルトの名無しさん [2016/10/18(火) 19:17:19.43 ID:Pul0IDVM.net]
>>831
ところで具体的にどんな本読んでみました?

850 名前:デフォルトの名無しさん mailto:sage [2016/10/18(火) 20:56:09.64 ID:M5JRNYhH.net]
>>833
独習C++
詳説C++ (C MAGAZINE)
Effective C++
C++テンプレートテクニック
C++のエッセンス
独習デザインパターンC++
Effective Modern C++
プログラミング言語C++ ← イマココ



851 名前:デフォルトの名無しさん mailto:sage [2016/10/18(火) 22:14:55.19 ID:G5vZttej.net]
一冊も読んでないわ

852 名前:デフォルトの名無しさん mailto:sage [2016/10/19(水) 00:39:17.68 ID:BhXSEXF3.net]
C++ Coding Standards

853 名前:832 [2016/10/19(水) 01:35:35.38 ID:5sVAVD6H.net]
>>834
凄い読書量ですね。

俺は明快入門C++(ビギナー編)を読んだ後、ロベールのC++入門講座って本を読んでますが、今いちしっくりきてません…。

854 名前:デフォルトの名無しさん mailto:sage [2016/10/19(水) 03:26:21.55 ID:OiCCOICb.net]
C++標準委員会、ドワンゴの江添の本は?
「C++11/14コア言語」

セガの平山尚のセガ本などの、ゲームエンジン系は?

855 名前:デフォルトの名無しさん mailto:sage [2016/10/19(水) 13:09:31.92 ID:SfY3J7W6.net]
ドワンゴ江添

856 名前:デフォルトの名無しさん mailto:sage [2016/10/19(水) 13:57:20.46 ID:HZUn6OTC.net]
ドワンゴの人だったのか

857 名前:デフォルトの名無しさん mailto:sage [2016/10/19(水) 18:04:14.99 ID:vSZFyArd.net]
ドワンゴ江添←芸人っぽい響き

858 名前:デフォルトの名無しさん [2016/10/20(木) 23:25:13.31 ID:0qBh12A6.net]
正直、プログラム言語の本なんてほとんどがいらんやつだろ・・。



859 名前:デフォルトの名無しさん [2016/10/21(金) 00:50:23.10 ID:wiPWCJ8Q.net]
>>842
そうでもないですよ。
役に立ってます。

ネットで覚える派ですか?

860 名前:デフォルトの名無しさん mailto:sage [2016/10/21(金) 01:32:31.95 ID:R+XAmQY/.net]
電子版は便利だよね。



861 名前:デフォルトの名無しさん mailto:sage [2016/10/21(金) 01:57:59.85 ID:N1TnnfYV.net]
レベル別に良書と言われているものだけ読んでいればいい
入門書を何冊も読んでも意味ない

862 名前:デフォルトの名無しさん mailto:sage [2016/10/21(金) 08:55:46.49 ID:usEI0+le.net]
趣味レベルなら納期関係無いしネットで十分

863 名前:デフォルトの名無しさん [2016/10/21(金) 09:49:13.75 ID:qlDwM755.net]
>>842
最初の3日間くらいは本ばっかり見るわ

付箋張りまくり線引きまくりで ぐっちゃぐちゃに読み倒して
適当にプログラム何本か書き上げてコツをつかんだら

あとはもう本は読まないでネット情報だけで生きていく感じ

864 名前:デフォルトの名無しさん mailto:sage [2016/10/21(金) 21:13:36.83 ID:N1TnnfYV.net]
基礎的な本はいらない特にメジャーな言語
しかし応用になってくるとネットの情報は信頼性が下がっていくし断片的になるからそこから読み取るのは至難の業
というか時間の無駄

865 名前:デフォルトの名無しさん mailto:sage [2016/10/22(土) 00:07:56.00 ID:foifh8JM.net]
本の内容も信用できなくなってくよな
結局公式のリファレンスが一番だと思ったらそこにも間違いが

866 名前:デフォルトの名無しさん mailto:sage [2016/10/22(土) 00:25:50.24 ID:fkn1DI+D.net]
そこまで詳しければもう人に教わるものは無いな

867 名前:デフォルトの名無しさん mailto:sage [2016/10/22(土) 01:49:31.77 ID:7tMIvN9j.net]
すごー

868 名前:デフォルトの名無しさん [2016/10/22(土) 07:03:08.71 ID:rNB1+Tne.net]
(Javaの)参照だと分かりやすいのに、ポインタだと途端に分かりにくくなるんだよなぁ。何でだろ。

869 名前:デフォルトの名無しさん mailto:sage [2016/10/22(土) 07:09:39.54 ID:M5BjZ2VU.net]
ポインタ操作で指し先を積極的にかえることができるからなんじゃない

870 名前: []
[ここ壊れてます]



871 名前:デフォルトの名無しさん mailto:sage [2016/10/22(土) 12:18:12.63 ID:w2a8SH0J.net]
ポインタは入れ物として、参照はオブジェクトとして振る舞うからじゃない?
でも、変数代入と変数束縛は前者のほうがわかりやすいのはなんでだろね

872 名前:デフォルトの名無しさん [2016/10/22(土) 19:14:18.29 ID:rNB1+Tne.net]
仮想関数とオーバーライドのところは、C++もJavaも(ポインタか参照かという違いはあれど)ほとんど同じことをやっているはずなのに、なぜかC++のが難しく感じる。
本のせいか?。

873 名前:デフォルトの名無しさん mailto:sage [2016/10/22(土) 21:47:55.00 ID:klBj43YX.net]
後発のjavaの方がバカ相手にわかるように書かないといけないので結果的に分かりやすい

874 名前:デフォルトの名無しさん mailto:sage [2016/10/23(日) 00:16:48.35 ID:y2GXnpPx.net]
c++は仮想関数とそうでない関数があるがjavaは全て仮想関数だから?
もしくはc++はポインタと値と参照があるがjavaはほぼ全て参照型だから?

c++のが選択肢が多い分、使い分ける必要があってややこしい

875 名前:デフォルトの名無しさん mailto:sage [2016/10/23(日) 00:28:54.41 ID:lzTmPVXn.net]
java使わないから分かんないんだけど全部仮装関数って良いのかそれ
場合によっては凄い遅くなりそうだが

876 名前:デフォルトの名無しさん mailto:sage [2016/10/23(日) 00:38:37.16 ID:KeRzb/QL.net]
速度を気にしてjavaを使う奴なんかいない

877 名前:デフォルトの名無しさん mailto:sage [2016/10/23(日) 01:15:33.32 ID:3pC6m4Rl.net]
Javaはインタプリタなので実行時にオーバーライドされているかどうか区別してコンパイルする。
だから結局のところプログラマがソースに明示するかどうかの違いにしかならないし、そのせいで遅くはならない。

878 名前:デフォルトの名無しさん mailto:sage [2016/10/23(日) 02:22:59.46 ID:l2122epV.net]
Javaは昔からfinalがあるからね

879 名前:デフォルトの名無しさん mailto:sage [2016/10/23(日) 08:39:16.96 ID:7LVxYGoD.net]
Javaは遅くはならないというより、C++でいうところの遅いパターンしかない

880 名前:デフォルトの名無しさん mailto:sage [2016/10/23(日) 09:04:44.43 ID:KxGiTi6w.net]
それでもjitでc++より早い(cよりとは言ってない)



881 名前:デフォルトの名無しさん mailto:sage [2016/10/23(日) 17:38:43.11 ID:l/vyVrq0.net]
わざとか知らずかは知らないが、わざわざ遅くなるように書いたc++より速くなることもまれにあると言うだけ。

そもそもランタイム自体c++でかかれているんだぜ、あれ。

882 名前:デフォルトの名無しさん mailto:sage [2016/10/23(日) 17:44:37.22 ID:kTfbu3LJ.net]
じっとコンパイルする時間含めてもC++より速いの?

883 名前:デフォルトの名無しさん mailto:sage [2016/10/23(日) 18:37:31.69 ID:vw/ISU92.net]
Javaならc++より(話が)早い

884 名前:デフォルトの名無しさん mailto:sage [2016/10/23(日) 20:33:45.91 ID:kTfbu3LJ.net]
まあアルゴリズム力が勝負の9割を決めるけどね
アルゴリズムの素養のないC++erコードはアルゴリズム巧者によるPythonコードにすらボロ負けする

885 名前:デフォルトの名無しさん mailto:sage [2016/10/24(月) 21:13:37.26 ID:UaUSiXCD.net]
アルゴリズム何それうまいの?

886 名前:デフォルトの名無しさん mailto:sage [2016/10/24(月) 22:24:54.92 ID:szSWSHdO.net]
おいしいよ

887 名前:デフォルトの名無しさん mailto:sage [2016/10/25(火) 01:44:44.93 ID:+TdoxN9O.net]
   ▲  夫 △
  (  皿 )  ごりーん
  (        )      
 /│  国  │\         ごりーん
<  \____/  >
    ┃   ┃
    =   =
アルゴリズムだよ
望みの機能を現実的な時間とメモリ使用量で動いてくれるようにするすごいやつだよ

888 名前:デフォルトの名無しさん [2016/10/25(火) 18:02:12.12 ID:/LQv2l/i.net]
C++で,
int a[4]みたいな配列があった時に
a[2]の数字だけを削除するようなことってどうやったらいいですか

a[0]=89
a[1]=11100
a[2]=555
a[3]=22

これを↓
a[0]=89
a[1]=11100
a[3]=22
a[4]=0

みたいにしたいです。
自分で関数作らないとダメですか?
eraseとかで出来たりしますか?

889 名前:デフォルトの名無しさん [2016/10/25(火) 18:02:44.87 ID:/LQv2l/i.net]
間違えました

a[0]=89
a[1]=11100
a[2]=555
a[3]=22

これを↓
a[0]=89
a[1]=11100
a[2]=22
a[3]=0

みたいにしたいです

890 名前:デフォルトの名無しさん mailto:sage [2016/10/25(火) 18:10:44.21 ID:04xA9lfs.net]
>>872
memcpy



891 名前:デフォルトの名無しさん mailto:sage [2016/10/25(火) 18:14:01.64 ID:XCpKRbQF.net]
>>873
重なるところを操作するのに memcpy はよろしくない
memmove で

892 名前:デフォルトの名無しさん mailto:sage [2016/10/25(火) 20:04:15.17 ID:/LQv2l/i.net]
>>874
ありがとうございます
出来ました!

893 名前:デフォルトの名無しさん mailto:sage [2016/10/25(火) 20:55:06.17 ID:+zdMSPeh.net]
STL使えば?

894 名前:デフォルトの名無しさん [2016/10/25(火) 21:37:31.58 ID:v6pSXgxe.net]
>>872
まんまremoveという関数が。

895 名前:デフォルトの名無しさん mailto:sage [2016/10/25(火) 21:53:36.38 ID:ysOf7Gsy.net]
memmove の前にlistとかvectorが頭に浮かぶのはC++病なのかもね。

896 名前:デフォルトの名無しさん mailto:sage [2016/10/25(火) 21:54:15.62 ID:S/qKFkwP.net]
removeならトリビアルでない型が来ても安心だな

897 名前:デフォルトの名無しさん [2016/10/25(火) 22:30:19.95 ID:20LBBpeo.net]
vectorしか思いつかない

vector<int> a{ 89,11100,555,22,0 };
a.erase(a.begin() + 2);

898 名前:デフォルトの名無しさん mailto:sage [2016/10/25(火) 22:32:20.26 ID:dPNm/fb0.net]
やっぱプログラマって底辺なの・・・・。
あほ上司のしりぬぐいをしたつもりなんだが、できて当たり前みたいな雰囲気がチームにある。

899 名前:デフォルトの名無しさん mailto:sage [2016/10/25(火) 22:38:20.05 ID:oZjfYDL1.net]
スレタイも読めないやつは底辺やな

900 名前:デフォルトの名無しさん mailto:sage [2016/10/25(火) 22:44:00.57 ID:wk/8Ajgh.net]
ローカルルール・スレタイ・スレの流れの3つが読めない人がプログラマやっているのか



901 名前:デフォルトの名無しさん mailto:sage [2016/10/25(火) 23:09:12.29 ID:g6Mxg6+u.net]
>>877
それファイル削除だから

902 名前:デフォルトの名無しさん mailto:sage [2016/10/25(火) 23:21:46.41 ID:rsJoV7Wk.net]
>>884
C++の話をしてるんだからちゃんとC++を勉強してからレスした方がいいよ

www.cplusplus.com/reference/algorithm/remove/

903 名前:デフォルトの名無しさん mailto:sage [2016/10/25(火) 23:37:02.85 ID:+zdMSPeh.net]
removeだと指定要素全て消されるよ

904 名前:デフォルトの名無しさん mailto:sage [2016/10/26(水) 00:00:44.69 ID:cikaMqhl.net]
remove関数はre-moveでdeletet(消す)とは違うよな
消すならdelete()、でも、なんでこれないんだ?

905 名前:デフォルトの名無しさん mailto:sage [2016/10/26(水) 00:04:13.70 ID:AmMa052m.net]
>>887
remove[他動詞]
1 〈置いてある物を〉(…から)取り去る,取り外す,片づける;〈人を〉(…から)連れ去る;((再帰的)) (…から)立ち去る((from ...))

906 名前:デフォルトの名無しさん mailto:sage [2016/10/26(水) 00:16:29.12 ID:cikaMqhl.net]
あと、erase()、deleteってのもC++にはあるけど
英語のerase と delete ではなんか意味が違うから
erase()、deleteになったんだろな

907 名前:デフォルトの名無しさん mailto:sage [2016/10/26(水) 01:11:59.07 ID:m0O+CJ+H.net]
removeはもとから撤去するとか取り除くって意味合いで、移動の意味のほうが稀

deleteとeraseは単に予約語だから代えてるだけじゃないかな
pythonは言語機能で配列の要素削除があるけど、使うのはdelだよ

908 名前:デフォルトの名無しさん mailto:sage [2016/10/26(水) 01:27:57.33 ID:cikaMqhl.net]
rempveとdelete
www.sonydna.com/sdna/solution/pr_loc/blog/20160511.html

909 名前:デフォルトの名無しさん mailto:sage [2016/10/26(水) 07:06:04.24 ID:RJpSlGaC.net]
int a[4]; って書いてあるのに remove ガーってアホとしか思えん

910 名前:デフォルトの名無しさん mailto:sage [2016/10/26(水) 07:16:51.16 ID:k//iL6vN.net]
配列の最後に0が詰まるんだからdeleteではダメだな



911 名前:デフォルトの名無しさん mailto:sage [2016/10/26(水) 07:18:28.33 ID:8DxCGNM5.net]
アスペなんだろ

912 名前:デフォルトの名無しさん [2016/10/26(水) 07:41:08.85 ID:RDpdn04z.net]
>>892
どういうこと?
まさか配列に使えないと思ってるわけじゃないよね?

913 名前:デフォルトの名無しさん mailto:sage [2016/10/26(水) 08:00:54.43 ID:Qx/HEVu1.net]
>>895
そんな、いじめなくても…

914 名前:デフォルトの名無しさん mailto:sage [2016/10/26(水) 15:18:48.95 ID:E8CItb2B.net]
>>871-872 からは int a[4]; で a[2]を消して詰めるという以上の条件は読み取れない
無駄に複雑にするのは知識をひけらかしたいだけの自己満足でしかない
極端な話、 a[2]=a[3]; a[3]=0; が分かり易さと速度に於いて最適だ
もちろん別の条件があるなら別の最適な方法があるかもしれない

915 名前:デフォルトの名無しさん mailto:sage [2016/10/26(水) 15:21:48.76 ID:0DRYzuZk.net]
moveでいいと思います

916 名前:デフォルトの名無しさん mailto:sage [2016/10/26(水) 15:44:46.79 ID:pULr6tRx.net]
ひけらかしたいだけなら別にいいだろ
この方法じゃなきゃだめだ、ってやられたら邪魔だが
初心者の場合は質問が上手くできない場合もあるし、ROMっている人の参考になる場合もあるんだから

917 名前:デフォルトの名無しさん mailto:sage [2016/10/26(水) 17:40:57.14 ID:Qx/HEVu1.net]
871の質問に対して『a[2]=a[3]; a[3]=0; が分かり易さと速度に於いて最適』だなんて
どんだけアスペこじらせてんのよ

918 名前:デフォルトの名無しさん mailto:sage [2016/10/26(水) 18:44:18.81 ID:2q4CwRuj.net]
別の条件を明かにすることで最適解が変わってくる
という趣旨が分からないならお前がアスペ

919 名前:デフォルトの名無しさん mailto:sage [2016/10/26(水) 19:06:50.11 ID:DCJLb856.net]
>>900
>>896

極端な話って前提は都合よくスルーなんだなw

920 名前:デフォルトの名無しさん mailto:sage [2016/10/26(水) 19:42:44.58 ID:cikaMqhl.net]
>>871-872の回答して
俺的にはC++で、そして、eraseが出ているから、かっこよくSTLあたりを
使った回答を期待していたと思っていたが、memmoveで出来ましたで、えっって感じだったけどな
なんか回答としては、a[2]=a[3]; a[3]=0; で十分であったってことだよな。



921 名前:デフォルトの名無しさん [2016/10/27(木) 16:04:26.63 ID:dM08lZSa.net]
(C++で)厚くない本でいい本ありますか?

922 名前:デフォルトの名無しさん mailto:sage [2016/10/27(木) 19:02:24.09 ID:y6LRba0P.net]
C++は全部厚いよ。

関係ないけど実写版Sakiに江添っぽいメガネキャラがいるな。

923 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2016/10/27(木) 19:13:25.99 ID:ABDKK6Bx.net]
unordered_setやunordered_mapのbucket周りってどういう風に実装されているの?

924 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2016/10/27(木) 19:42:45.26 ID:ABDKK6Bx.net]
ライセンスの関係でソース見ちゃダメモードなんすよ。

925 名前:デフォルトの名無しさん mailto:sage [2016/10/27(木) 21:38:26.84 ID:Fc/cX5mQ.net]
レス番飛んでるけど嵐来たの?

926 名前:デフォルトの名無しさん mailto:sage [2016/10/27(木) 22:03:55.58 ID:ABDKK6Bx.net]
台風シーズンは過ぎた

927 名前:デフォルトの名無しさん mailto:sage [2016/10/27(木) 22:07:24.25 ID:ABDKK6Bx.net]
ググったらアイドルグループって出た

928 名前:903 [2016/10/28(金) 01:59:06.60 ID:wDKSwFbg.net]
>>905
ありがとうございます。

じゃあCに関する記述はカットしてあって、C++をメインに解説してある本ってありますか?

929 名前:デフォルトの名無しさん mailto:sage [2016/10/28(金) 06:22:57.87 ID:odyikEcy.net]
>>911
あるよ

930 名前:デフォルトの名無しさん [2016/10/28(金) 11:40:48.11 ID:CQ8iiwCh.net]
>>905
実写版Saki なんてあるのかよ・・・ 国広の私服どうなんだよ・・・


とろろで、try catch で例外を受けたときに
例外が発生したソース名と行番号を表示したいんだけど
簡単にやるにはどうすればいいかな
自力でバックトレースしてごにょごにょするしかない?



931 名前:デフォルトの名無しさん mailto:sage [2016/10/28(金) 12:06:22.96 ID:37ytQ7vz.net]
__FILE__と__LINE__じゃダメなん?

932 名前:デフォルトの名無しさん mailto:sage [2016/10/28(金) 13:05:49.75 ID:RWm1DZ2k.net]
#define my_throw() throw my_exception(__FILE__, __LINE__)

933 名前:デフォルトの名無しさん mailto:sage [2016/10/28(金) 13:22:53.47 ID:CQ8iiwCh.net]
>>914
catchの中の行番号になっちゃう
>>915
例外を自分で投げるときはそれでいいけど ほかの人が投げた例外は無理だよね

934 名前:デフォルトの名無しさん mailto:sage [2016/10/28(金) 15:59:20.16 ID:oa5x3DIH.net]
stack traceの情報がダンプされてりゃ十分だろ
むしろわけわからん加工しないでほしい

935 名前:910 [2016/10/28(金) 16:00:33.51 ID:wDKSwFbg.net]
>>912
何ていう本ですか?

936 名前:デフォルトの名無しさん [2016/10/28(金) 22:39:16.57 ID:9n7Qn2lL.net]
俺はメッセージボックスで"run!"って出して、
ここまで走ってるってのを確認してる

937 名前:デフォルトの名無しさん mailto:sage [2016/10/28(金) 23:27:27.54 ID:9iz4x+2p.net]
>>916
他の人が投げることまで想定するならファイル名や行番号情報がないことも想定した方がいいと思うが...

938 名前:デフォルトの名無しさん mailto:sage [2016/10/28(金) 23:40:09.94 ID:JUHhVRmD.net]
>>920
で、そう想定したならどうすれば良いんだ?

939 名前:デフォルトの名無しさん mailto:sage [2016/10/28(金) 23:46:36.57 ID:9iz4x+2p.net]
>>921
バカなの?
無い袖は振れないって知ってる?

940 名前:デフォルトの名無しさん mailto:sage [2016/10/28(金) 23:53:32.99 ID:JUHhVRmD.net]
>>922
そういうことか。
なんか俺の上司が>>921みないな感じのこというんだよな
で、具体的な案なるんですかって出ると
分からん・知らんと



941 名前:デフォルトの名無しさん mailto:sage [2016/10/29(土) 06:59:48.04 ID:dIZqWzLv.net]
例えるなら
「50円しか持ってないけどカツ丼食いたい。どうすれば」
「バカなの。金無いなら諦めろ」
「そういうことか。なんか俺の上司が俺みたいな感じのこというんだよな。で、具体的な策なんですか?って出ると分からん・知らんと」

942 名前:デフォルトの名無しさん mailto:sage [2016/10/29(土) 13:07:19.35 ID:1ysZjR2u.net]
>>920
そのときはあきらめるけど、そうじゃないときはなるべくログを出したい
backtrace() を使ったらなんか何とかなりそうな感じになってきた

943 名前:917 [2016/10/29(土) 20:44:20.71 ID:TXDQcz+f.net]
誰も答えてくれないなぁ…。

944 名前:デフォルトの名無しさん mailto:sage [2016/10/29(土) 22:06:48.85 ID:RGDx1OIt.net]
>>926
accelarated C++
https://www.amazon.co.jp/dp/4894714221

945 名前:デフォルトの名無しさん mailto:sage [2016/10/29(土) 22:21:56.46 ID:DjZ/IKvQ.net]
入門書じゃなければそれなりにないか?
effectiveC++とかC++テンプレートテクニックとか

946 名前:925 [2016/10/29(土) 23:45:47.65 ID:TXDQcz+f.net]
>>927 >>928
ありがとうございます。
Amazonで見てみますね。

947 名前:デフォルトの名無しさん mailto:sage [2016/10/30(日) 01:45:11.85 ID:p5P2p5NG.net]
>>928
C++関連本色々あるが、どんなレベルの本を探しているのか不明で答えられないって感じじゃないのかな。
前提条件が厚くない本で、入門書、入門書の次の本、さらに進んでテンプレートを必死する本...さて望んでいるのはどれ。
俺は読んでないから良い本か分からんが、入門者なら比較的最近の禿教祖のC++のエッセンスあたりが良い気がするが...
(翻訳がダメで日本語版は入門者に向かない可能性ある)

948 名前:928 mailto:sage [2016/10/30(日) 02:10:04.18 ID:tifMCILv.net]
>>930
そうですね、その辺に言及してませんでした。
明快入門C++(ビギナー編)という本を読み終えたので、「入門書の次」になりますかね。
ただ、オライリー系の本はちょっと苦手意識がありますが…。

949 名前:デフォルトの名無しさん mailto:sage [2016/10/30(日) 21:55:25.35 ID:lcq4jfiv.net]
ボクもオラオラ系はちょっと苦手です

950 名前:デフォルトの名無しさん mailto:sage [2016/10/31(月) 00:25:09.36 ID:HOhBYoN9.net]
だよね…



951 名前:デフォルトの名無しさん [2016/10/31(月) 02:58:48.29 ID:k27SCECd.net]
もしかして…オラオラですかぁ?

952 名前:デフォルトの名無しさん mailto:sage [2016/10/31(月) 10:16:49.41 ID:9pGzrAq6.net]
無駄無駄系です…

953 名前:デフォルトの名無しさん mailto:sage [2016/10/31(月) 11:26:54.39 ID:hA7i3ZHr.net]
オラは人気者
苦手意識持たずに読んでみるといいよ

954 名前:デフォルトの名無しさん mailto:sage [2016/10/31(月) 19:56:01.77 ID:UGFA1d/s.net]
C言語でファイルの読み書きでエラーを捕まえるには
例えばfreadとかfwriteの直後でferror()を使えばいいんですか?

955 名前:デフォルトの名無しさん mailto:sage [2016/10/31(月) 19:59:57.89 ID:lDQV5Vhq.net]
左様

956 名前:デフォルトの名無しさん mailto:sage [2016/10/31(月) 20:00:13.16 ID:K0NFLcee.net]
速習のJava本はありますか。やらされそうでw スレチペコペコ

957 名前:デフォルトの名無しさん mailto:sage [2016/10/31(月) 20:00:16.78 ID:nAIZNyW0.net]
とりあえずそれで良いんじゃないのか

958 名前:デフォルトの名無しさん mailto:sage [2016/10/31(月) 20:12:56.58 ID:R+gJxrwJ.net]
ferrorって、直前のオペレーションでエラーがない時に呼び出すと何を返す?

959 名前:デフォルトの名無しさん mailto:sage [2016/10/31(月) 20:17:24.94 ID:lDQV5Vhq.net]
0?
NO_ERRORみたいな値

960 名前:デフォルトの名無しさん mailto:sage [2016/10/31(月) 20:34:34.18 ID:UGFA1d/s.net]
fwrite()の返り値はOSの書き込みキャッシュに書いた数なんですか?



961 名前:デフォルトの名無しさん mailto:sage [2016/10/31(月) 21:50:56.59 ID:dUnI1wCj.net]
いえ関数呼び出し式fwrite()は未定義動作なので戻り値は不貞です

962 名前:930 mailto:sage [2016/11/01(火) 00:56:11.80 ID:68tlbbHF.net]
>>936
どうもです。

しかし前にRubyのオライリー本買って一度挫折してるので。
Amazonでよさげなのがあったので検討してみます。

963 名前:デフォルトの名無しさん mailto:sage [2016/11/01(火) 01:05:00.47 ID:IVbhyFfW.net]
>>945
まあ入門書一冊読み終わったという段階なら、次のレベルの本というよりも、とにかく実際的なプログラミングをして、分かったり分からなかったりという経験を積んでいかないと。

964 名前:944 mailto:sage [2016/11/01(火) 01:49:16.27 ID:68tlbbHF.net]
>>946
分かります。

ただ今はネット環境が無いのでexpresseditionがダウンロード出来ないんです。
詳しくはJavaの初心者板で何回かレスってるのでよかったら見てください。

965 名前:デフォルトの名無しさん mailto:sage [2016/11/02(水) 11:28:15.00 ID:r0XG4JKI.net]
#include <iostream>
#include <string>
std::string f() {
std::string str="ハロ 今日も元気だね";
return str;// (1)
}
int main() {
std::string str2=f(); //(2)
return 0;
}
(1)でstrが消滅するのは(2)が完了してからですか?

966 名前:デフォルトの名無しさん mailto:sage [2016/11/02(水) 12:28:24.03 ID:CjPrdZ5H.net]
自前のオブジェクトで試してみればいいだろこのスカポンタン

967 名前:デフォルトの名無しさん mailto:sage [2016/11/02(水) 12:37:47.67 ID:yVmWsAjP.net]
そもそも何を訊きたいかわからん
デストラクタが呼ばれるタイミングじゃなさそだし

968 名前:デフォルトの名無しさん mailto:sage [2016/11/02(水) 12:48:00.98 ID:BfJMJ0BQ.net]
>>948
最適化を考慮しなければ
呼び出し元のf()の位置にはstrとは別の一時オブジェクトがコピーで作られるので
f()から戻ってきた時点でstrは消えてる

ただコンパイラは最適化して一時オブジェクトを介さないようにしてもよく
今の場合最大限最適化されればstr2の位置に直接オブジェクトを構築する可能性もある
つまり
int main()
{
std::string str2="ハロ 今日も元気だね";
}
のようにする場合さえある

参考
https://ideone.com/meJdTX

969 名前:デフォルトの名無しさん mailto:sage [2016/11/02(水) 12:50:54.71 ID:+cKPTnUF.net]
関数自前を元に 一時オブジェクトへ コピーコンストラクターで複製
関数自前が死亡
一時オブジェクトを元に 呼び出し元へ コピーコンストラクターで複製
一時オブジェクトが死亡
(呼び出し元死亡)

struct T {
T() { cout << "生成" <<endl; }
~T() { cout << "死亡" <<endl; }
T(const T& src) { cout << "コピコン" <<endl; }
};

T f() { T o; return o; }
int main()
{

970 名前:デフォルトの名無しさん mailto:sage [2016/11/02(水) 13:29:36.73 ID:r0XG4JKI.net]
>>951
有難うございました。



971 名前:デフォルトの名無しさん mailto:sage [2016/11/02(水) 18:09:16.64 ID:jFTxp1RB.net]
>>943
flushしない場合は本当に書き込んだかどうかは
戻り値だけでは分からない

972 名前:デフォルトの名無しさん mailto:sage [2016/11/02(水) 19:29:29.17 ID:A0uT16tv.net]
>>952
一時オブジェクトを使って説明しようとしたあたり、>>951よりは知能が高いと見たが
残念ながら947のコードでコピーコンストラクターが走ることはない

973 名前:デフォルトの名無しさん mailto:sage [2016/11/02(水) 19:44:03.65 ID:OdDlR5uG.net]
>>954
OSというかファイルシステムのキャッシュに書かれるだけでfwriteの戻り値としては正しいでしょ。フラッシュされるかどうかはまた別の話。

974 名前:デフォルトの名無しさん mailto:sage [2016/11/02(水) 19:46:30.69 ID:A0uT16tv.net]
↑日本語の読めないアスペ

975 名前:デフォルトの名無しさん mailto:sage [2016/11/02(水) 19:53:56.36 ID:6QvosKf/.net]
>>957
むしろ>>954が怪しい

976 名前:デフォルトの名無しさん mailto:sage [2016/11/02(水) 20:02:14.67 ID:A0uT16tv.net]
>>958
>>943を見てN1570を少し読んだ限りでは俺も>>954と同じ見解に至ったのだが、そうなの?

977 名前:デフォルトの名無しさん mailto:sage [2016/11/02(水) 20:26:56.84 ID:6QvosKf/.net]
>>959
>>943が「ファイルに書いた数」を聞いてるなら「flushしないと〜」って出せばいいが
そうじゃないやん?

978 名前:デフォルトの名無しさん mailto:sage [2016/11/02(水) 21:10:08.07 ID:bzJi3dOp.net]
>>943を見ると、質問者はファイルシステムのキャッシュの存在を知っていて、質問の意図は、fwriteの戻り値が実際にファイルに書き込まれた数ではなく、キャッシュされてるかもしれないけどfwriteされた数なんだよね?ということかと思われる。

979 名前:デフォルトの名無しさん mailto:sage [2016/11/02(水) 22:08:41.78 ID:oVgJ9kJG.net]
規格の7.21.3(Files)p3と7.21.8.2(fwrite)と7.21.7.3(fputc)と7.21.5.6(setvbuf)と7.21.5.3(fopen)p8を読んだが
オペレーティングシステムに渡される保証が見つけられなかった

980 名前:デフォルトの名無しさん mailto:sage [2016/11/03(木) 13:03:22.12 ID:GnUEiriV.net]
>>962
オペレーティングシステムに渡される保証ってか、OSがないベアメタルもあるからな



981 名前:961 mailto:sage [2016/11/03(木) 13:22:51.56 ID:S+bkcBHC.net]
>>963
そこは一応stdio.h/cstdioがオペレーティングシステム(host environment)のある実行環境での必須ヘッダーなので、
言語仕様的には「fwriteが使える=オペレーティングシステムが有ることが前提」のようだ

982 名前:デフォルトの名無しさん mailto:sage [2016/11/04(金) 09:50:14.60 ID:yL60CdY2.net]
メインループ内でPersonクラスのpersonA, personBを生成した場合、
メインがpersonBのageという変数の値を知るには
personB.ageをリターンするメソッド

とすればできたけれど、
personAがpersonBのageを知るにはどうしたらいいですか?
personAからは直接personBは見えないですよね?

983 名前:デフォルトの名無しさん mailto:sage [2016/11/04(金) 10:05:17.60 ID:XeZvVTgM.net]
>>965
Personに他のPersonのポインタを渡すメンバ関数を定義して、メイン関数の中でpersonAにpersonBを渡してやればいい。

984 名前:デフォルトの名無しさん mailto:sage [2016/11/04(金) 10:38:18.50 ID:qN0Y2dNO.net]
personAにpersonBのポインタを渡して
personAからpersonBのageを返すpublicなメソッドを呼ぶ

985 名前:デフォルトの名無しさん mailto:sage [2016/11/04(金) 11:26:11.13 ID:yL60CdY2.net]
なるほど、簡潔でわかりやすいです。ありがとうございます!

986 名前:デフォルトの名無しさん mailto:sage [2016/11/04(金) 12:41:54.09 ID:lX4+FIXr.net]
ポインタはつおいなぁ

987 名前:デフォルトの名無しさん [2016/11/05(土) 11:33:42.38 ID:VEBG0WS2.net]
JSONパーサーで今いちばん超高速なやつってboostのやつ?

988 名前:デフォルトの名無しさん mailto:sage [2016/11/05(土) 12:56:33.78 ID:Qu5C3ziN.net]
rapidjson

989 名前:デフォルトの名無しさん [2016/11/05(土) 16:33:31.92 ID:e+ZVz62v.net]
Javaの基礎を一通りやったんだけど、C++の入門ってどの本がオヌヌメ?

990 名前:デフォルトの名無しさん [2016/11/05(土) 19:27:42.58 ID:bv3OHyVZ.net]
>>972
Javaの基本だけやってC++に入門して何すんの?
単にC++使えますって言いたいだけ?



991 名前:デフォルトの名無しさん mailto:sage [2016/11/05(土) 19:46:02.42 ID:CtfyVCCA.net]
単にC++という言語を学びたいだけだと思うのだが
「言いたいだけ」などというひねくれた妄想が何処から湧いてきたのか謎だ

992 名前:デフォルトの名無しさん mailto:sage [2016/11/05(土) 20:24:44.18 ID:v1VPNqzt.net]
ここは2chだ
好奇心とか純粋なものは許されないぞ

993 名前:デフォルトの名無しさん mailto:sage [2016/11/05(土) 20:43:51.38 ID:pFpM7y/Y.net]
JAVAの基礎一通りってのがどの程度が分からんが
もしお勉強をしただけなら他の言語に手を出す前に何かソフト作ってみるなりする方が良いよな
一つ言語が使えたら他の言語の入門も楽になるけどそれはまず言語を勉強したからとかじゃなくて
プログラミングの経験の有無によるところが大きいと思うし

994 名前:デフォルトの名無しさん mailto:sage [2016/11/05(土) 21:22:46.55 ID:ww0gV1s1.net]
女の子にキャー

995 名前:キャー言われたいんだよ []
[ここ壊れてます]

996 名前:デフォルトの名無しさん [2016/11/05(土) 22:00:50.23 ID:U2hMH/zp.net]
>>973
違う。やりたいってよりやる必要が出てきたって感じです

>>976
Javaは簡単なAndroidアプリ作ったりできる程度の うんこレベル
Cは苦Cをサラッとやっただけで殆どかけない

でもC++やらなきゃならなくなった...

>>977
もしかしてC++ってイケメンしか書いちゃ駄目な言語?

997 名前:デフォルトの名無しさん mailto:sage [2016/11/05(土) 23:15:37.16 ID:o/ex+S0B.net]
Aさんの場合「C++をマスターしたら頭頂部が薄くなって彼女にふられました」

998 名前:デフォルトの名無しさん mailto:sage [2016/11/05(土) 23:59:13.14 ID:DL4mqWsO.net]
だれがハゲだと たここら

999 名前:デフォルトの名無しさん mailto:sage [2016/11/06(日) 00:33:24.47 ID:LiObGufH.net]
ビョンビョンはハゲだろ何を今さら
フサフサだったメイヤーは頭髪の事情で引退を余儀なくされた

1000 名前:デフォルトの名無しさん mailto:sage [2016/11/06(日) 00:34:31.09 ID:g7D6mKqm.net]
C++に詳しい人は禿げてるイメージあるわ



1001 名前:デフォルトの名無しさん mailto:sage [2016/11/06(日) 00:51:47.52 ID:IxN4C1EU.net]
そうだったの・・・か?!

1002 名前:デフォルトの名無しさん mailto:sage [2016/11/06(日) 02:17:19.60 ID:gOCHQWHq.net]
hage = new hair();

1003 名前:デフォルトの名無しさん mailto:sage [2016/11/06(日) 02:43:02.12 ID:egMrprJ+.net]
std::bad_alloc

1004 名前:デフォルトの名無しさん [2016/11/06(日) 03:26:41.55 ID:E1Cvk6Xz.net]
std::bad_cast

1005 名前:スッキリ厨 mailto:sage [2016/11/06(日) 08:50:54.24 ID:UB8ayWaX.net]
>>972
スッキリわかる Java入門 第2版、2014、でしっかりとオブジェクト指向を学んだのなら、

この2冊を、この順に読む
たのしいRuby 第5版、2016
みんなのPython 第3版

C++なら、ロベール
C#なら、猫

AltJavaなら、Kotlin
AltJSなら、Haxe

スッキリJavaで、オブジェクト指向を学んでいないなら、他の言語は無理

1006 名前:デフォルトの名無しさん mailto:sage [2016/11/06(日) 09:03:44.98 ID:TO8zu+f0.net]
>>985-986
滑ってキャッチできませんでした

1007 名前:デフォルトの名無しさん [2016/11/06(日) 09:43:02.90 ID:bj0bmNIv.net]
なんか皆 髪と引き換えに書ける用になってんだな
凄い禿げたくない。

>>987
スッキリは入門と実践、SQL済ましてる
Pythonはオライリーのpython3入門を半分やり

ロベールは900ページあってモチベの維持がなかなか大変だな...

1008 名前:スッキリ厨 mailto:sage [2016/11/06(日) 09:58:11.08 ID:UB8ayWaX.net]
林 晴比古のC++本で、速習ものでも探せば?
しかし、理解できるかな?

ポインタ・参照
ジェネリックス(汎用型)
フレンドクラス
複数クラスを継承できるけど、ダイヤモンド継承だから危険
アルゴリズム

1009 名前:デフォルトの名無しさん mailto:sage [2016/11/06(日) 11:10:03.05 ID:egMrprJ+.net]
>>988
自分は禿げたりしないなんて油断してたから、現実を受け止める準備が無かったんだろう。

1010 名前:デフォルトの名無しさん [2016/11/06(日) 16:45:47.49 ID:hIr9vUGi.net]
オヌヌメとか言うやつにC++が出来るわけねえだろ。
断言しても良いわ。



1011 名前:デフォルトの名無しさん mailto:sage [2016/11/06(日) 17:28:02.97 ID:pvoHgICs.net]
お前らせめて一冊くらい勧めてやれよw
>>972
ロベール

1012 名前:デフォルトの名無しさん mailto:sage [2016/11/06(日) 17:31:41.97 ID:aqA72S6k.net]
C++のテンプレ多用した時のエラーメッセージ見れば禿げるのも頷ける

1013 名前:デフォルトの名無しさん mailto:sage [2016/11/06(日) 17:54:46.65 ID:/loPCIEU.net]
java の基礎やっただけだとリンクもままならない気が
薄い奴ならポケットリファレンス結構いいよ

1014 名前:デフォルトの名無しさん mailto:sage [2016/11/06(日) 19:57:56.28 ID:H//kZpxk.net]
>>971
rapidjsonってほんとに速いんか?

1015 名前:デフォルトの名無しさん mailto:sage [2016/11/06(日) 22:58:47.96 ID:dU5z27As.net]
次スレの季節
【初心者歓迎】C/C++室 Ver.100【環境依存OK】
echo.2ch.net/test/read.cgi/tech/1478440682/

1016 名前:デフォルトの名無しさん mailto:sage [2016/11/07(月) 06:09:12.64 ID:9JfEVYTg.net]
>>997
おつ

1017 名前:デフォルトの名無しさん mailto:sage [2016/11/07(月) 08:38:34.35 ID:fwwW9lIx.net]
乙 
100記念だな

1018 名前:デフォルトの名無しさん mailto:sage [2016/11/07(月) 09:09:19.52 ID:vooGYje+.net]
class A{
int a[2];
A(int b[])
:a(b) //error
{}
};

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

1019 名前:デフォルトの名無しさん mailto:sage [2016/11/07(月) 09:23:33.51 ID:LhBXfA3o.net]
想像では
: a{b[0], b[1]}

1020 名前:過去ログ ★ [[過去ログ]]
■ このスレッドは過去ログ倉庫に格納されています








[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<250KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef