2

altivecを使用してconstポインタからロードする最良の方法は何ですか?

ドキュメント (および私の結果) によると、vec_ld は const ポインターを引数として取りません: http://www-01.ibm.com/support/knowledgecenter/SS2LWA_12.1.0/com.ibm.xlcpp121.bg.doc /compiler_ref/vec_ld.html

したがって、次のようなものは失敗します。

void foo(const float* A){
   vector4double a = vec_ld(0,A);
   ...
}

厄介な回避策は次のとおりです。

void foo(const float* A){
   vector4double a = vec_ld(0,const_cast<float*>A);
   ...
}

これを行うより良い方法はありますか?ありがとうございました。

4

3 に答える 3

-1

あなたconst float *は、変更できないものを指していることを意味しますが、他の何かを指すことはできます。

あなたの関数についてはわかりませんがvec_ld、フロートへのポインターが必要なため、関数はポイントされた値を変更すると思います。

次に、変更可能な値を提供する必要があります。

あなたのメソッドを呼び出すユーザーは、float 値が変更されることを期待せず、将来の厄介なバグのために確実に変更されるため、私はあなたの厄介な回避策を使用しません。

方法foofoo(float * A)またはfoo(float & A)に変更できれば、安心です。


const ポインターの詳細については、「 const int*、const int * const、および int const * の違いは何ですか?」を参照してください。

于 2015-11-05T08:47:37.257 に答える