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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
raityou

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

#1

投稿記事 by raityou » 1年前

。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でなければサクサク閲覧できるので,原因がわからず困ってます)対処しますので、よろしければこちらの質問にも答えていただけると幸いです。

結城紬
記事: 42
登録日時: 2年前

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

#2

投稿記事 by 結城紬 » 1年前

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

アバター
みけCAT
記事: 6246
登録日時: 9年前
住所: 千葉県
連絡を取る:

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

#3

投稿記事 by みけCAT » 1年前

2項演算子の*(一般的には掛け算)と単項演算子の*(一般的にはデリファレンス)は違います。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

返信

“C言語何でも質問掲示板” へ戻る