X



【初心者歓迎】C/C++室 Ver.103【環境依存OK】
■ このスレッドは過去ログ倉庫に格納されています
0502デフォルトの名無しさん
垢版 |
2018/10/14(日) 12:48:33.48ID:gKOdVSwA
>>501
MFCに限らず、UIスレッドの関数内で10秒もSleepで待つのはダメ。
そのウィンドウをユーザーが操作したら「応答なし」と表示されてしまう。

OnTimerで定期的に監視し続けるなり、
独自のメッセージを送って終了を通知するなりしないと。

もちろん、その間は
×ボタンを含めてすべてのコントロールを操作不可にしたり、
ユーザーが閉じられない別ダイアログをモーダルで出したりする対応も必要。
0503デフォルトの名無しさん
垢版 |
2018/10/14(日) 13:21:17.04ID:G4e8iFcg
いまどきのSleepは他プロセスを止めたりはしないぞ
0506デフォルトの名無しさん
垢版 |
2018/10/14(日) 16:30:02.81ID:nFpB0nHw
本来ダメなんだけどエクセルとかも盛大にUIスレッドで長期間マクロ実行したりするからね
数秒くらいならいいんじゃないの
金とってプログラム作ってる風でもないし
0507デフォルトの名無しさん
垢版 |
2018/10/14(日) 16:40:58.09ID:qQZu4oFT
>>506
Sleepで待ちたくなるということは、処理自体は
別スレッドなり別プロセスなりで動いているのだと思ったが
0508デフォルトの名無しさん
垢版 |
2018/10/14(日) 16:46:29.33ID:nFpB0nHw
俺はメインスレッドでそのまま何かやってると感じたな
sleep の挙動を5ちゃんで質問する人がすでにワーカスレッドを使ってるとは全く想定しなかった
0511デフォルトの名無しさん
垢版 |
2018/10/15(月) 07:46:47.81ID:PSoKrj1X
なんかえらい反感買っちゃったな
Sleep知らなくてもワーカスレッドは使ってるだろうという>>507の方が普通の感覚なのかな
0512デフォルトの名無しさん
垢版 |
2018/10/15(月) 10:28:47.73ID:/DZZgAIK
みなさん判りましたか
条件後出しするとこうなります
0515デフォルトの名無しさん
垢版 |
2018/10/21(日) 19:42:24.72ID:zGGokTqn
tupleの要素取り出すときstd::get<>以外の方法ありますか?
tuple[index]みたいに取り出せたら良いんですけど
0517デフォルトの名無しさん
垢版 |
2018/10/22(月) 16:17:14.28ID:H1W4+XYR
>>515

tuple の要素が char * だとして

std::vector<char *> vec;
int i = 0;
std::_For_each_tuple_element(t, [&h, &i](auto&& v){
printf("%d: %s\n", i++, v);
vec.push_back(v);
});
0518デフォルトの名無しさん
垢版 |
2018/10/22(月) 16:18:27.73ID:H1W4+XYR
ああ
色々間違ってるけど適当に読み替えてくれ
0519デフォルトの名無しさん
垢版 |
2018/10/22(月) 18:32:15.28ID:N4Dlk9u9
std::apply 呼んだ方が良いかな
0521デフォルトの名無しさん
垢版 |
2018/10/23(火) 08:46:28.85ID:0c85p6oM
すごく初級の質問なんですが、
int * x =3;
auto y=*x;
としたときに、コンパイラがyの型をintと推測するのはなぜでしょうか?
ポインタのポインタになるので、最初の*でint型の変数のアドレスを示すことになるまでは分かるのですが、
その後の*でアドレスのアドレス?を指すことになるので、元のint型の値を指すのは違うように思えてしまいます。
0522デフォルトの名無しさん
垢版 |
2018/10/23(火) 08:57:12.64ID:el+h+kWN
x は 0x00000003をアドレスとして認識
y(*x) は int型アドレス0x00000003にある値を指す
アドレス(x)のアドレスを指す場合は &x になる
0523デフォルトの名無しさん
垢版 |
2018/10/23(火) 11:21:13.83ID:1h9PfZX9
多分、変数yの型が省略されているから、
デフォルトのintと推定して処理しているのだろう
0525デフォルトの名無しさん
垢版 |
2018/10/23(火) 12:26:32.22ID:0c85p6oM
>>522
ありがとうございます。
ということは*がついてる変数は、変数がアドレスのときはそのアドレスに収納されてる値を指し、変数がアドレスに収納されてる値のときは、そのアドレスを指すという理解でよろしいんでしょうか?
0526デフォルトの名無しさん
垢版 |
2018/10/23(火) 12:51:45.73ID:wh2qZljY
>>525
違うよ。
型名の一部としての*と、式の中の演算子としての*が別物だと言うのは分かる?
1行目の方は「intをさすポインタ」という型を表すためのもの。
2行目は「xというint型の変数の値に対して、その値が指しているメモリ領域上にあるint型の値を参照する」という演算を行うというもの。
0527デフォルトの名無しさん
垢版 |
2018/10/23(火) 13:02:04.09ID:LNtdy1l4
この変数はポインタです 宣言の *
ポインタで指している先の内容を得ます 式の *
0529デフォルトの名無しさん
垢版 |
2018/10/23(火) 14:23:01.94ID:LNtdy1l4
Firefox だと右上メニューからエンコーディングで明示的に EUC-JP 指示で化け解消
(unicode にチェックが入ってたが、自動だとそっちに誤爆判別してた?)

Chrome での明示的なエンコーディング変更は拡張プラグインつっこまないとできないっぽい
0530はちみつ餃子 ◆8X2XSCHEME
垢版 |
2018/10/23(火) 16:21:42.79ID:L3KABBTH
C/C++ のポインタの表現が分かり難いってのは確かにあると思う。

宣言のときも * は変数名の側にくっついているものと考えれば理解しやすいんじゃないかな。
int * x; と宣言したとき、 *x が int であるような x を宣言したことになる。
0531デフォルトの名無しさん
垢版 |
2018/10/23(火) 16:53:31.99ID:yFsvvFWj
Cの頃は
int *hoge;
と書くことが多かったのに、

C++になってから
int* hoge;
と書く人が増えた。

悪い習慣だと思う。
0532デフォルトの名無しさん
垢版 |
2018/10/23(火) 17:02:30.81ID:oFF/C26V
Javaとかから入る人が増えたからかね?
その習慣はあかん。
ポインタは型じゃないから、例えば

int* a,b;

って書くとaは「int型のポインタ」で、bは「int型の変数」になる。
0533デフォルトの名無しさん
垢版 |
2018/10/23(火) 17:05:53.09ID:J7zWeAP4
ハゲのせい
0534はちみつ餃子 ◆8X2XSCHEME
垢版 |
2018/10/23(火) 18:09:41.43ID:L3KABBTH
>>532
いや、そこらへんは C/C++ のおかしなところで、ポインタはあくまでも型だ。
その上で文法上は * は変数名の側と結合するの。

もういっそ
std::add_pointer<int> a, b;
のスタイルを普及させればいいんじゃないのかなーと思う。
C++ だとなるべくスマートポインタを使う習慣が出来つつあるから、
その記法とも一貫性があるし。
0535デフォルトの名無しさん
垢版 |
2018/10/23(火) 19:19:19.30ID:6eYDBZzc
>>532
ポインタは型じゃないって言ったとき
じゃあなんて言うんだっけ
仕様でも厳密にはなんか型とは別のカテゴリとして扱われてたよな
仕様に詳しい人教えて
0536デフォルトの名無しさん
垢版 |
2018/10/23(火) 19:36:08.31ID:ArZ/Inm7
型変換は (型)式 と書くわけで型を単体で書く書き方はあるのに変数宣言は
型 変数[, 変数]...
じゃないからねえ

void f(void);

void (*f_ptr)(void) = f; // ふむ
void (*g_ptr)(void) = (void(*)(void)) f; // 関数ポインタ型の記法はこうか…
void (*)(void) h_ptr = f; // 型 変数で書いてみた→エラーかい!

みたいな
0537デフォルトの名無しさん
垢版 |
2018/10/23(火) 19:49:01.78ID:36KTqSlz
初期化リストで二次元配列を0で初期化したいときはどう表記したら良いですか?
0538デフォルトの名無しさん
垢版 |
2018/10/23(火) 20:01:35.24ID:ArZ/Inm7
初期値式リストの個数が足りない場合残りの要素は0で初期化されるので

int a[5][6] = {};

でok
0541デフォルトの名無しさん
垢版 |
2018/10/23(火) 22:10:00.30ID:cC1ZIpo7
初期化値リストをつければ足りないところは0で埋められる
付けなければ初期化されない
太古から変わらない仕様
0542デフォルトの名無しさん
垢版 |
2018/10/23(火) 22:13:12.65ID:HIyGo7BY
あ、でも c だと空の初期化リストは書けないから {} じゃなく {0} にしなきゃダメか
0543はちみつ餃子 ◆8X2XSCHEME
垢版 |
2018/10/24(水) 00:07:31.69ID:PadB6FUj
>>535
変数宣言の基本的な形式

型指定子 宣言子1, 宣言子2, …;

で言うと * は宣言子の一部ということになるが、
型指定子でないから型 (の一部) ではないというわけではない。
これは文法上の呼び名に過ぎず、
意味論的にはポインタは型の一部だよ。
0544デフォルトの名無しさん
垢版 |
2018/10/24(水) 00:25:51.42ID:shD/xjVg
視点の問題ではあるが宣言の構文上のポインタは型の種類ではなく入れ物の種類ともいえる
int *a, b;

int pointer a, int variable b;
を意味する省略構文であり意味論的に
variable:値をいれるもの
pointer:間接的に他の入れ物を指すもの
と区別されてると見ることもできる
0545デフォルトの名無しさん
垢版 |
2018/10/24(水) 00:41:21.11ID:ht/B3MxL
>>544
そういうのは単純なポインタ(foo*)の時にだけ通じる話で、配列や関数ポインタや引数込みでのそれらの再帰的な組み合わせとかも考えたら、きちんとBNFで理解して型の宣言の構文を定義通りに覚えるのが一番誤解がなくてシンプルだと思うよ。
0546デフォルトの名無しさん
垢版 |
2018/10/24(水) 00:41:23.34ID:8GMcdoBP
>>543レスサンクス
自分でも調べてみた
手元のc99ドラフト版から適当に抜粋

declaration:
 declaration-specifiers init-declarator-list ;

declaration-specifiers:
 storage-class-specifier declaration-specifiers
 type-specifier declaration-specifiers
 type-qualifier declaration-specifiers
 function-specifier declaration-specifiers

init-declarator-list:
 init-declarator
 init-declarator-list , init-declarator

init-declarator:
 declarator
 declarator = initializer

declarator:
 pointer direct-declarator

pointer:
 * type-qualifier-list
 * type-qualifier-list pointer

宣言時の * は declarator なんやね構文としては
0547デフォルトの名無しさん
垢版 |
2018/10/24(水) 00:47:37.13ID:pa4PW987
>>535
詳しい人とかハードル上げられるとな。。。
プログラミング言語C売っちゃったから、厳密な仕様は記憶の彼方だが、ポインタは厳密なカテゴリ的にもポインタだったと思う。

ここからは私の解釈だが、ポインタはアドレスを入れる「変数」。
当たり前じゃんと言われればそうなんだけど、感覚的にも型というより変数って感じ。

ポインタに型があるとすればOSがアドレスを扱うビット数と同じになる。
intとかの型はポインタが指す先にどの大きさのどういう扱いのデータがあるかを知る為で、ポインタ型そのものの大きさは変わらない。

んで、普通の変数とポインタはCだと大分違うように思うけど、アセンブリ言語だと

LD GR0,TEXT ; 変数TEXTの内容を読む。
LDA GR0,TEXT ; 変数TEXTのアドレスを読む。

程度の違いしか無いわけね。

この場合、内容もアドレスもレジスタが読むけど、Cにレジスタに相当する変数を用意する為にポインタが生まれたんだと思う。
0549デフォルトの名無しさん
垢版 |
2018/10/24(水) 00:54:55.11ID:pa4PW987
x Cにレジスタに
o CにLDA使用時のレジスタに
0551デフォルトの名無しさん
垢版 |
2018/10/24(水) 01:36:02.36ID:uSP3iZ9v
>>538
ありがとうございます説明が足りなかったかもしれません
メンバ変数の配列をコンストラクタでリスト初期化する場合どうしたらいいですか?
Hoge::Hoge() : mPiyo(0) ←これの二次元配列版を知りたいのです
0555デフォルトの名無しさん
垢版 |
2018/10/24(水) 11:21:48.24ID:wUNs4a59
> void (*)(void) h_ptr = f; // 型 変数で書いてみた→エラーかい!

当然知ってると思うけど

void (*h_ptr)(void) = f;

これは * と () の優先順位が原因だ

よく * と [] で混乱してるひともいるけど

char **hoge;
char *hoge[];
char (*hoge)[123]:
char (*hoge)[]: // エラーかい!
0556はちみつ餃子 ◆8X2XSCHEME
垢版 |
2018/10/24(水) 11:24:53.60ID:PadB6FUj
>>551
今では (C++11 以降では) 宣言時に初期化も書けるから、

struct Hoge {
int a[10][10] = {};
public:
Hoge(void);
};

って感じでも書ける。

複数のコンストラクタがあるときに、
どのコンストラクタが起動したときでも初期化はしないといけないみたいなときには、
この方式で書いた方が何度も同じことを書かなくてよいので面倒くさくなくて良いかも。
0557デフォルトの名無しさん
垢版 |
2018/10/24(水) 11:47:35.18ID:uSP3iZ9v
>>556
なるほど
コンストラクタにつらつら書くよりもヘッダで宣言時に初期化した方が綺麗ですね
0558はちみつ餃子 ◆8X2XSCHEME
垢版 |
2018/10/24(水) 11:57:27.21ID:PadB6FUj
アセンブラとかから C に入門したら色々と自動化されてて
ありがたいなーってなってポインタで躓いたりしづらいけど、
レイヤが違うという意識を持ってないと変に機械の理屈に引きずられることもある。

言語の理屈だとポインタはアドレスを入れるものじゃなくて、
ポインタを値として見たものをアドレスと呼んだりもするってだけ。
結局はポインタにアドレスが入ってるんだけど、まずポインタありき。

ポインタに対する演算ってのは指す先をいくつ進めるとか、
指す先の間隔がいくつだというものであって、
アドレスを演算して実現するってのは実装上の都合。
アドレスが連続しているということさえ保証はない。

たとえば

char a[2];

とあったときに

(intptr_t)(&a[1])-(intptr_t)(&a[0])

が 1 になることは言語仕様では保証されない。
(これが 1 にならないような変な環境はまず無いと思うんだけど。)

具体的に機械でどう動いているかから見ると肌感覚として理解しやすい場合もあるのはわかるが、
言語の理屈と混同しないように、一旦それは抽象の壁の向こうに押しやる必要もある。
0559デフォルトの名無しさん
垢版 |
2018/10/25(木) 06:51:43.64ID:GIa2VIfF
ラムダ式でthisを指定してそのクラスのメソッドを呼び出したところ、そのクラスのメンバ変数がすべて0になっててコンストラクタも動作してない状態になってたのですが、使い方間違ってますか
0560デフォルトの名無しさん
垢版 |
2018/10/25(木) 07:15:13.40ID:kug3Loto
>>559
インスタンスが既に破棄されているのでしょう
c++ ではオブジェクトの寿命管理は自分でやる必要があります
(参照があるから破棄されないということはない)
0561デフォルトの名無しさん
垢版 |
2018/10/25(木) 11:40:30.80ID:5Cy/pQlU
>>559
[&*this]
こうしたっていう意味?
0562デフォルトの名無しさん
垢版 |
2018/10/25(木) 22:05:25.00ID:GIa2VIfF
ラムダ式にはthisを指定しました
インスタンスは生きています
ラムダ式内から直接呼ばずにグローバル変数に保持したインスタンス変数経由で同じメソッドにアクセスしたら正しい値が読み取れました
0563デフォルトの名無しさん
垢版 |
2018/10/25(木) 22:40:27.12ID:ovezBLdW
auto f = [this]() {... };
てな感じにキャプチャはしてるんだよね。してないとコンパイルエラーになるし。

デバッガでみておかしいだけならデバッガがうまく動いてないだけでは?
cout << this->hoge;
とかして見てみたらどうでしょう。
0564デフォルトの名無しさん
垢版 |
2018/10/26(金) 16:36:40.82ID:8hqqerJ0
>>562
>ラムダ式内から直接呼ばずにグローバル変数に保持したインスタンス変数経由で同じメソッドにアクセスしたら

warning読み飛ばしてるだけだと思うが
warningにそうしろって書いてあるはず
0565デフォルトの名無しさん
垢版 |
2018/10/26(金) 16:37:20.12ID:8hqqerJ0
あとグローバルにしなくても
ラムダ式を呼ぶ側の関数内のローカル変数で保持しても多分いける
0566デフォルトの名無しさん
垢版 |
2018/10/28(日) 23:19:51.00ID:CM0THx8+
複数のファイルをコンパイルするとき、ソースファイルの読み込み順番ってc++ではどのように決定されるのでしょうか?
0568デフォルトの名無しさん
垢版 |
2018/10/29(月) 00:15:12.84ID:LkYf8yJz
>>566
それぞれ別の翻訳単位として、独立に処理されるぞ。
依存関係があって先に読み込ませる必要があるファイルは、#includeで明示的に指定した順に読み込ませる必要があるよ。
0569はちみつ餃子 ◆8X2XSCHEME
垢版 |
2018/10/29(月) 01:17:32.57ID:wGJRVi/I
先に読み込ませれば (ヘッダを include したり宣言を書いたりしなくても) 定義したものが利用可能になると思ったってことなのかな?
0570デフォルトの名無しさん
垢版 |
2018/10/29(月) 11:30:00.64ID:VxCr7qKV
ならんやろ
0571デフォルトの名無しさん
垢版 |
2018/10/29(月) 12:50:50.62ID:X5D3cySa
ソースファイルの読み込み=ソースのコンパイルとして
makeなり 統合環境なりが 依存関係チェックして必要と思われた順にコンパイラを起動しコンパイルしてる
0572 ◆QZaw55cn4c
垢版 |
2018/10/29(月) 19:30:19.13ID:MQrExvvX
>>571
>makeなり 統合環境なりが 依存関係チェックして必要と思われた順

別に make による依存度チェックが必須だとは思っていません
最悪、アプリケーションを構成する全ソースを全部コンパイルしたっていい
やっていることがよくわからないのなら、全部再コンパイルするバッチを書いてもいい、と思っています
0573デフォルトの名無しさん
垢版 |
2018/10/29(月) 19:53:08.30ID:QH06ucqh
>>572
確かに、時間が無駄になるだけで、それにより動作が変わってしまう等の害を及ぼすことはないからなー

結局 >>566 が聞きたかったことは皆目見当がつかんけどもw
0574デフォルトの名無しさん
垢版 |
2018/10/29(月) 19:59:30.68ID:+o2CKGU+
vectorで複数のstd::stringの各要素を収納して管理してみたいのですが、
実際、vectorの特定の要素にアクセスしてstringのデータを入れようとするとエラーになってしまいます。
例えば、次のようなコードの場合です。
std::string A = "bookA";
std::string B = "bookB";

std::vector<std::string> booktitle;
booktitle[0] = A;//コンパイルエラー

vectorで複数のstd::stringのデータを収納したい場合にはどうしたらいいのでしょうか?
0576 ◆QZaw55cn4c
垢版 |
2018/10/29(月) 20:48:05.90ID:MQrExvvX
>>573
FreeBSD 2, 3, 4 (くらいかなあ) 時代には、OS カーネルを再度コンパイルすることはあたりまえだったんですけれども、最近はそういう話はすたれてしまいましたね…
0577デフォルトの名無しさん
垢版 |
2018/10/29(月) 21:00:10.54ID:+o2CKGU+
>>575
ありがとうございます。
例えば、vectorにpush_backで100個のstd::stringのデータを入れたけれど、38個目のデータを別のものに変更したいという場合、
38個目のstd::stringのデータを直接指定して別のものをいれるということはできないんでしょうか?
0579デフォルトの名無しさん
垢版 |
2018/10/29(月) 22:57:36.19ID:oZEcP9DN
>>577
c の普通の配列みたいに中身に拘らずとりあえずサイズ100の配列を用意したい場合は
v.resize(100) でいけるのでその辺りも併せて覚えておきましょう
0580デフォルトの名無しさん
垢版 |
2018/10/29(月) 23:25:38.01ID:Id14AobK
関数の中でポインタ変数を作ったら、その関数から出る時、ポインタ変数は消えるけど、ポインタ変数の中身はどっか別にあって消えないってことで良いんですかね?
その中身を消すのがdelete関数ってことですか?ややこしいな・・・
0581デフォルトの名無しさん
垢版 |
2018/10/29(月) 23:52:04.87ID:JGxixszg
そのとおり
記録には残らないが記憶に残る
0582デフォルトの名無しさん
垢版 |
2018/10/30(火) 00:19:02.74ID:tYtIFLkW
ありがとう。すみませんもう一つ。
ポインタ変数のアドレスを格納するのに、なぜ二重ポインタが必要なのかがいまいちわかりません。
単に”番地”を格納するだけなら普通のポインタでも良いような気がしてしまいます。
0583デフォルトの名無しさん
垢版 |
2018/10/30(火) 00:27:02.34ID:Md8WzUxK
それは、32ビット浮動小数点のビットパターンを32ビットintに入れておけば
float型とかいらないと言ってるようなもの
0584デフォルトの名無しさん
垢版 |
2018/10/30(火) 00:36:21.09ID:H/liFP07
アドレス値がほしいとき
引数でアドレス入れる変数のアドレスを渡すことがある
0585デフォルトの名無しさん
垢版 |
2018/10/30(火) 00:46:04.26ID:0KkuIlNz
>>582
情報量としては実際のところメモリアドレスなので同じだけれど型が違う

pがint へのポインタなら
*p はアドレス位置にある int を返すし、
p++ すると int のサイズ分増えるし、
p[i] はintのサイズかけるiのメモリ位置にある int になる

上記の int を char やポインタ型に入れ替えると動作が異なることがわかる。
なんの型で読み書きするのかとかサイズの計算なんて人がコードで書けばいいじゃん、
という流儀もあるだろうがcは違う

例外としてなんの型だか不明なものを扱うときには、
とりあえずvoid*で保持しておいて計算やアクセスするときに
明示的に型を指定して用いることもある
0586デフォルトの名無しさん
垢版 |
2018/10/30(火) 00:55:27.51ID:H/liFP07
アドレス渡さないと変数(今回の場合アドレスを格納する領域)に値を格納できない
コレはどんな変数でも同じ

アドレスを格納する変数もただの変数だからな
0587デフォルトの名無しさん
垢版 |
2018/10/30(火) 07:33:46.97ID:rZekkOWs
>>580
>ポインタ変数の中身はどっか別にあって消えないってことで良いんですかね?
(ポインタ変数の中身はポインタだが、ポインタが指してる先と読み替えよう)
指してる先はどっか別にあってって、言語が自動で作ってくれるわけじゃないよ
ポインタが指す先もプログラマが作らなきゃならない
だから消える所に作れば(自動変数な)消えるし、消えない所に作れば(静的変数やnewな)消えない

>>582
二重ポインタ(って表現もナニだが…)も
ポインタを指してるってだけの普通のポインタだから
0588デフォルトの名無しさん
垢版 |
2018/10/30(火) 12:09:39.01ID:yVkeMr3S
「戻り値ではなく、引数の書き換えで呼び出し元に新たな値を渡したい」

・関数側宣言はポインタで受けて 呼び出し側は変数に&つけてポインタを渡す (c/c++)
 関数実装の際 *でデリファレンスして代入

・関数側宣言は参照で受けて 呼び出し側は変数をそのまま渡す (c++)
 関数実装の際 そのまま代入
0589デフォルトの名無しさん
垢版 |
2018/10/30(火) 15:15:26.58ID:p4LrBCE7
>>582
freeしたあと確実にNULL代入したいためにポインタのポインタで管理しておくことはある
0590デフォルトの名無しさん
垢版 |
2018/10/30(火) 15:17:35.76ID:p4LrBCE7
あと二重ポインタとかダブルポインタとかいう用語は使わない方が良い

ポインタのポインタ(たまにポインタの配列)
配列のポインタ

のどっちかにしろ
0591デフォルトの名無しさん
垢版 |
2018/10/30(火) 15:22:49.70ID:yVkeMr3S
void my_free(void** ptr) { free(*ptr); *ptr = NULL; }
.......

char *data = malloc(size);
.......
.......
my_free(&data);
/* これ以降 data = NULL になってるから参照するとヌルポになる */
0592デフォルトの名無しさん
垢版 |
2018/10/30(火) 15:59:22.21ID:KCmKruF1
ポインタほんとむずい
0596デフォルトの名無しさん
垢版 |
2018/10/30(火) 21:19:57.26ID:4lskY4LV
自分がそう呼ぶかどうかはともかくとして、
ダブルポインタやdouble pointer でググればわかるようにそう呼称されることも大変多いわけだから
ポインタのポインタをダブルポインタと呼ぶことが多いことを知らんでいるわけにはいかんのが現実
0599デフォルトの名無しさん
垢版 |
2018/10/30(火) 21:46:50.04ID:QNssPyY0
使うのはポインタのポインタまでにしとかないと書いててワケわからなくなるぞ
0600デフォルトの名無しさん
垢版 |
2018/10/30(火) 21:51:59.77ID:ri95Blut
素朴な疑問だけど、ビット演算の | と論理演算の ||
前者を「オア」と呼んで後者を「ダブルオア」と呼ぶ?
0601 ◆QZaw55cn4c
垢版 |
2018/10/30(火) 22:01:11.64ID:ojdn3tn8
>>600
|| は論理演算子の「論理or」
| はビット演算子の「ビット or」…あまりそういういいかたはしないような気もしますが
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況