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


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

C++相談室 part119



1 名前:デフォルトの名無しさん [2015/08/31(月) 18:19:04.13 ID:NE3NvROE.net]
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレに
お願いします。

前スレ
C++相談室 part118
peace.2ch.net/test/read.cgi/tech/1435970316/

このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.97【環境依存OK】 [転載禁止]©2ch.net
peace.2ch.net/test/read.cgi/tech/1439849418/

次期規格C++1zはこちら
C++14/C++1z 20
peace.2ch.net/test/read.cgi/tech/1410382924/

■長いソースを貼るときはここへ。■
 codepad.org/
 ideone.com/

413 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 13:45:48.19 ID:39XjsZ/s.net]
どうでもいいが、32bit版の.Netアプリって
32bit版の.NET Framework上で動くんじゃないの?
というのも32bitアプリからは64bitDLLを読み込めないから
だから32bit版の.Netアプリは32bit版.NET Framework上で動くと思うんだけど
(その辺の事情はスレ違いだしよく知らんが)
フレームワーク側、.Net側、管理側が32bitで4Gの壁があるのに、
その制限の中で4G以上のコードのスワップの運用をするの?
そんな実装はありえないと思うんだが

MMUの話が上がっていたが、あれはハードウェアで高速だし、
MMUは物理メモリが足りない場合にスワップする用途だが、
今足りない前提になっているのは論理アドレスの方なわけで
論点がズレてるわな

414 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 13:57:03.37 ID:PT+IC+/U.net]
俺の疑問(302)は解消したよ。
お前らの疑問はあるみたいだし、それについて説明も出来るけど、もう面倒なので止める。
誰か分かる人は回答してやってくれ。

てかお前らもうちょっと他言語も触った方がいいぞ。
Cの世界だけで閉じているから、Cを客観的に見れてないんだよ。


それとは別に、401に対する回答は募集する。

415 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 14:05:36.49 ID:RZYVlzX/.net]
虚勢ばっかりだな

416 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 14:15:49.93 ID:WwQzZTLz.net]
いい加減スレ違いの話は収束して欲しい。

417 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 14:41:30.97 ID:ThaQ2i1X.net]
ブーメランな捨て台詞で終わったな

418 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 16:14:28.65 ID:o5uWY3Fx.net]
>>408
C++はオブジェクト以外の領域をポインターで指すこと自体出来ないんだからわかれよ
int a;
(&a + 1); // undefined behavior

1.7 The C++ memory model
The memory available to a C++ program consists of one or more sequences of contiguous bytes
"sequence"は複数形だぞ

419 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 16:31:50.22 ID:LojobDxZ.net]
そもそも16bitアプリでfarやhugeでそれ以上の領域扱うなんて当たり前だったろうに。
cにもc++にもリニアなメモリ空間という縛りはない。
だいたいポインタが何者かすらその挙動でしか定義されていない。
実装次第でどうにでもなる。

420 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 16:34:20.90 ID:FVa42+rI.net]
>>412
本題とはずれてくるけど、 &a + 1 は undefined じゃないよ。
*(&a + 1) にアクセスしたり &a + 2 すると undefined になる。

421 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 16:34:29.27 ID:nPjcOL1Q.net]
そもそもメモリ空間やリニアうんたらまで考慮してプログラムしなきゃあかんのか。



422 名前:デフォルトの名無しさん [2015/09/22(火) 16:37:24.66 ID:4a3z373J.net]
俺が感じるのは
int a;はaのアドレスの位置を直接番号で示していると思うんだ
int a[10];と書くとアドレスの先頭のアドレスの番号を示していると思うんだ
a=a+1と書くとaは変数ではなく番号だからエラーになるんだと思うよ

423 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 16:40:57.49 ID:BmBfsQQC.net]
>>414
配列じゃないんだけど?

424 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 16:42:13.67 ID:gQIVdZQM.net]
>>416
配列名を示す識別子を,配列要素を指定する[] を伴わずに単独で使用する用法は,特異点にしてC/C++にて一番醜いところ

425 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 16:51:41.05 ID:WExvsg0o.net]
いちいち&a[0]と書けと?
&a[0]のほうが醜いと思うが

426 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 16:59:16.98 ID:PT+IC+/U.net]
>>412
> contiguous bytes
他の言語ではこの必要すらない。
これがリニアって事だよ。

ちなみに君はC以外の言語一つでも使えるかい?
だったらその言語でこの必要があるかを考えてみるといい。

427 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 16:59:35.71 ID:FVa42+rI.net]
>>417
配列じゃないオブジェクトへのポインタ演算のルールは要素数 1 の配列といっしょ。
5.7 [expr.add] p4
> For the purposes of these operators, a pointer to a nonarray object
> behaves the same a

428 名前:s a pointer to the first element of an array of length
> one with the type of the object as its element type.
[]
[ここ壊れてます]

429 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 17:07:12.07 ID:gQIVdZQM.net]
>>419
構造体・クラスの場合は,単独の識別子でアドレスを示すことはないだろう?
それと同じことだ

430 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 17:16:16.72 ID:WExvsg0o.net]
構造体と配列は大きさが違うだろう

431 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 17:30:38.04 ID:RZYVlzX/.net]
>>420
それ実装じゃなくて抽象機械相手のもので
x86の論理アドレスや物理アドレスなどとポインタと同一なんて規定は書いてない
JITにしてでコンパクションしてアドレス変更されようがCは関係ない

お前本当都合が良いと思った事しか答えないな
いい加減どこが決定的な問題なのか説明しなよ

それとずっと逃げてないで
sizeof(void*)が確定的という事についても説明してね



432 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 17:33:33.60 ID:gQIVdZQM.net]
>>423
大きさ?なんの話だ?
struct a { int n1; int n2; int n3; }
int b[3];
どちらも同じ集合体だが a と b で意味するものが違うのは不整合だろう?

433 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 17:38:23.04 ID:RZYVlzX/.net]
つか言語仕様にunsafeとfixed持ってる時点で同類なのにアホなのかなこの人

434 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 17:40:24.63 ID:RZYVlzX/.net]
>>426>>425宛てじゃないからね

435 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 18:22:00.45 ID:WwQzZTLz.net]
>>425
それ、違くない?
struct {int n1; init n2; int n3;} a;
int b[3];
printf("%p",a);
printf("%p",b);
エラーにはならない。

436 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 18:26:29.93 ID:WwQzZTLz.net]
>>428
ごめん、a,bの前に&がいる。

437 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 18:53:37.56 ID:BmBfsQQC.net]
>>421
なるほど、勉強になったわ

438 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 18:59:44.87 ID:PT+IC+/U.net]
>>424
別に逃げているわけではなくて、
今の君の知識範囲では理解できないだろうから諦めたんだよ。
もう既に十分説明している。
俺の疑問は既に解消したのだから、君の突っかかりにいちいち答える必要もない。

君は知っているつもりなんだろうけど、全然分かってない。
元々のブログ(>>295)、以下のくだりは真なんだが、そもそもこれを理解できてないだろ。
> たとえば、32bitのCPU上では、通常のプログラムは、4GBのメモリ空間に制限され、4GB以上のメモリを利用することは非常な困難を伴います。
> ところが、JavaやC#といった言語は、原理上、そのような制限を受けません(バンク切り替えだとか、セグメントだとかの話はあえて無視)。
> あくまでも原理上の話ではあるので、現状がそうなっているわけではないのですが、ポインタといった概念が言語上に出現しないことによって、
> データをメモリ上の番地で表現する必要がないためです。

俺はこの部分の説明をしていただけなんだよ。ただ、君が理解できていないとなると、その前の部分
> C/C++のプログラマの住んでいる世界は、ポインタがあるおかげで、ある意味では、何でも出来るアセンブラの世界ではあるのですが、
> そのことが逆にC/C++プログラマの発想を狭い範囲に閉じこめてしまっていることが多々あります。
> JavaやC#のようなポインタのない世界が実は、
> アセンブラのようなポインタというかアドレスに支配されている世界では想像しにくい新たなパラダイムや手法を与えてくれることもあります。
も真なのかな、とも思えてくる。(個人的にはこの部分はハズレだと思っていた。)


君が無知なままでいるのは君の責任だ。
誰かが君のことを可哀想と思うのなら、いつか教えてくれるかもしれない。
俺はここに認めてもらいに来たわけではなくて、疑問を解消しに来ている。だから用は済んだ。
君が俺のことを誤解するのも君の自由だ。それを修正する必要もない。

ただなあ、とりあえず最初のブログの中身も理解出来ないのにその態度は、痛いよ。
そういうのは止めた方がいい。
傍観している連中の中にも明らかに分かっている奴もいるはずだが、誰も出てこないのはそういうことだよ。

439 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 19:11:33.18 ID:FVa42+rI.net]
>>431
>> ところが、JavaやC#といった言語は、原理上、そのような制限を受けません(バンク切り替えだとか、セグメントだとかの話はあえて無視)。
>> あくまでも原理上の話ではあるので、現状がそうなっているわけではないのですが、ポインタといった概念が言語上に出現しないことによって、
>> データをメモリ上の番地で表現する必要がないためです。

これがポインタの存在によって C や C++ に限っては成り立たないと言われているようだけど、
そんなことはないと思うんだ。

言語上の「ポインタ」を Java や C# の参照と同じように実装することは禁止されちゃいないわけで。
そこらへんわかってて言ってるの?

440 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 19:20:45.42 ID:ThaQ2i1X.net]
>>432
こいつは何言っても解らないよ
可哀想なやつだと思うけど俺は諦めた

441 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 19:23:21.47 ID:39XjsZ/s.net]
毛の壁風の人なんじゃね?



442 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 19:24:45.07 ID:PT+IC+/U.net]
>>432
生ポインタを使えないC言語なんて存在価値がないだろ。

実際それがあったとして、使う奴がいるとも思えないが、
ネイティブコードを吐くJavaが欲しい時に使うのか?

443 名前:432 mailto:sage [2015/09/22(火) 19:26:32.23 ID:FVa42+rI.net]
>>433
そうだね >399 からそう言われてるわけで、説得できるとはあんまり思ってない。
堂々と「以下のくだりは真」というのにツッコミ無しっていうのはマズいだろうと思った。

444 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 19:27:26.06 ID:ThaQ2i1X.net]
ほらなw
Emscriptenとかも知らないんだろう

445 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 19:33:20.20 ID:FVa42+rI.net]
>>435
存在価値の話は関係無いと思うんだ。引用箇所は
>>> あくまでも原理上の話ではあるので、現状がそうなっているわけではないのですが
という話だからね。 C や C++ でも同じことでしょ、と言っている。

446 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 19:34:46.81 ID:PT+IC+/U.net]
>>432
ちなみに禁止されていないのは確かだが、C言語では実現出来ないだろ。
C++で演算子のオーバーロードを基本型にも全部やってラップすれば達成可能な気もするが、
ポインタのところに若干制限があった気がする。(ただこの辺は余り詳しくない)

447 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 19:36:47.03 ID:ThaQ2i1X.net]
>>439
Emscriptenでググれ
生ポインタの扱えないC言語(に限らないけど)だぞ

448 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 19:42:18.38 ID:PT+IC+/U.net]
>>437
いやちょっと待て。実はEmscriptenは使用を検討しようとしていた。
理由は生JavaScriptが色々糞だからで、TypeScriptも検討中だ。

それはEmscripten用の書き方だということか?
ならば確かにその記述方法は妥当だろう。
LLVMからの変換だと思っていたが、それ以前にLLVMに生ポインタコードが出ないようにラップするわけだな。

449 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 19:44:12.61 ID:FVa42+rI.net]
>>439
>385 で言ってた↓の根拠は不明で「ポインタのところに若干制限があった気がする。(ただこの辺は余り詳しくない)」ということでいいかな?
> C/C++はメモリモデルがフラットで、リニアにアクセスできる前提だ。(ポインタは常にアクセス可能)
> だから4GBの壁が直接見える。

なんかはっきりした根拠を思い出したら教えて欲しい。

450 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 19:58:38.83 ID:39XjsZ/s.net]
いやもう、彼の頭をデバッグするのバカらしいし、やめようよ

451 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 19:58:39.53 ID:PT+IC+/U.net]
>>438
それは繰り返しにしかならないが、以下の通り。

原理的な話なら、抽象化された変数領域しか持たない言語(C#,Java)では、アドレスというものがそもそも見えない。
だから、4GBの壁がそもそもユーザーに見えない。
これに対して、C/C++では4GBの壁がユーザーに丸見えだ。

>>432のように、ポインタをユーザーがラップして全てint**とかにした場合、それは「ユーザーがそう記述した」という。---(A)
そうではなくて、ユーザーが通常通り int* のまま使っていて、
それをコンパイラだけで int* のネイティブにするのか、int** のJava的参照ポインタにするのかをコンパイルオプションで切り換えられるのなら、 ---(B)
それは「コンパイラで4GBの壁を越えた」という。
いずれにしても、C/C++言語自体で4GBの壁を越えたというのは言い過ぎだ。

ところで、Emscriptenは(B)のどちらなのか、知っていたら教えてくれ。
(ユーザ側で int** と意識して書く必要があるのか、
もしかしてユーザーは int* のままで書いてもEmscriptenが int** に完全に変換できるのか)



452 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 19:59:56.93 ID:39XjsZ/s.net]
この感じ、知っている人は知っている、毛の壁臭

453 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 20:06:26.45 ID:PT+IC+/U.net]
>>442
違う。

> ポインタのところに若干制限があった気がする。
演算子のオーバーライドは俺は使ってないので詳しくないのだが、
最近読み直した「プログラミング言語C++」には11.2.3に(第3版ならP317)
> 特に、ポインタだけを操作する演算子関数は定義できないことに注意して頂きたい。
とあって、この件について本の中で別に説明されていたのだが、今見ても該当部分がすぐには出てこないということ。
たしかC言語との互換性を保つために、ポインタ演算子については自由に上書きできない部分があったはず。

> C/C++はメモリモデルがフラットで、リニアにアクセスできる前提だ。(ポインタは常にアクセス可能)
> だから4GBの壁が直接見える。
根拠も何も、そのまんまだ。

逆に聞いてみよう。
君はC#が使えるみたいだが、C#のマネージドコードだけの世界で、4GBの壁を意識することはあったかい?
無いだろ。そういうことだよ。

454 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 20:14:07.69 ID:FVa42+rI.net]
>>444
> これに対して、C/C++では4GBの壁がユーザーに丸見えだ。
これも「気がする」かな。断言するなら根拠をはっきり示せることを確認してね。

> いずれにしても、C/C++言語自体で4GBの壁を越えたというのは言い過ぎだ。
だれもそんなことは言ってないと思うんだ。

「C/C++では4GBの壁がユーザーに丸見えだ」などという人が一人いるので、それは
言い過ぎだと言っている。

>>446
「演算子が上書きできない」→「4GBの壁」っていうつながりがあると思ってるのか。

ループ気味になってきたし、ここまでの書き込みをちゃんと読んで理解しようとしてくれていれば
この流れでそんなこと言えるわけが無いと思うんで、僕もそろそろ降りさせてもらうよ。

455 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 20:21:17.81 ID:PT+IC+/U.net]
>>447
> これも「気がする」かな。断言するなら根拠をはっきり示せることを確認してね。
いや見えてるだろ明らかに。
void*が32bit環境では4GBまでしか表せない。だから4GBの壁が見える。
C#やJavaにはこれがない。それだけの話だよ。

> 「演算子が上書きできない」→「4GBの壁」っていうつながりがあると思ってるのか。
あるだろ。というか言い出したのはそちらだが。
4GBの壁は変数領域が抽象化されていないから見える。
だから、int**にして抽象化すれば直接は見えなくなる。
これがC#やJavaで4GBの壁が見えない理由そのものだ。ブログ主もこの観点で言っている。


まあいいよ。完全にループだし、君の論法もループしている。
降りで了解だ。こちらもその方が助かる。

それはそうとEmscriptenの情報があればよろしく。

456 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 20:30:45.91 ID:39XjsZ/s.net]
何かっこつけてんだよ、初心者の癖に

457 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 21:15:01.03 ID:ozShReaP.net]
クサカベは知ってるけど
毛の何とかは知らないなあ

458 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 21:58:18.19 ID:PT+IC+/U.net]
>>444,448
スレチだが自己解決した。
生ポインタはTypedArrayにマッピングされるようだ。
まあ、冷静に考えれば当然だった。

459 名前:デフォルトの名無しさん [2015/09/22(火) 22:12:42.50 ID:hQ0EouVl.net]
4GBの壁か。
配列を使う場合など、データサイズの上限なんかは
何言語であろうと普通に何らかの了解のもとに使っているよなあ。
C++ みたいにsizeof(void*)がはっきりしてれば自明の理として納得いくが、
そうでない言語では怪しげなご託宣に従うしかないという
理詰めな性格の人には優しくない話だよね。

460 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 23:39:14.16 ID:PT+IC+/U.net]
むしろ俺は話の通じなさにびっくりだったわ。
32bit環境でのC言語で4GBの壁が見えるのは自明でしかない。
それを見えないと言われても頭おかしいとしか思えない。 >>447

マジでお前らは他言語少しでも触った方がいい。
完全に盲目になっている。

461 名前:412 mailto:sage [2015/09/22(火) 23:51:24.00 ID:7b9YUjXM.net]
むしろ
わざわざ>>412で『"sequence"は複数形だぞ』
って書いてやったのに目に入らない盲目にびっくりだわ



462 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 23:55:40.08 ID:PT+IC+/U.net]
>>454
いやそこは関係ないんだよ。

ちなみに君もC/C++しかできないのか?
ちょっとマジで他言語、何でもいいからやってみた方がいい。

463 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 23:57:25.78 ID:LojobDxZ.net]
特定の処理系でvoid*が32bitという話でしかない
まあ、それで99.9%困らないからcpuの機能に薄い皮被せて見せているだけのはなし

16bit時代にhugeやfarでそれ以上にアクセス出来るようにしてあったのは、それですまないほど不便だったから

cやc++はの扱うcpuはハーバードだったり1ワード16bitがアドレスの指し示す最小単位だったりとなんでもあり

464 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 00:02:54.19 ID:M/UFFhhb.net]
32bitで表現できるポインタが4GBまでだが、仮に1アドレスが4バイトでも良いんじゃないかとも思った。
文字列は2文字ないし4文字でワンセットになるけど

465 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 00:07:22.49 ID:Q8fOJWKp.net]
>>453
「32bit環境でのC言語で4GBの壁が見える」が言えるのと同じように
「参照を32bitアドレスで表現しているJava/C#処理系では4GBの壁が見える」とも言える
・・・んじゃないの?

466 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 00:15:57.36 ID:qfkgp73Y.net]
バカに物事を理解させるのって本当に大変だね
教師には頭が下がるよ
俺にこんなバカで尊大な生徒が居たら無視していじめ問題とかになってるわ

467 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 00:24:11.18 ID:MwhyHk4V.net]
>>458
それはその通り。
ただ、参照自体のサイズをユーザーが関知する必要がない。(ソースコードに現れない)
そこが決定的に違う。
だから、処理系が勝手に64bit参照にしていたとしても、同じソースコードがそのまま動くことになる。

ただ悪いが、この件に関して俺がいちいち回答する必要はマジでない。
俺が言っているのは本当に自明なことばかりであるし、君達も少し他言語をかじるだけで分かる話だ。

468 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 00:28:22.82 ID:nPFFi/Oi.net]
ほうほう、C++だとポインターのサイズがソースコード上に現れて同じソースが使えないのですか
もちろんポインターのビットイメージを操作する場合を除いてですが

469 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 00:33:24.68 ID:qfkgp73Y.net]
>>461
わざわざコードを書くときにポインタのサイズを意識して同じソースコードで動くように書かないんだろうよ
無能な働き者ってやつだ

470 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 00:51:40.95 ID:KSDSHGp7.net]
staticの意味すら知らなかったんだからC/C++をろくに知らないんだろう。
JavaやC#ですら思い込みによる間違った認識に囚われていた。
ISO/IEC 14882:2014と言われてどのNxxxxかと尋ねるあたりは勘違いのしやすさを象徴していたな。
それでこの態度だから、まわりもろくに間違いを指摘してくれないんだろう。かわいそうに。

471 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 00:52:34.21 ID:MwhyHk4V.net]
悪いがいちいち面倒なので、アホレスしたIDはそれ以降無視することにするよ。
とりあえず現在の無視対象は ID:nPFFi/Oi, ID:qfkgp73Y

マジでお前ら他言語触った方がいい。

そもそも他言語ではアドレス自体を取れないことが多い。
次に、取れたとしてもキャストできなかったりする。
だから、どうやっても sizeof(void*) 依存のコードを記述できない言語の方が多い。

C言語において無理なキャストをしなければ void* のサイズはコンパイラが自動的に判断して確保してくれる。
結果、32bitと64bitで同じコードが動く。
これはID:nPFFi/Oi, ID:qfkgp73Yみたいな馬鹿でも知っている、当たり前の話だ。

ただこれはユーザーがちゃんとそう記述したことを保証しなければならない。つまり、ユーザー依存だ。
上記のように、そもそもアドレスを取れない言語では、ユーザーがどうやっても sizeof(void*) 依存のコードを記述できない。
だからそもそも 32bit とか 64bit とか気にする必要もない。ここが決定的に違う。

何度も言うけど、お前ら本当に他言語を少しでも触った方がいい。



472 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 00:58:25.97 ID:nPFFi/Oi.net]
そういやVisual Basic 6.0って文字列のアドレス取れたし
ビット数依存の糞コードが散乱していたな

473 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 01:04:51.91 ID:qfkgp73Y.net]
>>463
思い込みの塊みたいなやつだから周りが指摘しても意味が無いんだろ
それはここで証明されてるじゃないか

指摘すると思い込み一つ増えたみたいだしね。
ここの住人が他の言語を触ったことがないって

474 名前:デフォルトの名無しさん [2015/09/23(水) 01:05:07.72 ID:AnQ6XBDy.net]
アドレスを扱えるのは機能性の一つであって欠点ではないよ?

475 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 01:06:11.71 ID:i5QbssGO.net]
なんか時々現れるよな
新手のキチガイが

476 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 01:08:10.92 ID:qfkgp73Y.net]
>>467
場合によっては欠点になるよ
上にも書いたけど無能な働き者によって他の環境で動かなくなる

477 名前:デフォルトの名無しさん [2015/09/23(水) 01:13:44.76 ID:AnQ6XBDy.net]
そりゃ書いたとおりにしか動かないでしょ。

478 名前:デフォルトの名無しさん [2015/09/23(水) 01:16:15.46 ID:AnQ6XBDy.net]
1+1を間違えて1+2と書く恐れがあるから+演算子を無くすべき!とか言ったって仕方ないよ。

479 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 01:21:28.78 ID:MwhyHk4V.net]
>>467
もちろんその通り。
生ポインタを扱えることこそがCの最大の特徴であり、それをやらないのならCを使う意味はほぼ無い。

ただ生ポインタってのは実際は両刃の剣で、生ポインタさえなければ色々なことが単純になるんだよ。
そこは元のブログにも書かれているし、もっと他にも色々ある。
結果、Java作者はない方がいいと思ったから廃止したし、
C#作者は無いと困るがふんだんに使われても困るということで例外的使用に留めている。

ただまあ、本当にここら辺は一般論で、別に俺がわざわざここで言い直す必要もなく、
他でもさんざん言われていることだ。あのブログの中でも然り。
そしてそう思う奴も覆いから他言語も賑わっているわけで。

てゆうかもういいっすかね。特に俺である必要ないはずだし。

480 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 01:23:01.21 ID:0mJKXhs3.net]
いや、皆がお前だけ消えてくれることをのぞんでるぞ

481 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 01:23:53.95 ID:v0Nc4YZQ.net]
>>472
うん、もういいよ
お前の代わりは居ないけど要らないから



482 名前:デフォルトの名無しさん [2015/09/23(水) 01:28:45.41 ID:AnQ6XBDy.net]
今はどの環境でもリークをチェックできるし困ることは何もないけどなあ。
後始末の必要なリソースはメモリーに限らないので、メモリー管理によって鍛えられた
C++戦士は凄腕プログラマへの近道。

483 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 01:31:43.38 ID:nPFFi/Oi.net]
>メモリー管理によって鍛えられた
>C++戦士は凄腕プログラマへの近道

もうC++を使わないで下さいね他人がきっと迷惑してます

484 名前:デフォルトの名無しさん [2015/09/23(水) 01:32:57.44 ID:AnQ6XBDy.net]
>>476
なるほど、キミはバトルプログラマーを知らないんだね?

485 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 01:38:23.42 ID:M/UFFhhb.net]
最近はスキルが有効かどうかが環境より言語に左右されるような気がする。

486 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 01:45:30.10 ID:iC4K+Xaq.net]
>>472
>結果、Java作者はない方がいいと思ったから廃止したし、
Java8で復活した部分がある,C++ では ->*, ::* で扱うポインタ
Java での呼び名:メソッド参照

peace.2ch.net/test/read.cgi/tech/1434079972/12

487 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 01:49:55.57 ID:nPFFi/Oi.net]
危険を伴う有用な機能を具備することのリスクが
説明を受けても理解できない低能はどうしようもないな
だから>>479みたいなとんちんかんなレスをするんだろう

488 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 01:55:54.98 ID:IndlIx5T.net]
散々論破されてるのに悪いと思わない時点でただのキチガイだろ

489 名前:デフォルトの名無しさん [2015/09/23(水) 01:58:32.17 ID:AnQ6XBDy.net]
はあ、また論破してしまった。
やはりC++は最強だな。

490 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 02:02:23.55 ID:IndlIx5T.net]
>>464
>そもそも他言語ではアドレス自体を取れないことが多い。
>次に、取れたとしてもキャストできなかったりする。
>だから、どうやっても sizeof(void*) 依存のコードを記述できない言語の方が多い。
君の大好きなC#はポインタもsizeofも取れるよ
君は他言語を触る前にC#について勉強しなさい

491 名前:デフォルトの名無しさん [2015/09/23(水) 02:04:33.69 ID:AnQ6XBDy.net]
しかし今日の敵は弱かったな。
今までで最弱じゃないか?



492 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 02:12:08.91 ID:MwhyHk4V.net]
>>479
これか?
qiita.com/pepepe/items/3d810e1bbed25768caa0
これは危険なタイプの生ポインタではないんだ。だから問題ない。

493 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 02:12:34.07 ID:qfkgp73Y.net]
最初は32bit環境で4GB越えのバイナリを実行できる
CやC++は出来ない

だったはずなのに、指摘されても誤りを認めず最後の方には

参照が32bitであることを関知する必要がない

に変わってた。

494 名前:デフォルトの名無しさん [2015/09/23(水) 02:18:39.97 ID:AnQ6XBDy.net]
C/C++で出来ないことはレジスタをいじること。
他は何でもできるから。

わかったらもうケンカ売ってくるなよw

495 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 02:51:39.64 ID:iC4K+Xaq.net]
キャリーフラグは触れてほしかったね‥
キャリーの読み込み,書き出しをしたいんだ
インラインだと後で最適化という介入があって心配だ

496 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 05:09:46.93 ID:DOrhv1Zg.net]
>>448
> void*が32bit環境では4GBまでしか表せない。

この時点でなにもわかってないことがバレバレじゃん w

497 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 05:12:56.52 ID:sl1FEDPC.net]
>>487
インラインアセンブラはダメか

498 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 06:12:19.83 ID:kDaXs3BE.net]
メモリマップドレジスタみたいに環境によっては弄れるよね

499 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 11:53:18.53 ID:dAcDykGY.net]
>>490
ありゃ規格の範囲外だからな。
gcc に慣れすぎて、他の使うとつらい。

>>491
I/Oレジスタじゃなくて、CPU のレジスタの話じゃないかな?

500 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 13:59:22.37 ID:DOrhv1Zg.net]
>>491
レジスタは読むだけでフラグリセットしたり複数回読むと違う値になったりする奴があるから高級言語で読み書きするのはちょっと怖い

>>492
どこまでを CPU レジスタって言うかによる

501 名前:デフォルトの名無しさん [2015/09/23(水) 20:23:32.33 ID:VRhTdQAB.net]
メモリマップドI/Oではなく、
メモリマップドレジスタね
制御記憶が主記憶空間にマッピングされているという



502 名前:デフォルトの名無しさん mailto:sagete [2015/09/23(水) 20:32:04.80 ID:1jqGrEyR.net]
2Dゲーム当たり判定総合 [転載禁止]c2ch.net
peace.2ch.net/test/read.cgi/tech/1442990347/

503 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 20:43:11.41 ID:3ci5dXPK.net]
0ページレジスタもね

504 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2015/09/23(水) 20:54:04.93 ID:KfupEJ55.net]
△ マップド
D マップト

505 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 21:07:34.84 ID:D/ibv0yF.net]
クソコテは日本語もマトモに書けないのか

506 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2015/09/23(水) 21:15:35.76 ID:KfupEJ55.net]
>>498
添削の時間は限られている。まる、ばつ、さんかくだけで採点できる。

507 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 22:20:05.97 ID:lyPqrQHB.net]
>>499
添削?採点?
突然何を言い出すのですか。頭は大丈夫ですか。
それにまるばつさんかく以外の記号が書かれているようです。

508 名前:デフォルトの名無しさん mailto:sage [2015/09/24(木) 01:42:54.1 ]
[ここ壊れてます]

509 名前:3 ID:/TjFSMYs.net mailto: 基地外が新たな基地外を呼び寄せるカオスなスレ []
[ここ壊れてます]

510 名前:デフォルトの名無しさん [2015/09/24(木) 22:11:32.00 ID:O8aOI61G.net]
初期化子でthisを渡すと警告が出ていたと思うんだけど、いつの日からか出なくなった。
どこかの時点で規格が変わったの?

511 名前:デフォルトの名無しさん mailto:sage [2015/09/24(木) 23:09:55.66 ID:y5NlXAUf.net]
>>502
普通のコンパイラーでは
警告と規格は関係ありません



512 名前:デフォルトの名無しさん [2015/09/25(金) 00:05:04.36 ID:WA9ffgJV.net]
もしかしてthisへの代入があった
ごく初期のC++のことか?

513 名前:デフォルトの名無しさん mailto:sage [2015/09/25(金) 01:39:59.76 ID:hOC+hAXG.net]
>>502
これ?
https://msdn.microsoft.com/en-us/library/3c594ae3.aspx
> 'this' : used in base member initializer list
...
> This warning is off by default. ...






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<258KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef