問題タブ [pointer-conversion]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - C++ のポインター型の暗黙的な変換
このケースを考えてみましょう:
offset
が 32 ビット変数であるとします。ptr
type を持ちint*
、ターゲット アーキテクチャは 64 ビット ( ptr
8 バイト変数も同様) で、offset
type を持ちint
ます。式の値を計算するときにどのような変換が実行されます*(ptr + offset)
か? 2003 C++ 標準のどこでそれについて読むことができますか?
c++ - ポインターを整数にキャストし、その整数をインクリメントしてキャストバックしても安全ですか?
有効なポインタがあるとしますp0
:
次のように安全にラウンドトリップキャストできることを私は知っています:
しかし、次のことを行うのは安全ですか?
つまり、UBがないと確信できp1 == &a[1]
ますか?
c++ - void * およびその他のポインター型を引数として取る C++ ポリモーフィズム関数: あいまいと見なされますか?
void *
およびその他のポインター型を引数として取る C++ ポリモーフィズム関数: あいまいと見なされますか?
任意のポインターを にキャストできるため、以下のプログラムで期待される の代わりにvoid*
以下の bar の 2 回目の呼び出しが実行されるのではないかと心配していますか?void bar(void*)
void bar(int*)
g++ でテストしたところ、期待どおりに動作しました (つまり、int* は void* にキャストされません)。しかし、C++ 言語仕様に関して、この質問にコメント/回答できる人はいますか?
foo.h:
main.cpp:
さらに、たとえば、 第 1 形式として引数を取り、第 2 形式として基本抽象クラス ポインター引数をbar
取る仮想ポリモーフィズム関数になりました。void*
派生クラス ポインタを引数として呼び出した場合、第 1 形式と第 2 形式のどちらが実行されますか? つまり、派生クラス ポインターは、その基本抽象クラス ポインターにキャストされますか (したがって、2 番目のフォームが実行されます)、またはvoid *
呼び出し前にキャストされます (したがって、1 番目のフォームが実行されます) bar()
?