複数の代入オペレーターオーバーロードとキャストオペレーターオーバーロードが定義されてる時の優先順位について。
ポインターPのラッパークラスCを作成し、
CからPへのキャストオペレーター関数と
PからCへの代入オペレーター関数
CからCへの代入オペレーター関数を定義し
CからCへの代入をしたところ
C→P→Cという変換がかかってしまい
思わぬ結果を招いてしまいました。
この副作用を避けたいのですが、優先順位を変える方法はありますか。
stl::stringがconst char*へのキャストを用意せず、
c_strで取り出さないといけないのは不便だと思ってましたが、これが理由だったのかも、とすれば無理なのかなと思ってます。
No.2ベストアンサー
- 回答日時:
いちおう念の為補足:
「CからCへの代入オペレーター関数」を直接呼び出すことができるのであれば, わざわざ「C→P→Cという変換」をすることはなくその代入演算子関数を実行します. 逆にいえば「C→P→Cという変換」をしたときことは, なんらかの理由で「CからCへの代入オペレーター関数」が直接呼び出せなかったため「CからPへのキャストオペレーター関数」と「PからCへの代入オペレーター関数」を呼び出したということが想定されます.
ということはわかるんだけど, この質問文ではそれ以上のことが一切わかりません. 特に「『CからCへの代入オペレーター関数』を直接呼び出せない理由」がまったくわからないので, 「どうすればいいのか」には答えようがありません.
これらの関数の宣言と「CからCへの代入」で実際にやっていることがわかればまだ考えようもあるんだけど, ね.
確かに小さいテストプログラムを書いて見たところ、その通りでした。いま当該ソースコードがある場所に居らず確認ができないのですが、何処かに変数の型を間違える等のケアレスミスがある問題の気がしてきました。
ありがとうございます。
戻ったらソース確認して見ます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 仕事術・業務効率化 今後の雇用で。 AIの発達で。 会社の事務員やら関節業務は減らされ。 会社の生き残り 人員削減。 日 8 2023/07/23 07:37
- その他(プログラミング・Web制作) どういうプログラムで組みますか?google colabでやってるんですけど、出来る方お願いします。 1 2022/07/17 18:41
- その他(プログラミング・Web制作) どういうプログラムで組みますか?google colabでやってるんですけど、出来る方お願いします。 1 2022/07/06 09:28
- その他(プログラミング・Web制作) このプログラミングをどう組みますか? Googlecolabでやってるんですが、出来る方お願いします 1 2022/07/13 10:52
- 会社・職場 夜勤中の眠気について 3 2022/09/02 07:49
- その他(ビジネス・キャリア) 今現在の仕事について 2 2022/09/01 20:03
- クレジットカード 介護施設に入った親族の大量のクレカの解約作業で困っています。効率的な解約方法はありませんか? 1 2023/04/25 22:07
- その他(プログラミング・Web制作) python 3.10で 同じlistに同じ構文で同じデータ代入した結果が異なる現象発生 7 2022/06/18 11:08
- その他(スマートフォン・携帯電話・VR) https://youtu.be/oiv8G1doCjo これ、どう思われます‥? 私はiPhone 2 2022/11/25 11:46
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAでダブルコーテーション入り...
-
整数xxxが大き過ぎますというエ...
-
verilog HDLの[=]と[<=]の使い分け
-
【VBA】複合代入演算子
-
魔方陣のつくりかた
-
datagridviewに行...
-
プログラミングで変数と関数の...
-
エラーの意味は? Lvalue req...
-
Excel VBAでイコール二回使えま...
-
C言語でのプログラミングの問...
-
EXCEL/VBA 変数の値をクリップ...
-
PL/Iについて、教えてください。
-
切り上げ
-
テキストボックスの値を変数に...
-
i++と++i ってどう違うのですか?
-
インクリメント演算子の前置(+...
-
processing エラーで、 "cannot...
-
後置き++演算子の優先順位に関して
-
ExcelのVBAでをA列に第0〜19項...
-
C言語 exitの使い方
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAでダブルコーテーション入り...
-
エラーの意味は? Lvalue req...
-
jsp~jspにhiddenを使って変数...
-
テキストボックスの値を変数に...
-
[VBS]変数を定数に変換する方法...
-
Variant型で宣言してるのにEmpt...
-
processing エラーで、 "cannot...
-
EXCEL/VBA 変数の値をクリップ...
-
【VBA】複合代入演算子
-
整数xxxが大き過ぎますというエ...
-
i++と++i ってどう違うのですか?
-
C言語 アロー演算子について質...
-
C言語 列挙型(enum型)変数について
-
数値計算??
-
プログラミングで変数と関数の...
-
コマンドプロンプト バッチ|結...
-
vba 最大値 条件分岐
-
構造体からレコードセットへの代入
-
インクリメント演算子の前置(+...
-
verilog HDLの[=]と[<=]の使い分け
おすすめ情報
原因が判明しました。
C variable1; (実際にはメンバー変数)
variable1 = C(arg1,arg2,arg3);
のような代入を行っている箇所だったのですが、
ためしにポインタPからの代入オペレータをコメントアウトしたところ、
該当する代入オペレータがないというようなコンパイルエラーになりました。
C& operator=(C&) というようにconstをつけてませんでした。
これを
C& operator=(const C&)
と直したところ、コンパイルがとおり、
ポインタPからの代入オペレータのコメントアウトを元に戻して
実行しても問題はなくなりました。
ありがとうございました。