ページ 11

ポインタのデリファレンスについて

Posted: 2018年12月17日(月) 22:33
by raityou
。c
C++にはoperator&が定義されていた場合、アドレスを取得するためにstd::addressofがありますが、operator*が定義されていた場合にnullでないポインタをデリファレンスできる関数は存在するのでしょうか?(以下動機、読み飛ばしていただいてもかまいません)
なぜ探しているのかというと、例えば、

コード:

struct vec2 {
	double x[2];

	vec2 operator*(const vec2& Right) const noexcept
	{
		return { x[0] * Right.x[0],x[1] * Right.x[1] };
	}

};
こういう構造体をデリファレンスしようとすると

コード:

int WINAPI wWinMain(HINSTANCE hinst, HINSTANCE hinstPrev, LPWSTR lpszCmdLine, int nCmdShow)
{
	vec2 x{ 3,3 }, y{ 2,1 };
	int ix = 0;
	auto z = x * y;
	vec2* ptr = &z;
	int* iptr = &ix;
//	vec2 a = *z; ここ
	int ia = *iptr;

	return 0;
}
error C2100: 間接指定演算子 (*) の使い方が正しくありません。
というようにコンパイルできないためです。
オフトピック
もう一つ、このサイト「だけ」にアクセスするのに異様に時間がかかる場合があるのはなぜなのでしょうか?
SEOはやっていただいてもかまわないのですが、正直異常に長いロード(Chromeがタイムアウトして、質問を書き直さなければならなくなるほどのもの)がいちいち入るのはストレスです。
もしこちらに原因があれば(Youtube等の動画サイトも同時にアクセスしてチェックしてますが,PCの限界を超える4K8Kでなければサクサク閲覧できるので,原因がわからず困ってます)対処しますので、よろしければこちらの質問にも答えていただけると幸いです。

Re: ポインタのデリファレンスについて

Posted: 2018年12月18日(火) 20:55
by 結城紬
raityou さん、こんにちは。
質問の意図がよく理解できていません。
*z が z の operator* 呼び出しと評価される状況であれば、z はポインタ型ではない(例えば、vec2 であって vec2* ではない)のでデリファレンスすることは不可能だと思うのですが、どのようなことがしたいのでしょうか?

Re: ポインタのデリファレンスについて

Posted: 2018年12月18日(火) 21:56
by みけCAT
2項演算子の*(一般的には掛け算)と単項演算子の*(一般的にはデリファレンス)は違います。