18/07/01 03:44:53.53 4MMF8cDN.net
エスケープシーケンスやWin32APIなどの環境依存なものもOK
そのような質問は必ず環境を書きましょう
半角空白やタブでのインデントはスレに貼ると無くなります
コードを貼れる所
URLリンク(codepad.org)
URLリンク(ideone.com)
前スレ
【初心者歓迎】C/C++室 Ver.102【環境依存OK】
スレリンク(tech板)
2:デフォルトの名無しさん
18/07/01 05:02:07.56 FOGWQSv4.net
こんばんは。質問です。
Win32APIで現在OSが再生中の音声の値を取得する方法を教えてください。
その瞬間の値をLR各1個取れればいいですが、ある程度連続的に配列に取り込めるほうがベターです。
スペクトラムアナライザを作ろうと思います。
Windows10/Visual Studio 2017/ C or C++です。
3:デフォルトの名無しさん
18/07/01 18:40:59.30 pYjHbPeQ.net
sqrt(2.0);
sqrt((double)2);
後者の俺はおかしいですか
4:デフォルトの名無しさん
18/07/01 21:50:22.05 mDZv4OK3.net
うん
それ以前に定数にsqrt()なんて使う時点で
5:デフォルトの名無しさん
18/07/01 21:54:36.84 Z8xp56Jv.net
もしかして、実行時刻や国によって計算結果が異なるのかも知れない
あるいは、希に発生する宇宙線の影響を検出したいという意図が有るのかもしれない
あるいは実行環境のバグを検出しその後の処理を切り替えたいとか
6:デフォルトの名無しさん
18/07/01 23:13:23.96 /Pcja9c+.net
正確に√2とか√3を定数で持つにはどうしたらいい?
7:デフォルトの名無しさん
18/07/01 23:32:19.32 lS5AQxvk.net
>>6
そもそも浮動小数点数で無理数を正確に表すこと自体が不可能だけど、どこまでの精度を求めてるの?
8:デフォルトの名無しさん
18/07/02 00:05:20.60 Y9X1m4Hz.net
有理数を使えば良いじゃね?
9:デフォルトの名無しさん
18/07/02 00:31:58.87 TNHgdEjE.net
>>7
sqrt呼ぶのと同精度でいいよ
10:デフォルトの名無しさん
18/07/02 01:18:41.69 3LeesGvV.net
√2と√2をかけ合わせたらちょうど2を返す無理数クラスなら作れそう
すでにありそう
素因数分解が必要そうだから結構面倒になるかな?
11:デフォルトの名無しさん
18/07/02 07:01:13.71 tvgYkj/r.net
無理数というか、冪の底と指数をそれぞれ有理数で持つ、
という形式ならいけそうだな。
有理数クラスの約分に相当する処理を自動的にやらせる感じ。
12:デフォルトの名無しさん
18/07/02 09:17:09.45 yNy9eqPr.net
>>4
>>7
3じゃないけど、定数でsqrt呼ぶのがだめというだら、代案を示してほしい。
13:デフォルトの名無しさん
18/07/02 20:49:02.70 T8iPgZJX.net
#define SQRT2 1.414213...(必要な桁)
で充分だよ
14:デフォルトの名無しさん
18/07/02 22:00:31.27 ZEcRd/bU.net
そこはせめて
static const double SQRT2 = 1.414213...(必要な桁)
にしようよ…
15:デフォルトの名無しさん
18/07/04 21:59:31.57 gFgZc5FG.net
18Z
16:デフォルトの名無しさん
18/07/05 12:54:37.46 u9CJaon8.net
vcのcl.exeでc書いてるんだが、20億バイトのmallocがnull返します。
何とかなりませんか?
17:デフォルトの名無しさん
18/07/05 13:05:53.34 I27lRIcu.net
>>16
64bitでコンパイルされたし
18:はちみつ餃子
18/07/05 14:58:16.26 l9X7uzb+.net
実メモリが載ってなきゃ意味ないぽよ。 とマジレス。
まあ今どきはそういうデスクトップマシンも無くはないけど……。
19:デフォルトの名無しさん
18/07/05 15:06:00.77 ppxwAApK.net
(vc ってあるから Windows 前提で)
malloc のアロケーターの実装とセットになって
OS がよきに計らってくれないものなのかな
20:デフォルトの名無しさん
18/07/05 15:43:13.14 I5nj7cYg.net
20億バイトって約2GB、31bitで表せる範囲ではあるのか。
プロセスあたりメモリ2GBの制限に引っかかってるのかな。
この20億バイトのmallocの他にもメモリを使っててトータル不足とか。
プロセスで使えるメモリを3GBにする設定とかあるんだっけ。
あとはOSを64bitにするか。
21:はちみつ餃子
18/07/05 18:08:24.53 l9X7uzb+.net
あ、 20 億ってたったの 2GB か。
でもまあメモリ空間が足りないとどうしようもないよな。
22:デフォルトの名無しさん
18/07/05 18:41:17.96 HIMx+eV5.net
そらプロセス起動してんだから
mallocでプラス2GBとか普通は32bitじゃ無理
23:デフォルトの名無しさん
18/07/05 19:23:00.99 I5nj7cYg.net
実際にやったわけじゃないけど、軽く調べたところ、
32bitのWindows上のプロセスで2GBより大きなメモリを使うためには…
・OSの動作モードを「カーネルで1GB, プロセスで3GB」のメモリ配分に変更
・リンク時にオプション /LARGEADDRESSAWARE を指定
…という具合に、動作環境と実行ファイルの両方での対処が必要みたい。
さらに加えると、Win32APIの HeapAlloc() を使わないとダメかも。
これはライブラリの malloc() がどう実装されてるかによるが。
24:デフォルトの名無しさん
18/07/05 21:08:35.41 IGtLSuPP.net
64bitでコンパイルしたらいけますた。
25:デフォルトの名無しさん
18/07/06 18:04:52.14 zA1tf/7d.net
>>24
それは良かったでちゅね
良いこ良いこ
26:デフォルトの名無しさん
18/07/06 18:42:29.85 .net
for( a : コンテナ)ってしたときのアクセスは内部的にどうなってるんですか?
①コンテナのat(size_t)を呼び出している
②コンテナにイテレータがあればイテレータ
③コンテナにイテレータがなくat(size_t)があればat
27:デフォルトの名無しさん
18/07/06 19:28:48.49 cmD7yKAf.net
生配列の場合は*<配列のポインタ>、
コンテナ.begin()が定義されていれば*<コンテナ.begin()が返却するもの>、
そうでなければ*<std::begin(コンテナ)が返却するもの>
で要素アクセスする。
at()はオーバーヘッドがあるので、forに限らず、将来的にもコンパイラが知らぬうちに呼びだすことはないと思うよ。
28:デフォルトの名無しさん
18/07/06 19:39:02.31 .net
atしかなかった場合は!?
29:デフォルトの名無しさん
18/07/06 20:28:34.00 cmD7yKAf.net
コンパイルしてみろ。答えは3秒で分かる。
30:はちみつ餃子
18/07/06 21:43:33.68 G+eTHi8Q.net
>>26
begin 関数と end 関数で帰ってくるイテレータで繰り返すようになってる。
標準ライブラリにあるコンテナの場合は std::begin と std::end が適用されて、
これは基本的にはそれぞれのコンテナのメンバ関数 begin と end をそのまま呼び出すが、
配列などのために特殊化した版が用意されている。
自分が独自に作ったコンテナを range based for に対応させたい場合は、
メンバ関数として begin と end を持っておけば std::begin と std::end 経由でそれが呼び出されるし、
非メンバ関数としてそのコンテナの型を受け取れる begin 関数と end 関数を用意してもよい。
どの名前空間にある begin 関数と end 関数が呼び出されるかは ADL で解決されるんだが、
このあたりの理屈は面倒なんで ADL をキーワードにしてググって。
独自に用意したコンテナについて、やりたければ at を呼び出すように作ることはもちろん出来るよ。
既存のコンテナについても、 std::begin と std::end を特殊化すれば、現実には挙動を変えられたりもするが、
std 名前空間にある関数をオーバーロードすることは禁止されていて、
std 名前空間内のテンプレート関数の特殊化も (全面的に禁止ではないが) 制約があるので、
規格の範囲内ではカスタマイズすることは出来ないと考えて良い。
31:デフォルトの名無しさん
18/07/06 22:06:07.41 .net
>>30
詳しい情報サンクス
32:デフォルトの名無しさん
18/07/06 23:15:55.05 4kvIcx8n.net
>>28
あっと驚く
33:デフォルトの名無しさん
18/07/07 14:03:43.69 0Eyv8LqD.net
ストラウストラップのプログラミング言語C++を読んでいるのですが、
auto を使えとか、
int a = 1;
よりも
int a {1};
のほうがいいだとか、書いてありますが、本当にこれにしたがったほうがいいのでしょうか?
他の本とスタイルが違うように思います。
34:デフォルトの名無しさん
18/07/07 14:47:52.08 cKmJS2is.net
いいよ。
35:問題ない。 c++11以降はそっちが推奨。 ただ会社で使うと周りがついてこれないから直せと言われるかもしれない。
36:デフォルトの名無しさん
18/07/07 14:59:47.53 0Eyv8LqD.net
>>34
ありがとうございました。
37:デフォルトの名無しさん
18/07/07 15:18:56.50 kLxolQc6.net
ITドカタになりたいなら
現場のコーディング規約に従いなさい
ドカタになりたいのにドカタのオキテに従わないのよくない
ドカタにしばかれるぞ
38:デフォルトの名無しさん
18/07/07 17:06:51.18 n3/QBjsU.net
土方になりたいやつはJSやれ
39:デフォルトの名無しさん
18/07/07 18:24:29.21 ZyYEp/bp.net
整数の宣言時の初期化はどう書くのがオヌヌメなん?
int a = 100;
int b(200);
int c{300};
俺は昔はaで統一してて最近はbに統一してるけど、なんとなく
40:デフォルトの名無しさん
18/07/07 19:03:20.75 .net
三行目から初期化という強い意志を感じる
41:デフォルトの名無しさん
18/07/07 19:16:59.45 jTEKSr/V.net
>>38
『プログラミング言語C++』第4版ではc{300}の書き方をオヌヌメしてる。
(p.168 6.3.5 初期化)
C++11以降でないと使えないのが欠点だって。
42:デフォルトの名無しさん
18/07/07 20:05:35.82 ZyYEp/bp.net
>>39
とんくすこ
勉強になりました
43:デフォルトの名無しさん
18/07/07 20:06:57.40 ZyYEp/bp.net
×>>39
○>>39-40
44:デフォルトの名無しさん
18/07/08 05:39:41.64 eeyKvEjW.net
てす
45:デフォルトの名無しさん
18/07/13 19:58:04.79 Tk69mgcl.net
ASCIIコードのエスケープ文字列を変換してくれる標準関数ってなかったっけ?
2文字の "\n" を 1文字の 0x0a に変換してくれるような
46:デフォルトの名無しさん
18/07/13 20:32:11.29 xmTV0Hfm.net
寝言は寝てから言え
47:はちみつ餃子
18/07/13 20:46:29.95 dep+wTpc.net
>>44
無い。
48:デフォルトの名無しさん
18/07/13 22:01:52.96 gLGTmgps.net
\nは1文字だぞ、と何故教えてやらないのか
49:デフォルトの名無しさん
18/07/13 22:11:34.91 Da3sJv8m.net
ソース中の \n はプリプロセッサが変換してくれるけど
標準入力とかの外部入力から \ n (0x5c 0x6e) を渡して
それが 0x0d になって欲しいんじゃないの?
50:デフォルトの名無しさん
18/07/13 22:16:42.49 Tk69mgcl.net
>>47 コマンドラインから "\n" て与えるとコード上の "\\n" 相当になる
わかりにくくてすまん
>>46 やっぱ無いのか。サンクス
51:デフォルトの名無しさん
18/07/13 22:18:40.10 7IjJ2GkE.net
>>44
sprintfに渡したらいかんのか?
52:デフォルトの名無しさん
18/07/13 22:20:13.96 Da3sJv8m.net
あうち 0x0a だった
いずれにしろ標準関数にはないね
53:デフォルトの名無しさん
18/07/13 22:20:23.02 7IjJ2GkE.net
ごめん、その変換はコンパイラの仕事か。
54:デフォルトの名無しさん
18/07/20 11:04:37.70 o8SFlR7J.net
ロベールの本を読んでいます。
メンバ関数ポインタについて質問です。
int (*Calculator::mfp)();
int (Calculator::*mfp)();
のどちらが正しいかという話が書いてあります。
「
あとは「どこに」つけ足すかですが、これは簡単に考えると2種類考えられます。
int (*Calculator::mfp)();
int (Calculator::*mfp)();
しかし、静的メンバ変数として普通の関数ポインタを作った場合を考えると、前者
では問題があることが分かります。
typedef を使わず静的メンバ変数として普通の関数ポインタを作ると次のようになります。
class Calculator {
public:
static int (*mfp)();
};
int (*Calculator::mfp)();
静的メンバ変数の実態を定義する時には変数名の前に Calculator:: をつける必要があります。
しかし、もし前者の宣言法が正しいのであれば、この静的メンバ変数の実体定義と区別
がつきません。これでは困りますね。
ということで、後者の宣言法が正しいと推測されます。
」
55:デフォルトの名無しさん
18/07/20 11:05:07.69 o8SFlR7J.net
何が言いたいのか分かりません。
56:デフォルトの名無しさん
18/07/20 13:06:45.69 JusE3miR.net
質問は何?
57:デフォルトの名無しさん
18/07/20 13:09:16.56 IRIYugXE.net
メンバ関数ポインタの*つける場所、みんな迷っちゃうよね?ね?
でも心配しなくていいよ!
だって先頭に*付けたらstaticなメンバ関数ポインタの実体定義とグローバル変数として定義したメンバ関数ポインタが区別つかなくなっちゃうじゃん?
だからどこに付けるか分からなくなっても推測できるから安心だよ!ラッキー!
ってことじゃね?
(俺はググるけど)
58:デフォルトの名無しさん
18/07/20 15:13:15.86 E9KpD2Uv.net
型名 (*{名前}opt)(引数) と来たら関数ポインタ
型名 (クラス名::*{名前}opt) と来たらメンバ関数ポインタと
馬鹿の一つ覚えで認識しているのでこれ以上ややこしくされると困るわ
59:デフォルトの名無しさん
18/07/20 16:22:28.53 bI1d2ZJ+.net
(this の渡り方とか不安で メンバ関数のポインタは使わずに
this を引数にする普通の関数のポインタを使っちゃう)
60:
18/07/21 00:44:08.31 w9jgnsOk.net
>>53
>int (*Calculator::mfp)();
これは、mfp は普通の関数(static メンバ関数=メソッド)のポインタ、int (*f)() と同じもの
>int (Calculator::*mfp)();
::*
->*
という演算子が別途存在する、と覚えておく
::*
->*
の使い方は、
スレリンク(tech板:39番)
61:
18/07/21 02:16:26.46 w9jgnsOk.net
>>59
訂正します
「=メソッド」は削除してください、これは間違いですね
static メンバ関数は、this を必要としない(普通の)関数
::*, ->* は「インスタンスメソッド」に使います
62:デフォルトの名無しさん
18/07/21 06:53:52.36 d0oYLoM2.net
>>59
実際別の演算子だし
使いどころも少ないので
どちらか迷うなんてことは今まで考えたこともないんだけど
ロベールさんは迷う事がよくあるってことなのかな?
63:デフォルトの名無しさん
18/07/21 13:29:03.35 Peen6N8v.net
コンピュータの基礎的なことを勉強するのに、
以下の本から読むというのはどうでしょうか?
その後、コンピュータアーキテクチャの本や
OSやコンパイラの本を読むというプランは
どうでしょうか?
低レベルプログラミング
Igor Zhirkov
固定リンク: URLリンク(amzn.asia)
64:デフォルトの名無しさん
18/07/21 13:42:14.57 4IUwGiL2.net
どうせなら、FPGAでCPUから作るところからすれば良いぞ
65:デフォルトの名無しさん
18/07/21 16:21:26.53 WquU7epQ.net
>>59
頭悪いんだから偉そうに書くなやwww
66:デフォルトの名無しさん
18/07/21 20:22:42.36 Peen6N8v.net
ロベールの本って細かいことが書いてありますが、それらは本当に重要なんですか?
柴田望洋訳のC++とどっちがいいですか?
67:デフォルトの名無しさん
18/07/21 20:23:27.52 Peen6N8v.net
>>63
工作など面倒なことはしたくないです。
68:
18/07/21 21:24:02.77 vWALYQin.net
>>64
C/C++ スレを粘着の侵略から守るため、必死で闘った。
しかしそれが正義などではなく、太古の昔から繰り返されてきた煽りあいの歴史をなぞっているだけである事もよく知っていた。
哀しかったよ。いや、馬鹿になった事がじゃない。C/C++ を勉強した事がだ。C/C++ は破産するまで終わらないゲームなのだ。
たぶん間抜けな猿が始めたに違いない。
fj へ戻れだと?道は一本きりではないか。
大切なのは自分の立場を見つける
69:ことだ。そこで何を煽るべきか何を煽るべきでないかを考える。 本物の目玉は鼻の上についている一組分、それだけだ。 そこから見てみろ、なにが見える?
70:デフォルトの名無しさん
18/07/21 21:42:47.68 Peen6N8v.net
ロベールの本を見ていると、C++って色々と文法面で無理をしているなと思います。
71:デフォルトの名無しさん
18/07/23 04:06:23.52 4YnpLRT9.net
C++の初心者スレってここであってますか。
改行に使うのって <<endl;で覚えて問題ないですか?
以前入門書を買ってその時は読んでる本が難しすぎて勉強自体やめてしまったんですが
先程ロベールの入門書を買ってきて始めたんですが、以前読んだ本には\nと書いてあった気がします。(うろ覚え)
どっち使っても変わらないですか
72:デフォルトの名無しさん
18/07/23 07:12:10.11 E4iT+hCc.net
そんなの理解出来ないなら、ローベルの入門書なんて捨てろ
73:デフォルトの名無しさん
18/07/23 07:34:33.78 4YnpLRT9.net
\nとendlの違いは今読んでる範囲では全く説明されてないんですが。
他にC++初心者スレあったら誘導お願いします><
74:デフォルトの名無しさん
18/07/23 08:26:35.80 zCHmFbX3.net
>>71
ロベールの本で "\n" と std::endl の違いは説明されています。
75:デフォルトの名無しさん
18/07/23 18:40:36.42 4YnpLRT9.net
ほんとですか?
今読んでる限りでは特に説明がないような・・・
始めたばかりなので当然最後まで読んではいませんが後のほうのページで説明されてるんですかね
76:デフォルトの名無しさん
18/07/23 21:38:57.78 s5U2uI/C.net
>>69
\nは文字としての改行コード
endlは改行込みで且つバッファを即空になるまで書き出す命令
イメージとしては\nを読み込んだ時に呼び出される改行処理を直で呼び、且つflushも呼び出します
\nだけではflushが起こらずただバッファに\nという1バイトが入るだけ
何が違うのだろうか? それはいきなりアプリが落ちた時に判る
まだ書き出ししてないバッファの内容は消失する
なぜそんな危険があるのにバッファなんてものを使うのか?
それはIO装置がメモリに比べてとても遅いから律速されるためだ
一旦メモリに溜めておいて最低回数で一気に書き出した方が速い
77:デフォルトの名無しさん
18/07/23 21:47:43.16 lGjeX4lH.net
1バイトじゃない場合もあるで
78:デフォルトの名無しさん
18/07/23 22:01:16.52 4YnpLRT9.net
>>74
詳しくありがとうございます
今の段階ではなんのこっちゃ分からないですが…どちらで覚えても問題はないですかね
79:はちみつ餃子
18/07/23 22:16:39.50 XO7jU5IV.net
せっかく違いを説明してくれてるのにその結論なのか……。
80:デフォルトの名無しさん
18/07/23 22:27:32.26 4YnpLRT9.net
いや・・・他の言語経験あるとかならともかく始めたばっかなもので^^;
アプリ作成経験なんて当然皆無ですしバッファの意味も分かりません…
だから今の段階で疑問に持つようなとこじゃないのかなと
81:デフォルトの名無しさん
18/07/23 22:31:20.54 4wFiAGCh.net
「問題無いですかね?」に対しては「いいえ」としか言いようがない
色々問題はあるだろうけど理解出来ないところが先ず問題だな
82:デフォルトの名無しさん
18/07/24 03:02:24.81 iDyZGWpA.net
こんなところで聞くより自分で調べた方がいいよ
83:はちみつ餃子
18/07/24 03:37:52.21 2E8lmfNH.net
>>78
でも疑問を持ったから質問したんだろ?
違いの内容を (今は) 理解できなかったっていうのは仕方ないかもしれんが、
違いの説明をしてるのにそれを無視する結論では回答者を馬鹿にしていると取られても仕方ないぞ。
わからなかったのがバッファについてなら、それをキーワードにしてググればいくらでも解説が出てくるし、
それもよくわからなかったのなら「参考にして本を読み進めてみます」くらいの言葉で締めとけよ。
84:デフォルトの名無しさん
18/07/24 04:58:30.48 5g0GAsDx.net
>>81
もちろん感謝してますし、無視せずお礼も言ってるはずですよ。
まぁ文章力がないのでそういうふうに捉えられてしまったかもしれません。どうもすいません
読んでそうそう前の入門書と違う表記でモヤモヤしたのでそれが解決しただけで収穫だと思ってます
85:デフォルトの名無しさん
18/07/24 07:53:51.92 xxZGzbX2.net
>>78
おしっこに於ける膀胱がバッファに相当する
膀胱が無ければ腎臓により生産された尿は即排出せねばならない
君がデートの最中でもだ
86:デフォルトの名無しさん
18/07/24 07:58:28.70 0yPjFIBM.net
はちみつの説教うざい
5chに何を期待してるんだか
87:はちみつ餃子
18/07/24 17:49:10.24 2E8lmfNH.net
>>84
ああ、説教に見えた?
端的に言い直すわ。
俺がヤだ。
88:デフォルトの名無しさん
18/07/24 18:20:53.98 1DGeMoUG.net
礼すら言わない質問者も多いのに、噛みつくようなことかね
89:デフォルトの名無しさん
18/07/24 18:23:42.43 0yPjFIBM.net
>>85
お前の感想とか興味無いしスレチ
90:デフォルトの名無しさん
18/07/25 14:05:11.09 rhtXSHsm.net
>>83
天才かよ
91:デフォルトの名無しさん
18/07/26 21:11:18.78 JayUwZyZ.net
visualstudio2017Communityをインストールしたのですが空のプロジェクトを
新規作成しても何も出てきません。何が原因なのでしょうか?インストールする際にたくさん
選ぶ項目がありましたがその際に何か選択しわすれていたのでしょうか・・・?
環境はwin10 64bitです
92:デフォルトの名無しさん
18/07/26 21:26:07.68 f6VzU4MC.net
空のプロジェクトは空だから
93:デフォルトの名無しさん
18/07/26 21:59:35.89 JayUwZyZ.net
>>90
ありがとうございます
からのプロジェクトって何も書いてない真っ白なページが出てくるんじゃないんですか?
何も出てこないんですけど・・・・。
94:デフォルトの名無しさん
18/07/26 22:01:45.84 JayUwZyZ.net
何回かアンインストール、再インストール繰り返してるんですが
一回一回のアンインストール時間等もかなり長くキリがないので
どこどこのページでどれをインストールすればいいのか教えてほしいです;
95:デフォルトの名無しさん
18/07/26 22:40:01.40 rlQWoOaw.net
新しいファイル作りたければ、ファイル->新規作成
96:デフォルトの名無しさん
18/07/26 22:56:12.25 JayUwZyZ.net
>>93
ありがとうございます
その手順で何回かやってましたが何も起こらずです;
砂時計が少し出てたので何かを読み込もうとしてる感じはありましたが・・・
今からインストールからやり直すのですが
ワークロード、個別のコンポーネントの項目でどれを選べばいいか教えてほしいです
用途はC++の入門書に書いてあるコードを実行です
URLリンク(gyazo.com)
97:デフォルトの名無しさん
18/07/27 00:15:04.17 Tjy3NERo.net
新規作成の空プロジェクト以外は何か出るの?
何も出ないって何かおかしいからイベントログ見てみるとか
98:デフォルトの名無しさん
18/07/27 00:40:23.04 VvnzXBkW.net
とりあえず
ユニバーサルWindowsプラットフォーム開発
C++によるデスクトップ開発
Visualstudio拡張機能の追加
この3つを選択してインストールしてるんですが他にも選ばなきゃいけないものがあるんでしょうか
99:デフォルトの名無しさん
18/07/27 02:29:41.53 VvnzXBkW.net
>>95
URLリンク(gyazo.com)
コンソール
デスクトップ
空
この3つですね
何かダウンロードし忘れてますかね・・・
100:デフォルトの名無しさん
18/07/27 04:41:40.30 VvnzXBkW.net
プロジェクトからCppを選んだらを選んだら
source.cppの真っ白画面出てきましたがやりかたあってるのかな…?
一応自己解決です
101:デフォルトの名無しさん
18/07/27 07:51:29.71 /nUzesew.net
あー、それのことを言ったつもりなんだがわかりにくかったか
空のプロジェクトはソースコード入ってないから自分で新しく入れろってこと
visual c++ 入門とかでググったら色々出てくると思うが
102:デフォルトの名無しさん
18/07/28 07:24:00.19 Z1+pBlcw.net
入門書のコードなんですが
URLリンク(codepad.org)のコードだと狙い通りに昭和の年数が帰ってくるんですが
URLリンク(codepad.org)こちらだと思ったとおりに帰ってきません
参照渡しをすると、この問題は解決できるという答えは分かりましたが、サンプルコードの違いが分からないので
どういうときに参照渡しとやらを使えば良いのか分かりません
教えて下さい
103:デフォルトの名無しさん
18/07/28 07:49:21.98 A51WA8nQ.net
テスト
104:デフォルトの名無しさん
18/07/28 07:50:15.13 A51WA8nQ.net
関数の引数は新たにデータの領域を作ってそこに値をコピーしてその引数に対して操作をするため
後者のコードでは、もとの変数には影響が及ばない。そのコピーではなく、もともとの変数を関数で操作をさせたい場合に引数を参照に指定する
105:デフォルトの名無しさん
18/07/28 08:13:40.83 u/a8W7PY.net
void func(int a) { a = 2; }
func(5); 別に問題ない リテラルを書き換えてるのではなく a はコピーとって コピー側を書き換えてる
void func(int &a) { a = 2; }
func(5); リテラルの書き換えになって駄目ー
106:デフォルトの名無しさん
18/07/28 08:19:47.29 Z1+pBlcw.net
>>102
回答有り難うございます
直接操作の意味がよく…分からないです。すみません
前者のコードはint shouwa = WesternToShouwa(western);
と戻ってきた値を代入してるから直接操作にならないんですか?
107:デフォルトの名無しさん
18/07/28 08:25:04.68 A51WA8nQ.net
>>104
申し訳ないが5chが謎の規制をしており十分な書き込みができないため他の人に回答を譲る
108:デフォルトの名無しさん
18/07/28 08:28:16.09 u/a8W7PY.net
後者のコードは
cin >> year;
WesternToShouwa(year);
って書いてて year が書き換わることを期待してるんやろ?
前社は 代入により書き換えてる
year② = WesternToShouwa(year①);
①は呼び出しの前後で変わっていない が 代入演算子により ②で書き換えてる
109:デフォルトの名無しさん
18/07/28 10:03:32.12 Z1+pBlcw.net
>>106
ありがとうございます。
なんとなくわかってきたような…
どちらのコードも戻り値はかえってきてるんですよね・?
110:デフォルトの名無しさん
18/07/28 11:37:12.81 A51WA8nQ.net
両方のコードの20行目
前者はint shouwa = の部分で返った値をshouwa に格納してるが
後者は返った値がどこにも格納されてないのだ
111:デフォルトの名無しさん
18/07/28 11:49:20.96 Z1+pBlcw.net
>>108
なるほど!
返ってきた値を引数に直接入れることは不可能なんですね。でも仮引数で&を使えば直接値を変えることが可能になると。
分かりました。ありがとうございます
112:デフォルトの名無しさん
18/07/28 17:16:46.17 DikBMpfR.net
codepad.org/epS67q3p
↑のコードですが、 system() により、 Main1.exe というプログラムを
実行しています。
今、使っている IDE は、 Visual Studioです。
Main1.exe の置き場所ですが、プロジェクトのソースコードが置かれているところに
置くとうまくいきました。
もし、かりに、このプログラムの .exe ファイルを別の場所に持って行った場合に、
Main1.exe はどこに置けばいいのでしょうか?
その位置関係の指定方法が分かりません。
113:デフォルトの名無しさん
18/07/28 17:17:39.98 DikBMpfR.net
URLリンク(codepad.org)
114:デフォルトの名無しさん
18/07/28 17:23:29.60 F9WoxQmy.net
実行するexe同じフォルダ
115:デフォルトの名無しさん
18/07/28 18:07:52.47 DikBMpfR.net
>>112
ありがとうございます。
今、Visual Studio から実行しています。
URLリンク(codepad.org)
↑このexeファイルの場所とMain1.exeの置き場所が違いますが、
うまく実行できています。
URLリンク(codepad.org)
逆に、Main1.exeを↑のexeファイルと同じ場所に置くとうまくいきません。
これは、 Visual Studio 上から実行しているからでしょうか?
116:デフォルトの名無しさん
18/07/28 18:12:14.33 DikBMpfR.net
>>112
ありがとうございます。
今、試してみたら、同じフォルダに入れることでうまく実行できました。
117:デフォルトの名無しさん
18/07/28 18:36:49.62 F9WoxQmy.net
VisualStudioはカレントディレクトリをソースのフォルダにしてるから、簡単に言うとソースフォルダに置いて実行している扱いになってる
118:デフォルトの名無しさん
18/07/29 01:20:19.62 pFjYaTQt.net
設定ファイルで指定できるだろ
相対パスの基準ディレクトリになれるのは、
1. カレントディレクトリか、
2. プロジェクトフォルダか、
3. 呼び出す方のファイルのあるフォルダ
119:デフォルトの名無しさん
18/07/30 13:39:08.45 7wjh0J3U.net
関数に配列(data, result)をポインタで渡し,奇数/偶数の判定結果(1:奇数,0:偶数)をresultに格納せよ.その結果を用いて,問題2のように,入力した番号が奇数か偶数かを出力せよ.
例
intdata[5] = {7, 10, 21, 30, 36};
intresult[5] = {};←関数で{1, 0, 1, 0, 0}を得る
という課題が出たのですが、さっぱりわかりません;;
120:はちみつ餃子
18/07/30 13:52:00.99 pFBrx3WW.net
そうか。
121:デフォルトの名無しさん
18/07/30 13:52:38.57 pndAnuUe.net
まず自分でやってみてどの部分がわからないのか確認しろ
122:さまよえる蟻人間
18/07/30 14:21:49.81 hdlApzlB.net
void f(int count, int *data, int *result)
{
int i;
for (i = 0; i < count; ++i)
result[i] = data[i] % 2;
}
123:デフォルトの名無しさん
18/07/30 14:38:01.55 n1wK/LR0.net
「さっぱりわかりません」と書かれても、
どう分からないのか分からないと説明のしようもないのだわ。
もちろん、その課題の解答例を示すことはできるけど、
丸写しにしても分からない状態は解消しないだろうし。
とりあえず、判定したい情報が入った配列dataを関数に渡すことはできるのかな?
「引数として整数の配列を渡して、それに格納されてる値をそのまま表示する関数」
のような関数を作れる?
124:デフォルトの名無しさん
18/07/30 22:37:05.35 8eP7GHtq.net
学校の宿題は先生に聞け
教えるのが彼の仕事なんだから
125:デフォルトの名無しさん
18/07/31 14:17:05.96 tdoY3Pm4.net
金出して教わってるんだからね
126:デフォルトの名無しさん
18/07/31 14:24:34.18 PCFGvven.net
初心者歓迎って書いてあるって言うのに
127:デフォルトの名無しさん
18/07/31 14:36:16.60 SI7qMfWn.net
丸投げ歓迎ではないだろ
128:デフォルトの名無しさん
18/07/31 15:13:55.43 PCFGvven.net
何が良くて、何が駄目か、>>1に明記しないと
初心者を誘い込んでいたぶっている様にしか見えないな
129:デフォルトの名無しさん
18/07/31 16:50:22.37 SI7qMfWn.net
そう思うなら答えてやれよ
130:デフォルトの名無しさん
18/07/31 17:26:41.93 33h3+A0b.net
だよなあ
答える方だってさっぱりわかりませんがさっぱりわかりません
131:デフォルトの名無しさん
18/08/01 03:37:53.71 DhLyFl3e.net
優しいC++という入門書を読んでるんですが
デフォルト引数についての説明が少なすぎてよくわかりません
どやって宣言するんでしょうか?プロトタイプ宣言の文にもデフォルト引数を書く必要があるんですか?
なんか簡単なコードを書いて頂けると助かります
132:はちみつ餃子
18/08/01 04:45:10.06 oNWxQcbM.net
>>129
基本的には宣言の方に書くもんだ。
133:デフォルトの名無しさん
18/08/01 05:37:51.62 DhLyFl3e.net
>>130
ありがとうございます。関数の本体には引数書かなくていいんですね(+_+)
134:はちみつ餃子
18/08/01 06:08:28.66 oNWxQcbM.net
>>131
関数定義の場所でデフォルト引数を書くことも出来るけどね。
関数の定義は宣言を兼ねるので、宣言が不要ならば関数定義の箇所でデフォルト引数を書いておけば
それ以降の呼出し箇所でデフォルト引数が使われる。
ただし、宣言と定義の両方にデフォルト引数を書いたら駄目。
デフォルト引数は関数呼出しのときに補われるのであ�
135:驍ゥら、 関数呼出しのときにデフォルト引数が何かわかっていなければならないので、 分割コンパイルしたときに実装 (関数定義) 側にデフォルト引数が書かれていても 呼出し側でデフォルト引数が何かわからない。 それでは困るから、原則としてはプロトタイプ宣言の側にデフォルト引数を書くものだと思っておけば無難ってことになる。
136:デフォルトの名無しさん
18/08/02 04:15:29.78 fAfw4oAh.net
すいません入門書のfor文のコードなんですが
URLリンク(codepad.org)
19行目からどういう順番で動いて何やってるのか一切分からないので解説して下さい;
点数高い順に並べ替えてるみたいなんですが、どう動いてるのか分からないので全然納得出来ないです
137:デフォルトの名無しさん
18/08/02 05:55:02.70 RdYw4Wzo.net
>>133
まず先頭と2番目を比較し、2番目の方が大きければ先頭と入れ替える。
次に先頭と3番目を比較し、3番目の方が大きければ先頭と入れ替える。
・・・
先頭と末尾をを比較し、末尾の方が大きければ先頭と入れ替える。
ここまでで、先頭の要素は、他のすべての要素より大きくなる。
つまり、先頭の要素は一番大きい要素になる。(内側のループ1回目)
次に2番目と3番目、2番目と4番目・・・2番目と末尾で同じことをすることで、
2番目の要素は2番目に大きい要素になる。(内側のループ2回目)
あとはこれを繰り返せば、大きい純に並び替えられる。
詳しくは、「選択ソート』で検索。
138:デフォルトの名無しさん
18/08/02 08:03:24.20 fAfw4oAh.net
>>134
ありがとうございます
[]の中のtとsが添字と要素数ごっちゃになって混乱してました
難しい…
139:デフォルトの名無しさん
18/08/05 18:48:49.49 IlbWYfru.net
どうか教えてください
C++言語プログラミングのクラス実装にて
文字列を合成するメンバ関数を以下のように書きました
std::string オリジナルクラス::getConectString()
{
return 文字列1 + 文字列2;
}
このあとに、合成された文字列の「長さ」を求めるためのメンバ関数を
int オリジナルクラス::getConnectLength()
{
return getConnectString().length();
}
とすると「長さ」が正しく求まりました
上記のように、getConnectString()というメンバ関数名に.length()を用いることは
使い方としてあっていますか?
よろしくお願いします
140:デフォルトの名無しさん
18/08/05 19:17:21.88 OnEvhE95.net
>>136
あってます
141:デフォルトの名無しさん
18/08/05 20:37:06.00 IlbWYfru.net
>>137
ありがとうございます
不安解消できました
142:デフォルトの名無しさん
18/08/05 21:00:08.49 lZNE8En/.net
メソッドチェーン と調べろ
143:デフォルトの名無しさん
18/08/05 21:03:53.86 IlbWYfru.net
>>139
メソッドチェーンを早速調べてみます
初めて知る言葉なので感謝です
144:デフォルトの名無しさん
18/08/09 06:33:36.32 PReqPOhL.net
入門書のコードなんですけど
URLリンク(codepad.org)
これをvisualstudio2017で実行するとstrcat,scrcpyの宣言を確認してくださいとか何とかたくさん出て実行できません
何が原因なんでしょうか?何かインストールのし忘れですか
145:デフォルトの名無しさん
18/08/09 07:50:28.77 xHgFHFx+.net
「c++ strcpy」「c++ strcat」で検索!
URLリンク(www.cplusplus.com)
URLリンク(www.cplusplus.com)
#include <stdio.h>
#include <string.h>
#include の後ろに、半角空白が入る
146:デフォルトの名無しさん
18/08/09 10:29:21.43 Kf5blEgn.net
strcpy_s じゃねえの
147:デフォルトの名無しさん
18/08/09 13:47:27.82 NndPCS/I.net
「*_s を使え」は警告であってエラーじゃなかった記憶
include 行より前に
#define _CRT_SECURE_NO_DEPRECATE
を置くと警告は消せるけど
実行できません=コンパイルエラーなら
本質は >>142 の stdio.h と string.h のインクルード足らずでしょう
148:デフォルトの名無しさん
18/08/09 18:20:43.03 PReqPOhL.net
>>142->>144
ありがとうございます。
#include <stdio.h> #include<string.h>入れても結果は同じでした。(iostremをぬ
149:いても結果は同じでした) https://gyazo.com/a4a296eff2f108205068ec8724814005 自分の環境がおかしいんですかね…入門書のコード自体は間違ってないんでしょうか? >>143さんの strcpy_s ,strcat_s という表記にしてみたらおかげさまで実行できました!
150:144
18/08/09 20:22:12.13 jMDw6MMS.net
スクショあり
「セキュアじゃないから使うな」はエラーになってるのな
151:デフォルトの名無しさん
18/08/09 21:21:09.77 N7zY56wf.net
>>142
C++のコードでstring.hを勧めちゃダメでしよ
152:デフォルトの名無しさん
18/08/09 21:33:27.01 obVRq9lE.net
>>147
最初の質問読まずに脊髄反射すんな
153:デフォルトの名無しさん
18/08/09 22:06:19.25 b+KVdser.net
それ言い出したらstrcpy_s、strcat_sとかもどうかと思うよ…
154:デフォルトの名無しさん
18/08/09 23:46:51.29 N7zY56wf.net
>>148
最初の質問が>>141なら、既にcstringをインクルードしてるんだから、わざわざstring.hなんて書くべきではないと思うけど、最初の質問てどれのことだろう?
155:デフォルトの名無しさん
18/08/10 04:21:11.55 ZbqK12l8.net
class Abc {
public: int meas() {return 1;}
};
int Func() {return 1;}
int main()
{
Abc aa;
int (*flist[])() = {aa.meas}; // 1.error 非標準の構文
int(*fpFunc[])() = { Func ,Func}; //2.ok
}
クラスインスタンスのメンバー関数の関数テーブルをつくりたいんだができない。何か良い方法は
無いものだろうか? 2ができるのに1ができないのは解せない。
156:さまよえる蟻人間
18/08/10 04:45:52.84 KaDy9gZn.net
URLリンク(www7b.biglobe.ne.jp)
157:デフォルトの名無しさん
18/08/10 07:18:29.02 ZbqK12l8.net
回答ありがとう。
class CTest { public: void Func(); };
void (CTest::*fpFunc)() = CTest::Func;
問題なくコンパイルできたと思います。このように、メンバ関数ポインタの文法は
<戻り値の型> (<クラス名>::*<変数名>(<引数リスト>);
この説明は読んだが、それはインスタンスに対してはつかえないでしょ。
{aa.func,bb.func}
のように集合したい場合に使えないから上の例とは問題がすこし違うとおもう。
というかC++では仕様的に無理なのかな?
158:デフォルトの名無しさん
18/08/10 07:56:57.78 xeFjyQQA.net
>>153
無理だよ。
メンバ関数の実体はインスタンス毎にそれぞれメモリ上に配置されるのではなく、異なるインスタンスでも実体は一つ。だから、インスタンスごとにメンバ関数のアドレスが異なる訳ではないので、そういうことはできない。
メンバ関数をポインタ経由で呼ぶためには、インスタンスそのもののポインタと、メンバ関数ポインタをセットで使う必要がある。
159:デフォルトの名無しさん
18/08/10 08:08:21.45 a+3O8uOm.net
ローベルのサイトって糞じゃね?
160:デフォルトの名無しさん
18/08/10 08:11:57.37 iZqKv3XP.net
世の中糞サイトの方が多いんだから
わざわざ糞サイトを宣伝しなくて良い
161:デフォルトの名無しさん
18/08/10 08:52:37.28 TsnKzz2s.net
>>154
なるほどな・・・質問者ではないが勉強になる。
162:デフォルトの名無しさん
18/08/10 08:57:27.28 beAAeNyA.net
>>154
詳しい解説サンクス
163:デフォルトの名無しさん
18/08/10 11:57:40.37 LvXbuhRM.net
>>151
普通に
int main(){
Abc aa;
Abc bb;
int list[] = {aa, bb};
…
auto x = list[0].meas(); // 呼び出し
…
じゃダメなの?
164:デフォルトの名無しさん
18/08/10 12:33:00.16 /Djii9VU.net
>>157
thisポインタ周りの話は基本中の基本だと思ってたんだが最近は違うんかね
165:デフォルトの名無しさん
18/08/10 13:05:27.16 2oUNvS+I.net
対象が virtual なメンバ関数だともっと面倒なことになりそう
166:デフォルトの名無しさん
18/08/10 13:06:45.85 LvXbuhRM.net
メンバ関数ポインタってあまり使う機会ないから
俺も数回しか使ったことないし
167:デフォルトの名無しさん
18/08/10 13:07:32.92 2oUNvS+I.net
>>161 のは、あくまでもメンバ関数のポインタをテーブルに持ちたいなら という話で
168:デフォルトの名無しさん
18/08/10 18:49:13.66 Xd038t+R.net
>>151
std::functionとラムダ式組み合わせたら?
std::function<int()> first[] = {[&aa](){return aa.meas();}};
169:デフォルトの名無しさん
18/08/11 07:05:15.22 eZwdztat.net
>>154
そういうことなのですか? 分かりやすい説明でスッキリしました。
>>159
そうですね。それだとイメージ的にはthisのポインターリストですからメンバーを含めてcと同様の関数テーブルをつくるには
PointerPareList[]={
{this1, メンバー関数のローカルポインター1},
{this2, メンバー関数のローカルポインター2},
{thisn, メンバー関数のローカルポインターn},
};
にすればよいのかな。でもローカルポインター(クラス内の相対アドレス)がとれない?でしょうね。それに実行方法も
問題ですね。
>>164
私もラムダを使う方法で実現しました。functionは知らなかったので使わずに関数ポインター配列でもできました。
ラムダ式を使うとすんなり動作しました。
170:デフォルトの名無しさん
18/08/11 07:22:17.85 WnJNWI2T.net
入門書のコードなんですが
URLリンク(codepad.org)
これの11行目と12行目は何をする関数でこのプログラムで何の役割を担ってるんですか?
typedef,ファイルの分割、参照辺りから駆け足になってきて本の説明だけじゃ中々理解できません(+_+)
171:デフォルトの名無しさん
18/08/11 07:36:22.18 d91dd04/.net
getter/setterはaccessorアクセサというもので、メンバ変数をやりとりするための関数
なぜこんなものが必要なのかはJavaにて議論されてる
URLリンク(qiita.com)
URLリンク(d.hatena.ne.jp)
URLリンク(geechs-magazine.com)
URLリンク(teratail.com)
URLリンク(www.deep-rain.com)
172:デフォルトの名無しさん
18/08/11 07:51:24.20 L4B/ldSd.net
>>165
ラムダ式を関数ポインタに代入できるのは、キャプチャしてない場合だけ。
今回の場合、元のオブジェクトをキャプチャする必要があるので、
関数ポインタに代入することは出来ないはず。
実際、手元のclang++ではビルドできなかった。
処理系の独自拡張でたまたま動作しているだけじゃないかな?
173:デフォルトの名無しさん
18/08/11 08:05:06.20 WnJNWI2T.net
>>167
java知らないので一瞬わからなかったです;
ドット演算子でメンバ関数表示出来ないからややこしいことしてたんですね
分かりました。ありがとうございます
174:デフォルトの名無しさん
18/08/11 08:07:37.86 dFDFw6X4.net
(´・ω・`)?
175:デフォルトの名無しさん
18/08/11 08:50:14.12 eZwdztat.net
>>168
キャプチャしてません。(あまりよくわかってないが、、)
オブジェクトをグローバルで定義してるからだろうか?
組み込みなので頭で定義してる。
fpfunc funclist[] = {
[](bool tf ){ Seqif.ledon1( tf ) },
[](bool tf ){ Seqif.ledon12( tf ) },
[](bool tf ){ Seqif.ledon21( tf ) },
[](bool tf ){ Seqif.ledon35( tf ) }
}
176:デフォルトの名無しさん
18/08/11 10:06:46.89 WNr/dTgn.net
>>165
> PointerPareList[]={
> {this1, メンバー関数のローカルポインター1},
> {this2, メンバー関数のローカルポインター2},
> {thisn, メンバー関数のローカルポインターn},
> };
そのメンバー関数って要素ごとに異なるの?
異なるならこんな感じでやればいい
#include <stdio.h>
class Abc {
private:
int n;
public:
Abc(int n_) : n(n_) {}
int meas0() { return n + 0; }
int meas1() { return n + 1; }
};
int main() {
Abc aa(10);
Abc bb(20);
struct {
Abc& This;
int (Abc::*Func)();
} list[] = {
{ aa, &Abc::meas0 }, { aa, &Abc::meas1 }, { bb, &Abc::meas0 }, { bb, &Abc::meas1 }
};
for (auto x : list) {
auto n = (x.This.*x.Func)();
printf("n = %d\n", n);
}
}
177:デフォルトの名無しさん
18/08/11 18:31:52.91 WnJNWI2T.net
>>170
メンバ変数に直接アクセス出来ないから値だけを返す関数作ってるのかな?って
URL先見て理解したんですが間違えてますか;
178:デフォルトの名無しさん
18/08/12 09:04:38.07 0uSju4C4.net
メンバ変数を外部から書き換えさせないためのprivate指定と、
書き換えさせないけど値の読み出しはさせてやるためのget~関数、
と考えるのが宜しいかと。
179:デフォルトの名無しさん
18/08/12 21:42:22.35 zeMljtXN.net
>>172
凄い。そういうことができるんですね。
メンバー関数のタイプはすべて同じなのだがクラスのタイプがことなるものが混在するばあいはどうすればいいだろ。
Abc aa(10);
Efg bb(20);
こんな場合。
180:デフォルトの名無しさん
18/08/14 03:08:53.25 nTdTTFHr.net
size_tを戻り値に使った関数が定義されてるんですけど、size_tはどういう型なんですか?
この入門書で、何の説明もなく使われてるんですが…
181:はちみつ餃子
18/08/14 06:59:55.91 EPC9iky2.net
>>176
サイズを表すのに充分な unsigned な整数型
182:デフォルトの名無しさん
18/08/14 07:39:25.77 sy/JHgHD.net
何のサイズか書かないと意味が無い
183:デフォルトの名無しさん
18/08/14 08:07:02.01 nTdTTFHr.net
>>177
ありがとうございます。照らし合わせたら何とか理解できました;
それとなんですが……ロベールってプログラミング初めてやるのに向いてる書籍ではないんでしょうか?
書籍スレで聞いたら噛みつかれたりしてまともじゃなかったので、、もしもっと簡単な本あれば教えてほしいです;
184:はちみつ餃子
18/08/14 10:46:11.90 EPC9iky2.net
>>179
入門者向けというのは内容が簡単という意味ではない。
入門的なことを根本的な理屈から説明している本は難しいかもしれないが入門者にとっては有用だし、
でもそういうのはモチベーションが続かないっていう人にとっては理屈はともかく動作するものを中心に
した方が良いかもしれないし、学習のスタンスによるんじゃないの。
良いか悪いかというスカラ的な軸では評価できないよ。
俺はロベールの本とやらを読んだことが無いので具体的な評価はできないけども、
古いという点でややマイナス評価かな。
C++11 (C++ の仕様の 2011 の改定) が大きなターニングポイントなので、
それよりも古い仕様を想定した書籍は現代作法的にちょっと微妙な箇所があったりする。
185:
18/08/14 11:13:21.53 5K5qKv3G.net
>>180
C++11 or later をあからさまにターゲットにした和書は
URLリンク(www.amazon.co.jp)
しか持っていない、これも辞典形式で右辺値参照とかは詳しくない、いまはもうちょっと増えているかと期待するが
186:デフォルトの名無しさん
18/08/14 18:10:42.27 TB9AjC50.net
>>175
基本クラスを作って各々派生させるくらいしか思いつかなかった
#include <stdio.h>
class Base {
public:
iint n;
Base(int n_) : n(n_) {}
virtual int meas0() = 0;
virtual int meas1() = 0;
};
class Abc: public Base {
public:
Abc(int n) : Base(n) {}
int meas0() override { return n + 0; }
int meas1() override { return n + 1; }
};
class Def : public Base {
public:
Def(int n) : Base(n) {}
int meas0() override { return n + 10; }
int meas1() override { return n + 20; }
};
... 続く
187:デフォルトの名無しさん
18/08/14 18:12:17.45 TB9AjC50.net
int main() {
Abc abc(100);
Def def(200);
struct {
Base& This;
int (Base::*Func)();
} list[] = {
{ abc, &Base::meas0 }, { abc, &Base::meas1 },
{ def, &Base::meas0 }, { def, &Base::meas1 }
};
for (auto x : list) {
auto n = (x.This.*x.Func)();
printf("n = %d\n", n);
}
}
188:デフォルトの名無しさん
18/08/14 22:59:32.77 nTdTTFHr.net
>>180
いいお値段する本なので中々乗り換える決心が付きませんでしたが
これを機にもっと簡単なコードが沢山載ってて手で動かしながら直感的に覚えられる新しい版の本探してみます。
スレチにも関わらずアドバイス頂きありがとうございます(´ω`)
入門書≠簡単ではないんですね…苦しんで覚えるCみたいにいい意味でタイトルに偽りある本があればいいんですが
189:デフォルトの名無しさん
18/08/15 02:59:09.35 gGWJA2ph.net
>>182
参考になります。ありがとう。
190:デフォルトの名無しさん
18/08/15 03:01:14.65 gGWJA2ph.net
namespace Name1{
void func1(){}
}
namespace Name2{
void test{
Name1::func1(); //error になる。
}
}
vs2017でテストするとコンパイルOKなのだが、TIのccsコンパイラだとエラーになる。
TIの場合はNamespaceはクラスにたいしては有効だけれども、グローバル関数に関してはエラーになる。
これは正しい文法なのだろうか?
191:デフォルトの名無しさん
18/08/15 03:30:10.43 JotEkZGJ.net
pubgはUE4で作られてる
そのUE4はC++
銃弾の反動とかゲーム中にどんな計算されてるのか知りたいんだけどどうやったら知れますかね?
192:デフォルトの名無しさん
18/08/15 04:36:03.80 WdeJX/bN.net
>ロベールってプログラミング初めてやるのに
まず、プログラミングの初心者が、C++ を学ぶには数年以上掛かる!
Ruby など数言語を数年いじくりまわした人が、やっと、C++ を学ぶスタート地点に立てる
各言語の入門書は、決してプログラミング初心者向けではない!
数言語をいじくりまわした人が、その言語に関しては、知らないというだけ。
既に数年のコンピューターリテラシーを学んだ人が、各言語の入門書を学べる
つまり、プログラミング初心者と、各言語の初心者は違う。
まず、Ruby, Python, JavaScript など、軽量言語を数年やるべき
C++ は最難関!
20年以上、C で開発している中高年でも、ほとんどの人は出来ない!
それでも、やりたいのなら、ロベールしかない。
他の本では、絶対に無理だから!
漏れらみたいに、10言語を何十年もやってれば、速習でも読めるけど。
初心者がC++ なんて、時間の無駄
193:デフォルトの名無しさん
18/08/15 05:34:32.93 zJa27iMm.net
そこまですごいもんでも無いと思うがな
ストラウプスのネタ本を読んでからまったりと覚えれば良いと思うがな
194:188
18/08/15 05:36:14.55 WdeJX/bN.net
例えれば、プログラミングの初心者は、小学生だろ。
一方、C++ は高校生
小学生が、高校生の教科書を理解するには、10年掛かる。
読んでも理解できない
小・中・高と、簡単なものから順序よく理解していかないといけない
だから、プログラミングの初心者が、C++ から始めるのが根本的に間違い!
それとも誰か、プログラミングの初心者は、C++ から始めろって勧めた奴でもいたか?
195:デフォルトの名無しさん
18/08/15 05:38:50.07 fSWxnCwv.net
>>188
> プログラミングの初心者が、C++ を学ぶには数年以上掛かる
> Ruby など数言語を数年いじくりまわした人が、やっと、C++ を学ぶスタート地点に立てる
こマ?
> 20年以上、C で開発している中高年でも、ほとんどの人は出来ない!
新しいことを覚える気がないK&RかC89脳おじさんなだけじゃないの?
> 各言語の入門書は、決してプログラミング初心者向けではない!
> 既に数年のコンピューターリテラシーを学んだ人が、各言語の入門書を学べる
> まず、Ruby, Python, JavaScript など、軽量言語を数年やるべき
RubyやPythonやJavaScirpt の入門書も同様ではないの?
196:デフォルトの名無しさん
18/08/15 05:40:47.64 fSWxnCwv.net
そうしたら、RubyやらPythonの入門書の読み方、勉強の仕方を覚えるための
学習用擬似言語みたいなものが必要になってくるな
197:デフォルトの名無しさん
18/08/15 05:41:40.20 fSWxnCwv.net
C++も11より前とそれ以降じゃ随分話が違うと思うが…
198:デフォルトの名無しさん
18/08/15 05:42:01.75 fSWxnCwv.net
ネタにガチレズすまそ…ついな…
199:デフォルトの名無しさん
18/08/15 06:37:16.69 NmCQr9eE.net
プログラミン
200:デフォルトの名無しさん
18/08/15 06:46:30.99 2ovpzQjs.net
>>189
「ストラウプスのネタ本」とは具体的にはどんな本なの?
言葉だけ見るとハゲ先生がC++に関して面白おかしく書き綴った
軽く読める本に思えて興味をそそられるんだが。
ネット検索できる程度の情報(タイトルとか)を教えて下さいな。
201:188
18/08/15 07:21:49.59 WdeJX/bN.net
禿の本は、小難しいだけ。
ロベールよりも遥かに難しいから、読んでも無駄
「苦しんで覚えるC」は、内容がない。
手順書だから、1~2時間ぐらいで読める。
こう打ち込んだら、こう表示されるという内容
「たのしいRuby 第5版、2016」を3回読んだ方が、遥かにためになる。
Ruby は、C/C++ みたいに余計な儀式がない。
処理が、ソースコードそのままで表現される
スクエニなど、社員が数千人いても、募集しているだろ。
C++ なんて、千人中1人も出来ない
20年開発していても、資格を取れないとか、そんな奴ばっかりだろ。
そういう連中がどうやって、C++ の本を理解できるのか?w
無理や
Rubyの女神・女優の池澤あやかも言ってる。
初心者が大学で、Cから始めるから、皆プログラミングが嫌いになる。
Rubyから始めれば良いのにって
202:デフォルトの名無しさん
18/08/15 08:16:14.36 gGWJA2ph.net
でもCから始めるというのはそんなに間違っていないと思う。特に情報や電気、電子工学系など
本格的にプログラミングをやろうとする人に関しては正しい入門方法だと思う。
Cからの入門が適切な人にとっては、次はC++でもよいと思う。もともとC++はCを含んでいるので
初心者がC++から始めるというのはある意味正当な方法だろう。
具体的には、たとえばハードウエア割り込み信号を捉えるプログラミングは、他の言語では非常に
理解しずらいと思う。C++なら直接割り込みが起こったところをステップ動作で観測できる。
こんな言語は他にはないだろう。しかもそのデータをメモリーに蓄積して、適切に処理したのちに
さらにデータベースに格納するなど。微細な部分から非常に大規模な部分までをトータルにカバー
できるというダイナミックレンジにおいてもC++以外の言語はないのではないだろうか?
とはいえ自分もC++は毛嫌いしていままで使ったことはなかったが、使ってみればかなり便利だ。
203:デフォルトの名無しさん
18/08/15 08:22:05.96 zJa27iMm.net
>>196
C++の設計と進化
204:デフォルトの名無しさん
18/08/15 11:19:42.54 PzLkDuyq.net
>>188
細かく道筋教えていただきありがとうございます
使いこなせるようになりたい言語はC++C#と決まってるので出来れば
この2つを覚えるのに有用な言語がいいんですがruby,python,javascriptの3つのうちどれが有用ですか
出来れば実行環境を用意するのに手こずらない言語がいいです。一度何処かのスレでjava勧められて環境変数が云々で挫折してるので‥
205:188
18/08/15 11:34:53.13 WdeJX/bN.net
この本を薦める。
たのしいRuby 第5版、2016
オブジェクト指向を学びたいなら、
スッキリわかる Java入門 第2版、2014
どの言語でも、環境構築が難しい。
だからプログラマではない、Excel エンジニアが多い
どの企業でもプログラマ募集ではなく、
コンピューターリテラシーがある人を求めているのは、そういうこと
数十のLinux コマンド・PowerShell のコマンドを知っている人とか、
環境変数PATH を知っている人とか
1. Ruby, Python, JavaScript,
2. Java, Kotlin, C#,
3. C, C++
言語の順番で言えば、C# は6番目。
5年後ぐらいw
1は軽量・動的言語、2は静的言語、3はポインターを扱う言語。
だから大学教育で、7番目のCから教えるのは、明らかな間違い
206:188
18/08/15 11:49:34.58 WdeJX/bN.net
ロベール1冊を読む時間よりも、以下の3冊の方が、
はるかに短時間で読めるし、身につく。
それぐらい、C++ は難しい・ややこしい。
C/C++ のようなポインタのある言語は、必要に�
207:翌轤黷驍ワで避けるべし! たのしいRuby 第5版、2016 みんなのPython 第4版、2017 スッキリわかる Java入門 第2版、2014
208:
18/08/15 11:50:30.19 a3nr9Eye.net
>>200
Java は「pathを通す」―環境変数 path を設定するだけで使えるようになりますよ
OS はなんですか?
私は Java を推薦します。
Ruby は癖があり、python はオブジェクト指向が徹底されず(private 変数を外から触れる)いまひとつ
209:はちみつ餃子
18/08/15 12:17:21.11 h98LWHBZ.net
C++ を使えるようになりたいなら C++ を学ぶのが当たり前の道筋じゃん。
何言ってんの?
210:デフォルトの名無しさん
18/08/15 12:25:41.44 o8lgioa7.net
Ruby厨とかJava爺の相手するなよ…
211:デフォルトの名無しさん
18/08/15 12:39:19.21 PzLkDuyq.net
C++はたくさん動画とかも上がってるし初心者にとっつきやすい言語と思ってたんですが
そうでもないんですか…
綺麗なゲーム作りたいから早くC++C#やりたいんですが厳しいですか;
>>スッキリわかる Java入門 第2版、2014
お薦めしてもらったスッキリjavaは買ったんですが前述の通りsdkが説明どおりにやってもインストール出来なくて…
C++やるためにvisualstudioはインストールしたんですけど、visualstudioあればRubyとかpythonも出来るんですか?
>>203
OSはwin10の64bitです。dokojava筆者の説明どおりにやってなんどもインストール・アンインストール繰り返しましたが駄目でした
とことん相性が悪いようです;;
212:
18/08/15 12:43:35.59 a3nr9Eye.net
>>206
URLリンク(techacademy.jp)
で Java インストールを試してみてください
以前トラブっているのを読んでいた限りでは、この方法が有効なはずです、Windows7, WindowsXP 時代からこうしてきました
213:デフォルトの名無しさん
18/08/15 13:31:25.14 PzLkDuyq.net
>>207
コマンドプロンプトでjavac10.0.2って出てきたんですがこれは成功いけてますか?
以前教えてもらった時はpowershellとか色々やっても
全然駄目だったのに……今回一発で出来たっぽいです
なんと感謝していいのやら;ありがとうございます…!
脱線してスレ違いになってすいません。
214:
18/08/15 13:48:16.33 a3nr9Eye.net
>>208
コマンドプロンプトで「javac -version」を入力後、enter で
URLリンク(static.techacademy.jp)
の画面が出ればOKです
215:196
18/08/15 17:02:04.76 2ovpzQjs.net
>>199 ありがとう。『C++の設計と進化』はタイトルは知ってるけど
読んだことはない(お高いのでなかなか買う踏ん切りがつかない)。
『プログラミング言語C++』第4版の中でも何回か言及されてるから
いつか読もうとは思ってる。
…とか言いつつ、先刻まで「進化と設計」と覚えていた。
確かに「設計と進化」、設計して作ってさらに進化、じゃないと
話が合わないね。
216:デフォルトの名無しさん
18/08/15 17:32:30.42 zJa27iMm.net
何故そうなっているか?を書いているから良書だよ
丸暗記以外はしない人には不要かも知れないけど
217:デフォルトの名無しさん
18/08/15 21:50:43.50 VaT5tlrt.net
noexceptについてなんですが、標準ライブラリのコンストラクタとかって
実装が勝手にnoexceptを付けたりできますか?
cppreferenceによるとunordered_map()のデフォルトコンストラクタはnoexceptが付かないことになってますが
noexcept(unordered_map<string, int>()) の値を見てみたら、ideone.comではtrueになっていました。
Visual C++だとfalseです。
安全側、制約の強い側になるので実装によって異なっていても問題ないということですか?
218:188
18/08/15 23:40:56.26 WdeJX/bN.net
219:>>207 のリンクにあるような、 ユーザー・システム環境変数の画面のPATH をわからない人は、プログラマーにはなれない。 プログラマーになれない、Excel エンジニアが多いのは、PATH の仕組みがわからないから 数十ある、基本コマンドを勉強していないから シェル(PowerShell・コマンドプロンプト)で、 「ruby 引数」のようなパス無しの「コマンド名 引数」でなぜ、 実行ファイルが探し出されるのか? ruby で起動される実行ファイルは、ruby.exe, ruby.dll, ruby.sh なのか? それらが同じフォルダにあれば、どれが起動されるのか? こういう質問に答えられない人は、何十年プログラミングしていても環境構築できない こういう人は、単なる土方プログラマーで、 コンピューターリテラシーがないから、企業が採用したくない人! 土方プログラマーはいらない! コンピューターリテラシー、つまりシステムの知識がある人が求められている
220:デフォルトの名無しさん
18/08/15 23:43:45.10 NFQKBcxz.net
土方も重要だ
BIOS, ドライバ, OSのカーネル, ...
221:デフォルトの名無しさん
18/08/16 01:14:30.13 HRLpvjxW.net
>>212
問題ない。
URLリンク(timsong-cpp.github.io)
> An implementation may strengthen the exception specification for
> a non-virtual function by adding a non-throwing exception specification.
222:デフォルトの名無しさん
18/08/16 01:20:15.04 l9CntSK6.net
ポインタって言うほど難しいの?
223:デフォルトの名無しさん
18/08/16 01:24:16.82 IiF9TGTT.net
詳説 Cポインタ、2013、オライリー・ジャパン
ポインタの仕組みだけで、1冊出てるぐらいに難しいw
224:デフォルトの名無しさん
18/08/16 02:00:08.68 5ZuBlO3L.net
>>216
よく、スレで宗教戦争を起こしているでしょ
C言語がポインタの表記について混乱しているから、難しい。
に一票かなぁ
225:デフォルトの名無しさん
18/08/16 02:07:17.83 HU9VHWiC.net
そんなに難しくないだろう
何で悩むのか分からない
226:デフォルトの名無しさん
18/08/16 04:05:41.81 QPt6nAZj.net
>C言語がポインタの表記について混乱しているから、難しい。
混乱してるようには思えないんだが、どう混乱してるの? まあ確かに関数のポインターの型表記
などは難しいといえば難しいな。それを言うならC#だってラムダの型表記などはautoしてみないと
分からないようなことがある。ラムダもポインターに似たようなものだからね。
227:デフォルトの名無しさん
18/08/16 04:33:02.52 QPt6nAZj.net
Cは凄くいい言語だと思う。シンプルで綺麗で分かりやすい。ただC++は失敗作だ。しかし
C11あたりからその駄目部分をカバーしてきている。つまり使い方を選んで使えばC++は
非常に便利に使えるようになってきている。
本を読んでもC++の作者が書いた本は混乱していて分かりずらい。物事を複雑に考え過ぎて
混乱している。こういう人には綺麗な言語を作るのは難しいだろうと思う。今のC++はC#やJava
が作り出した成果を取り込んで、精神を叩き直されたC++だから元々のC++とは違うものだと思う。
228:デフォルトの名無しさん
18/08/16 04:33:34.49 IiF9TGTT.net
ヌル文字、ヌルポ、0
これらの違い
229:デフォルトの名無しさん
18/08/16 08:01:51.77 ubCBwXZI.net
DBのNULLみたいな
230:デフォルトの名無しさん
18/08/16 08:51:18.80 E47+EAA3.net
>>215
ありがとうございます。
明示的に許されていたのですね。
今回はVisual C++でコンパイルできないコードをideone上でミニマムに
再現しようとしたところコンパイルできてしまって躓いていました。
231:デフォルトの名無しさん
18/08/16 08:52:51.92 kykuKPql.net
ミニマムすき
232:
18/08/16 20:00:17.55 G1RQbz/X.net
>>221
>C11あたりからその駄目部分をカバーしてきている。
私は C++11 以降は「進んで追わない」と決心してしまった敗者ですが、
そういう敗者であっても
233:、C++11 が以前の欠点をカバーしている、というのなら、それをおききしたいです C++11 later の改良点をひとことでいうと、何なんでしょうか?
234:さまよえる蟻人間
18/08/16 20:08:00.52 x8SR5C2S.net
【C++11の改良点のおさらい】
autoキーワードにより、イテレータの型名の指定を省略できるようになった。
std::map, std::setの高速版のstd::unordered_map, std::unordered_setが使えるようになった。
初期化リストにより、初期化が楽になった。
ムーヴにより、所有権の移動を高速化できる。
235:デフォルトの名無しさん
18/08/16 20:09:53.56 vFdeRwht.net
高速なの?
安全じゃなくて?
236:さまよえる蟻人間
18/08/16 20:11:14.15 x8SR5C2S.net
範囲for文が使えるようになった。
constexprキーワードにより、さらなるコンパイル時計算の最適化が可能になった。
例外の扱いが改善された。
237:
18/08/16 20:18:14.73 G1RQbz/X.net
>>229
>例外の扱いが改善された。
kwsk
238:さまよえる蟻人間
18/08/16 20:21:54.14 x8SR5C2S.net
URLリンク(cpprefjp.github.io)
noexceptキーワードを使う方法が推奨されている。
239:さまよえる蟻人間
18/08/16 20:29:08.37 x8SR5C2S.net
noexceptがブロック単位で指定できると面白いかも。
noexcept {
int f(int n) {
return n + 1;
}
}
240:さまよえる蟻人間
18/08/16 20:34:07.08 x8SR5C2S.net
Javaのsynchronizedみたいなキーワードが使えないかなあ。
241:さまよえる蟻人間
18/08/16 20:38:48.53 x8SR5C2S.net
C++11の改良点は、性能と使いやすさを両立させるものである。
例えば、初期化リストを使えば、要素をまとめて確保できるので高速化が期待できる。
ムーヴは、コピーよりも高速である。
242:さまよえる蟻人間
18/08/16 20:59:23.33 x8SR5C2S.net
>>228
何が?
243:デフォルトの名無しさん
18/08/17 01:09:51.00 z0QZs6fU.net
>>226
素人考えだけど
vector<int> vec = {1, 2, 3};
for (auto elem : vec) {
cout << elem << endl;
}
みたいなことが出来るのは実用的にはものすごくありがたいよ
濫用して読みにくくなるのは問題だけど、決まりきった処理を簡潔に書きたい場合はむしろ読みやすくなるわけだし
244:デフォルトの名無しさん
18/08/17 02:58:27.01 dtoRpN7Z.net
>>236
そういうところが凄く便利になったね。
でも過去の負の遺産も引きづっている。なかでもcoutは特に嫌いだ。
coutは使わないことにしている。コードが汚くなって台無しだ。
245:デフォルトの名無しさん
18/08/17 05:02:15.06 xjFqJl5K.net
coutすきなぼくは異端児か
246:デフォルトの名無しさん
18/08/17 08:17:38.10 vsbGGS7B.net
スレ頭なんだけど
ルート2っていうのがそもそも代数的に定義されたもので、有理数の加減乗除で表すのは不可能
じゃあルート2が何で存在するかっていうと、その代数的性質を満たす仮の数(!)にどこまでも近づけるから
どこまでも近づくっていうのは、好きなオーダーで誤差を小さくすることが出来ることを言う
結局ルート2っていうのは任意の誤差で二乗して2になるような性質に近づく手続きのこと
誤差のオーダーを与えればそれを満たす数をただひとつ返す関数があれば
それはルート2 と数学的に同値
あんま役にたたないけど
247:デフォルトの名無しさん
18/08/17 08:58:23.19 KaaDwp63.net
そういう妄想ってなんか楽しいの?
248:デフォルトの名無しさん
18/08/17 09:58:04.64 6wrElEJt.net
>>3
sqrt(2.);
>>4
何か問題?
249:デフォルトの名無しさん
18/08/17 10:00:04.25 6wrElEJt.net
>>239
√2の定義くらい中学で習うから
250:デフォルトの名無しさん
18/08/17 10:02:47.15 PZZ50riP.net
直角二等辺三角形の斜辺以外が1の場合の斜辺な
251:デフォルトの名無しさん
18/08/17 10:56:33.19 IY1i+MSt.net
要するに数表だろ
実用的なのはデータベースで100TBくらいじゃねえの
0.0から6.24...まで0.00000000000000000000000000000001刻みで計算しとくんだろ
あとはルックアップテーブルに丸投げ
252:デフォルトの名無しさん
18/08/17 11:00:24.73 IY1i+MSt.net
計算速度は、CPUが計算するか、
CPU近くの独自回路のハードウェアで計算させるか、
CPUが三角関数の値を欲しがって遥か遠方のDBに問いかけて遥か遠方のDBから数表の値が返ってくる莫大な時間か
253:デフォルトの名無しさん
18/08/17 12:22:41.67 6wrElEJt.net
6.24...てなんだ?
ルートの計算なんて除算と同程度に速いんだから
タイムクリティカルな場所じゃなければ
毎回計算すれば良いよ
少なくともわざわざ>>13みたいにプログラマが計算しなくて良い
254:デフォルトの名無しさん
18/08/17 14:19:37.82 5jlDcaCQ.net
const WCHAR* const p = L"aaaa";
というconst WCHAR*を指すポインタ定数があるとき、
typedef const WCHAR* LPCWSTR;
と型宣言がされていると、
const LPCWSTR p = L"aaaa";
と書けるけど、このときなぜ後ろのconstが前に出てくるんでしょうか。
255:デフォルトの名無しさん
18/08/17 14:47:24.43 gx59GpAN.net
後ろでもいいはずだけど
なぜ前に出て“これる”か、ということなら
ポインタを修飾してることが明確だからかな
typedefしてないと*の後にしか書けない
256:デフォルトの名無しさん
18/08/17 15:33:34.55 5jlDcaCQ.net
>>248
これ後ろのままでもコンパイル通るんですか。
で、前でもコンパイラが理解できるからどっちでもOKと。
ただそれなら、
const const WCHAR* p = L"aaaa";
という記述も特別OKにしてもらいたかったです。
257:
18/08/17 20:08:44.29 +Gr68LyD.net
>>239
え?
一辺の長さが 1 の正方形を書けば、その対角線 √2 が静的に可視化されている、のですけれども
258:デフォルトの名無しさん
18/08/17 20:49:46.47 F1d5KQ2B.net
>>249
それだと*が2つ以上の時に困る
const const WCHAR** p
が
const WCHAR * const * p
const WCHAR * * const p
WCHAR * const * const p
のどれになるか分からん。
259:デフォルトの名無しさん
18/08/17 23:10:43.03 1w8Ax1c9.net
>>250
スレチだしレスするの迷ったんだけど
1辺が1の正方形を本当にかけるのか、対角線を引いたときに本当にルート2なのか、可視というが何が見えてるのか
って感じで、1を正確に測りとれるとか三平方の定理とか、対角線の長さを測りとれるとか
いろんな仮定が入ってる
結局仮のルート2に収束する数列とか、>>244の言う数表(ただし無限に続く)とかと同じ議論が起きちゃう
260:デフォルトの名無しさん
18/08/17 23:14:50.81 6wrElEJt.net
おまいら何百年前にされ尽くしたような議論をはじめるつもりか?
ルートなんて学校で習っただろ
261:デフォルトの名無しさん
18/08/17 23:17:45.37 uIPUTYG+.net
1/3というのはどうなんだろう
正確に三等分なんて、分子レベル素粒子レベルまでたどり着いても不可能だってことにならない?
262:デフォルトの名無しさん
18/08/17 23:19:38.08 6wrElEJt.net
コンピューターで扱う上では除算と非常に近い
(一般的には)近似値しか計算出来ないのも同じ
実は計算方法までそっくり
263:デフォルトの名無しさん
18/08/17 23:20:05.42 6wrElEJt.net
あ、先に書かれてしまった
264:
18/08/17 23:30:57.65 +Gr68LyD.net
>>252
スレチも山の賑わい…
正方形も、その対角線も、静的に
265:存在しており無限の過程を認識する必要はないでしょう? その対角線を、例えば 10 進法表記に対応させるときに、無限の過程が発生するだけで アキレスと亀の話と似ている気がします
266:デフォルトの名無しさん
18/08/18 00:14:18.80 lTbYGycG.net
もちろんデータとして扱う時は十進対応させなきゃ行けないので、有理数の加減乗除の届く範囲で近似が必要になる
ただ実数と有理数の間には実際にでかい隔絶があって、自然数からの加減乗除による拡大は有理数で止まる
あと本物の正方形を誰が見たこともないように、正方形や円っていうのは仮定の上にあるもの
実数の存在を正方形や円(パイ)に求めるのは、結局その仮定を無意識のうちに使用しているだけ
267:デフォルトの名無しさん
18/08/18 00:14:34.27 lTbYGycG.net
もちろんデータとして扱う時は十進対応させなきゃ行けないので、有理数の加減乗除の届く範囲で近似が必要になる
ただ実数と有理数の間には実際にでかい隔絶があって、自然数からの加減乗除による拡大は有理数で止まる
あと本物の正方形を誰が見たこともないように、正方形や円っていうのは仮定の上にあるもの
実数の存在を正方形や円(パイ)に求めるのは、結局その仮定を無意識のうちに使用しているだけ
268:デフォルトの名無しさん
18/08/18 00:28:57.66 9sBD2gG5.net
大事なことなので
269:デフォルトの名無しさん
18/08/18 00:36:22.64 gititOy1.net
脱線ついでに、
3次元の立方体はイメージ出来るけど、
4次元の立方体ってイメージ出来る物なのかな?
訓練を積んだ数学者なら出来るの?
例えば3次元立方体を2次元平面で切断したときに出来る図形と同様に
4次元立方体を3次元空間で切断wしたときに出来る立体をイメージ出来るの?
270:デフォルトの名無しさん
18/08/18 00:49:01.48 lTbYGycG.net
>>261
イメージ出来るって言うのを、頭のなかで回転したり任意の方から光を当てて影を見たり切断面かいたり
出来ることだとすれば四次元は比較的いける。その辺が専門の大学院生ならイメージできる
正多胞体(多面体、多角形の四次元ばーじょん)も発見されてるし、だいぶ見えてると思う
五次元もいける数学者が数人いるという噂もある
271:デフォルトの名無しさん
18/08/18 00:55:50.62 9sBD2gG5.net
高次元だとイメージよりアナロジーが先行するかな自分の場合
立方体より単体のほうがイメージしやすいが
立方体だと[0,1]^nに微分同相とかきっとそんなん
272:デフォルトの名無しさん
18/08/18 01:07:54.17 gititOy1.net
>>262
やはりスゴイと言うしかない
そういう人なら、ゴムボールを切らずに裏返しにする事も出来そうだ
勿論、頭の中でだけど
273:デフォルトの名無しさん
18/08/18 04:51:32.26 bmeyL4DX.net
>>261
切断wという予測変換に驚き
274:デフォルトの名無しさん
18/08/18 16:12:57.62 sAtTg2RR.net
>>239
√2は手続きではないだろう。
1に1を足した数に2ってラベルがついてるのと同じで、
(√2)^2=2となるような無理数にラベルがついてるだけ。当然2の平方根に完全に一致する。
そして誤差のオーダーを必要とする時点で近似的な取り扱いしかできないということになるのだから、
√2が必要であれば√2として持つしかないだろう。
10進小数点表記で任意精度で表すためにはその手続きが必要となるだろうけど。
275:デフォルトの名無しさん
18/08/18 16:29:04.35 H8XUQRKC.net
2は自然数の加減乗除で表せる(というかそれが定義)けど、ルート2はかけない
じゃあルート2の定義はっていうと、方程式の解であって、1と2の間に存在しそうだけど本当にあるの?って話
結局新しい仮定が必要になってきて、それが収束有理数列と同値で、この列は手続き=関数と同値
なんかスレチで荒らしてすまんな
困難わかってても実際はあまり役にたたたないし
276:デフォルトの名無しさん
18/08/18 17:52:26.48 sAtTg2RR.net
>>267
それは正の数の平方根数が実数上に確かにある存在の証明の手続きでしかないよね
実際に任意精度で√2を求められる関数を使って(√2)^2が2になるか確認するには無限の時間がかかるよね
正の数の平方根数が実数上に確かにあるという前提に基づけば単に√2は(√2)^2が2になる性質を持った無理数、
といった形で取り扱えば十分だし、「√2は手続きだ」は言い過ぎじゃないかな。
それを言い出したらほぼ全てが手続きになってしまう。「数学的に同値」というのは「√2は手続きでも表せる」ってだけでしょ。
277:デフォルトの名無しさん
18/08/18 19:07:39.30 Ruc+zSzi.net
>>264
4次元の立方体なんてイメージとしての意味をなさないだろ。w というか各辺が4mの
4次元立方体なら「各辺の長さ=4m」且つ「各々の辺が互いに直行する」というだけの話だから、
Leng(a,b,c,d) =(4,4,4,4)
cross(a,b) =true ; cross(a,c,)=true: cross(a,d)=true;
ってことだけだろ。
性質として体積は4^4 とか表面積は=ん?になるとか
一寸考えれば誰でもイメージを膨らませることはできる。
278:デフォルトの名無しさん
18/08/18 19:51:41.56 gititOy1.net
>>269
一応ね、
4次元超立方体同士がすれ違うときに
接空間を頭の中に描けるかどうかかな
さらにそれらが自転していたらどうかとか
279:デフォルトの名無しさん
18/08/21 20:26:27.42 3mimrG+c0.net
モダンなC++はnewしたのdeleteしなくても自動でやってくれるって聞いたけどガセ?
ちゃんとスマポ使わないと漏れますよね?
280:さまよえる蟻人間
18/08/21 20:29:13.48 H0lJZ+G5.net
ガセっつうか、ウソだよな。
281:デフォルトの名無しさん
18/08/21 20:33:14.11 oNgzJjko.net
輝くトラペゾヘドロンかすれ違い
282:デフォルトの名無しさん
18/08/21 20:33:53.94 Rfqd4rGm.net
プロセス終了させたときにdeleteされるとかそんなオチ
デストラクタが走らないからそれもないか
283:デフォルトの名無しさん
18/08/21 20:34:16.90 FuTngql1.net
>>271
プロセスが消える時に全て消える
284:デフォルトの名無しさん
18/08/21 21:21:07.83 2u+Qiv0I.net
スマポとGCの違いって何さ
285:デフォルトの名無しさん
18/08/21 22:33:32.03 r2zII1ha.net
newしたポインタはスマポで管理して自分でdeleteを書く必要がないっていう話が
文章読めない人の中でねじまがったんだろ
286:さまよえる蟻人間
18/08/21 22:52:47.19 H0lJZ+G5.net
スマポは自分でメモリーを管理するが、GC方式は管理をGCに任せる。
287:デフォルトの名無しさん
18/08/30 06:57:53.59 kCgj5iLA.net
入門書ロベールで使い方の説明もなくunsigned charという型をでキャスト演算してるのですが
unsigned charはcharより沢山文字が格納できる型ってことであってますか?
またsize_tは整数型ってことであってますか?
288:デフォルトの名無しさん
18/08/30 07:13:58.56 Hf5mdE4J.net
>>279
合ってない
289:デフォルトの名無しさん
18/08/30 07:23:29.48 kCgj5iLA.net
あってないですか..
ロベールにもろくに説明ないので弱りましたね(+_+)
Size_tはアドレスを整数値に直すのに使ってたり関数の戻り値に使ってる例題があったので
整数を表すなにかと思ってたんですが違ってます、か
ググってみてもイマイチ分かりません
URLリンク(www.wdic.org)
290:デフォルトの名無しさん
18/08/30 08:43:34.49 GbaSH31o.net
ロベールって人の本は読んだことない(ネット公開版は少し見た)けど、
もっと先に進めば unsigned の使いどころとか size_t の説明とかが
詳しく載ってるって構成じゃないの?
この時点でコードの細かい部分まで理解する必要はない、てな感じで。
疑問は疑問として(忘れずに)保留しておいて、とりあえず読み進むのも手かと。
291:デフォルトの名無しさん
18/08/30 08:53:18.15 kCgj5iLA.net
char ch='C'
cout<<(int)(unsigned char)ch<<endl;
これは何をやってるコードなんですか?キャストって2つ一変に使えるんでしょうか。
特にコード自体に意味はなく文字は数字で表現されてると伝えたかったんでしょうか?
ロベール入門は章の冒頭から応用みたいな例題出すから意味がわからなくなります
292:さまよえる蟻人間
18/08/30 09:21:44.13 84fjp1F/.net
符号つき整数や符号なし整数のビット表現とかわかってないと、難しいんちゃうか?
293:はちみつ餃子
18/08/30 12:59:10.03 8c0RjkhV.net
でも、言語仕様的にはビット表現に関する規定ってあんまりないんよね。
未定義な部分や処理系定義な部分もあるので、
ビット表現で考えていたら言語仕様的には実は未定義みたいなのに引っかかってそれはそれでぐぬぬぬぬってなることもある。
char については歴史的事情でややこしいのは確かだと思う。
char が符号付きか符号無しかは処理系定義だが、
char が符号有りだったとしても符号無しだったとしても signed char とも unsigned char とも違う独立した型になっている。
>>283
char が符号付きとして定義されていた場合に int にそのままキャストすると符号拡張されるから、
それを抑制するためにいったん unsigned char を経由したのではないかと考えられるが、
入っている値が 'C' であることが確定しているならば負数ではない値で表されることは保証されているので、
unsigned char にキャストする意味なく、いきなり int にキャストしても結果は同じ。
294:デフォルトの名無しさん
18/08/30 16:08:50.62 GbaSH31o.net
charの変数chを(ASCII文字でなく)1byteの数値を格納するために使う場合、
単なるcharがsignedかunsignedかは処理系依存だから、
変数に格納された値を正整数(一般に0-255)としてダンプしたいときは
いったん unsigned char にキャストしてから int にキャスト、
すなわち (int)(unsigned char)ch と書くのが確実であり良い習慣である。
……てな感じかなぁ。おそらく初心者にはサッパリ分からないだろうけど。
static_cast<int>(static_cast<unsigned char>(ch)) じゃろとか
そもそも 0-255 の範囲の数値なら unsigned char で変数宣言すべきとか、
ツッコミどころも色々あろうが、きっと後のページで説明されるよね。
295:デフォルトの名無しさん
18/08/30 16:35:06.48 nDsa3YKs.net
unsigned charに変換しとけば
intには勝手に変換される
296:デフォルトの名無しさん
18/08/30 16:45:57.86 GbaSH31o.net
>>287 いや、その点は試したんだ。俺の環境では…
char ch = 'C';
cout << (int)(unsigned char)ch << endl; // 67 と表示される
cout << (unsigned char)ch << endl; // C と表示される
少なくとも unsigned char が必ず int に変換されるとは言えない。
自動的に変換される処理系もあるかもしれんが、それはそれ。
297:はちみつ餃子
18/08/30 17:36:17.31 8c0RjkhV.net
>>287-288
>>283 のケースで int への明示的キャストを外すと int へは変換されない。
std::operator<< がいくつかの基本的な型に対応するようにオーバーロードされている内には
unsigned char のシグネチャを持つものも用意されているので、
unsigned char 型の引数が与えられればそのままマッチする。
変換が挟まる余地はない。
298:286 == 288
18/08/30 17:37:27.96 GbaSH31o.net
たびたび失礼。
「試すんじゃなくて規格でどう動くべきか語れ」と言われればその通りだけど、
俺の能力を超えているということで。より有能な人の援護を期待。
299:デフォルトの名無しさん
18/08/30 23:00:44.23 kCgj5iLA.net
>>282->>285286
ありがとうございます
せっかく回答貰ったのですがunsigned charがどういう型なのかとかそういった説明が
本書で無いのでやはり何度読み返しても理解できませんでした
今は文字を符号なしの整数に直すおまじないってことで覚えておこうと思います
300:デフォルトの名無しさん
18/08/30 23:14:11.82 /0YXnEsV.net
まず補数についてお勉強しなさい
まずそっから
そしてそれを8bit、16bit、32bitで表現するとどうなるか
考察しなさい
わかった?
301:デフォルトの名無しさん
18/08/31 00:08:27.43 4ZfpOo1s.net
URLリンク(ideone.com)
どっかから拾ってきた関数のソース(なんかのlibcのソース)をコピペして
signed charとunsigned charの2進表現をダンプしてやったから
補数のお勉強が捗ったら、あとで参考にしなさい
302:はちみつ餃子
18/08/31 00:18:16.04 NWzNDPzW.net
繰返すが、言語仕様上はビット表現についてたいした決まりがあるわけではない。
表現できる範囲に着目した方が理解しやすいんでないかなぁ。
303:デフォルトの名無しさん
18/08/31 00:19:55.81 4ZfpOo1s.net
決まりがなかったら
ビット演算なんかできない
バカのいうことなんか
ほっといていいからな
304:はちみつ餃子
18/08/31 00:26:44.11 NWzNDPzW.net
実際に決まってないもんは決まってない。
1 の補数を使うようなのも許されるし、実際に存在する。
ポータビリティに配慮しなければなんでも出来るのが C/C++ の良いところだが、
ガチで規格を把握しようとすると未定義の罠だらけなんよな。
305:デフォルトの名無しさん
18/08/31 00:27:45.45 4ZfpOo1s.net
きっとバカのオツムでは
リトルエンディアンとビッグエンディアンの計算機では
ビット演算の結果がかわる
もしくは変わるようなクソみたいなコードを書く
もう察しがつくのが怖いわ。。。
306:はちみつ餃子
18/08/31 00:30:09.11 NWzNDPzW.net
少なくとも >>293 の結果は言語仕様的に保証されない
307:デフォルトの名無しさん
18/08/31 00:42:21.23 4ZfpOo1s.net
uint32_t aho;
unsigned char* baka = (unsigned char*)&aho;
知恵遅れはこんなことを平気でする
そして計算機によって結果がかわっておかしいおかしいとかいうワケ
308:はちみつ餃子
18/08/31 01:19:33.15 NWzNDPzW.net
関係ないことに話題を広げないでくれよ……。
309:はちみつ餃子
18/08/31 01:29:11.81 NWzNDPzW.net
数値のビット表現に2の補数が使われるとは限らないってだけの話な。
310:デフォルトの名無しさん
18/08/31 06:31:48.92 Df6BGOL7.net
>>292
キャストの必要性と負の数の内部表現は全く関係ないように思うけど
311:デフォルトの名無しさん
18/08/31 06:35:22.71 Df6BGOL7.net
負の数の内部表現は
少なくとも以下の3種類は存在する
1の補数
2の補数
符号ビット
マイナスゼロはトラップ値として使ったりする
312:デフォルトの名無しさん
18/08/31 08:21:09.97 kqLurM/K.net
URLリンク(ideone.com)
すいません↑の29行目のコードって何してるんですか?
int size = sizeof student / sizeof *student;
sizeofで studentと*studentが3に化けて 3,3で割り算して1じゃないんですか
意味がよく分かりません;
313:デフォルトの名無しさん
18/08/31 08:43:55.47 CKe+Ima+.net
>>304
配列の定義が見えてる場合 "sizeof 配列名" は配列全体の総バイト数になるのよ。
対して "sizeof *配列名" は "sizeof 配列名[0]" と同じで配列要素1個のバイト数。
配列全体のバイト数 / 配列要素1個のバイト数 == 配列の要素数
配列の要素数を知るためのイディオムだな。
ちなみに sizeof student も sizeof *student も 3 にはならないと思うよ。
むしろ sizeof student / sizeof *student の計算でようやく 3 が得られる。
314:デフォルトの名無しさん
18/08/31 08:48:39.35 B6cJ6E2C.net
>>304
配列の要素数を計算しているかと
sizeof studentは、配列のバイト単位の長さ
sizeof *studentは、student型のバイト単位のサイズ
315:デフォルトの名無しさん
18/08/31 10:31:41.89 kqLurM/K.net
>>305-306
これ割り算じゃないんですね
なんとなく理解できました。ありがとうございます
この方法を使うと配列が増えてもループのとこ書き直さなくてもいいということですか
316:デフォルトの名無しさん
18/08/31 11:51:09.55 B6cJ6E2C.net
>>307
割り算だよ
バイト単位で配列のサイズ(個数)を算出しているだけ
>この方法を使うと配列が増えてもループのとこ書き直さなくてもいいということですか
そう
317:はちみつ餃子
18/08/31 18:49:29.63 NWzNDPzW.net
>>302
そう。 キャストについてはビット表現は関係ない。
だから (規格ではっきり決めていない) ビット表現を中心に理解し�
318:謔、とするのは余計なことだっていう主張ね。
319:デフォルトの名無しさん
18/08/31 19:17:02.43 CKe+Ima+.net
でも具体的なビット表現、0か1がいくつか並んだものを見せて
「符号なしなら数値として~、2の補数表現なら~と解釈される。
それを符号拡張なりゼロ拡張なりすると…」
という具合に教えた方が理解は容易な気がするよ。
「規格では(値の範囲は決まっているが)ビット表現は決まっていない」の
一点張りで、抽象的な説明だけをしても分からんでしょ。
とりあえずcharは8ビット、負数は2の補数表現、のモデルで
話が飲み込めれば、その先のcharが8ビットじゃない処理系や
負の数の表現方法が異なる場合に進める。
どうせ大半の処理系は8ビット・2の補数だから無駄にもならんし。
8ビット・2の補数に凝り固まることのないよう、気をつけて教えるってことで。
320:はちみつ餃子
18/08/31 20:21:33.49 NWzNDPzW.net
>>310
俺も先にアセンブラを触ってたタイプだからビット表現からの理解をしたのでそれが自然なんだけど、
0 と 1 の集まりで表される世界が、
表現範囲が決まっているという考え方よりも感覚的にわかりやすいだろうかと冷静に考えると
一般的にはそうでもなくない? って思えてるってのもある。
レイヤを分けて考えるってのはそんなに簡単ではないよ。
「コンピュータの中でこう処理されている」というのを知った上でそれを忘れて (抽象の壁の向こうに追いやって)
「言語の考え方 (規格) ではこうなっている」という理解を持てるかどうか……。
どうせ C を使ってるとやっぱり現実のコンピュータが透けてみえちゃうんだから、
「言語の考え方はこう」というのを押さえておけば
あとは自動的に「それを実現するために内部ではこうなっている」という風に理解していけると思うんだがなぁ。
321:デフォルトの名無しさん
18/09/01 00:56:02.54 8bxP8UXu.net
>>311
具体的なものがあるからこその抽象化じゃないの。
抽象化したものだけでは具体的に動かすことができないから理解するのは難しいでしょ。
322:はちみつ餃子
18/09/01 01:29:32.00 0H62RJv3.net
>>312
アセンブラの色々を自動化したみたいな立場からのスタートだから、
歴史的には具象から抽象へという形で成立しているが、
あくまで C を学び始めた人のスタート地点として、
「ビット表現、あるいは範囲が決まった値のどちらがなじみやすいか」という話。
普通の人が日常的に数値を扱うことはあるし、
その中には上限・下限が決まっているということもある。
でも、 0 と 1 の集合で表現するという考え方を日常的にしている人はかなり少数派だよ。
馴染みやすい方から入って行って最終的に「なるほど内部ではこう表現されるのか」
に至るのってそんなに不自然な道筋かな?
323:デフォルトの名無しさん
18/09/01 11:33:31.89 8bxP8UXu.net
>>313
だから具体的に動作させられる環境がないと勉強出来ない。
小学校で1+1を学んで中学でx+yのように抽象化してきたでしょ。
324:はちみつ餃子
18/09/01 13:35:02.88 0H62RJv3.net
>>314
数値型変換の規則とかも数値として決まってる。
動作させるのにビット表現で考える必要は無いだろ。
なんらかのビット表現を割り当てて動作はするけど、
そりゃコンパイラの考えることで、
人が最初からどうしても把握しておかなきゃならないもんではない。
325:デフォルトの名無しさん
18/09/01 14:58:35.23 lb2h//8s.net
>>315
ビット表現を最初から考えておく必要も把握しておく必要もないけど、具体的な実体を知っていた方がイメージしやすく理解しやすいと思う。
そこまで忌避する理由が分からない。
326:デフォルトの名無しさん
18/09/01 15:48:37.66 GfEkw2/x.net
多倍長計算涙目
327:デフォルトの名無しさん
18/09/01 16:37:00.14 /wwW4VSs.net
頭悪いからビット演算できないと自白してる
328:はちみつ餃子
18/09/01 16:46:00.86 0H62RJv3.net
>>316
繰返すが、数値のビット表現は世間一般の感性からすると全く異質だ。
だから「(いきなり最初には) イメージしやすくない」と言ってるの。
無理してでも最初に身につけられたら後が楽ってことはあるかもしれんが、
イメージしやすいってことは無い。
ビット表現は C に慣れた人にとってあまりにも当然の大前提すぎて、
それをわからん奴にはだいぶんイラつくが、
すんなりとは納得できない方が普通だよ。
329:デフォルトの名無しさん
18/09/01 16:47:02.21 /wwW4VSs.net
はいはい
頭悪いからビット演算できないと
だからどうした
330:はちみつ餃子
18/09/01 16:50:28.48 0H62RJv3.net
>>318
入門者の大多数が (十分に) 頭が良いと想定するのはそれこそ馬鹿げた判断だ。
とんでもない方向の思い違いが勢ぞろいなのが普通。
331:デフォルトの名無しさん
18/09/01 16:56:01.26 /wwW4VSs.net
健常者に届かないぐらい頭悪いから
オレはビット演算はあきらめた
と自白されても困るワケ
332:デフォルトの名無しさん
18/09/01 17:10:11.60 3YNLHjk8.net
外野から見ると自分は頭が良いと思い込んでそうなID:/wwW4VSsよりはちみつの方が賢そう
333:デフォルトの名無しさん
18/09/01 17:11:33.86 /wwW4VSs.net
オレは頭いいとか
ひとことも書いてないからな
キミラが健常者に程遠いほど
頭悪いわけ
それがわからない?
334:デフォルトの名無しさん
18/09/01 17:12:36.29 /wwW4VSs.net
まず途方もないほど頭悪いという自覚がない
それが致命的
バカを自覚できないからバカが治らない
335:デフォルトの名無しさん
18/09/01 17:14:33.25 np0z0HoI.net
はちみつさんの主張「初心者にビット表現から教える必要はない」を
当人がビット演算できない僻み、とか捉えるのは明らかに間違いだろ。
対立が昂じて厳しい言葉を使いそうになった場を茶化すのは俺も好きだけど。
(余計に険悪になったところで「お呼びでない…」と立ち去る流れまで込み)
実際のところ「初心者に2進数での数値表現を理解させることが困難か?」
については、今なら「コンピューターの中ではゼロイチで情報が記憶される」
くらいの基本知識は持ってるだろうから、昔よりは敷居が低いんじゃないかな。
…とは言え自分もマシン語ハンドアセンブル相対ジャンプ暗算から
入ったクチだから、経験に基づいたバイアスが強いかも知れん。
ビット表現を使わず初心者に説明する良い資料があるなら読んでみたい。
たぶん得るところは大きい。
336:デフォルトの名無しさん
18/09/01 19:35:38.40 iulr/33e.net
"はちみつ餃子"でググってもそういうのが出てこない…
337:デフォルトの名無しさん
18/09/01 20:41:28.08 V3Jbt1LZ.net
>>326
必ず半角カナを使ってレスしてるいつもの人は、常に持論は正しく相手は低能というスタンスで一方的に断定しかしないから、深く考えても仕方ないよ。
半角君のいってることはまともなこともあれば的はずれなこともあるけど、常に共通するのは周りの指摘や疑問には耳を貸さず、議論の流れも無視して自分の主張を繰り返すだけということ。
だから、斜め読みして受け流すだけでいいと思うよ。
338:デフォルトの名無しさん
18/09/01 20:56:42.17 /wwW4VSs.net
なるほど
知恵遅れは議論したつもりになってんのか
知恵遅れの場合議論できるレベルに到達してない
まずそこの自覚がない
339:デフォルトの名無しさん
18/09/01 21:11:37.01 DoChZsV8.net
C形式の二次元配列は先頭から一次元配列みたいな顔して普通にアクセスできると思うんですが
C++11以降でネストしたstd::arrayでもポインタを使って一次元配列のようにアクセスしても規格上セーフですか?
↓のコードのようにforループ一つで上下左右方向の繰り返しを済ませたいです
URLリンク(ideone.com)
340:デフォルトの名無しさん
18/09/01 22:08:01.79 /wwW4VSs.net
1次元の可変の列を行とみなして
そのそれぞれの行に可変の1次元の列がある状態になってる
つまり、行毎にバラバラにそれぞの行のヒープができる作りになる
そもそもC++の規格とか関係ない
低学歴であれば低学歴であるほど
言語の規格なんかぜんぜん分かってないくせに
自分を大きくみせるために言語の規格がどうこういってるのだけは
よおく分かったわ
341:330
18/09/01 23:53:24.94 DoChZsV8.net
>1次元の可変の列を行とみなして
>そのそれぞれの行に可変の1次元の列がある状態になってる
>つまり、行毎にバラバラにそれぞの行のヒープができる作りになる
というのはどういうことでしょうか
行ごとにバラバラなので行をまたいでのアクセスはできないという意味でしょうか
C形式の多次元配列もネストされたstd::arrayも、各要素は連続したメモリ領域に置かれていますよね
というかC形式の(少なくとも)二次元配列は一次元配列として全要素にアクセスできると思っていたのですが
間違っていますか?