質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

2回答

1803閲覧

コンストラクタの戻り値について

jonnnnnnnyyyy

総合スコア12

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2020/09/30 02:44

クラスのコンストラクタに戻り値がないことは承知しておりますが、printfでコンストラクタの戻り値を出力すると、コンパイルエラーにならず、数値が出力されました。
最初はコンストラクタか作られたインスタンスのアドレスかなにかと思ったのですが、違うようです。
この数値が何の数値かご存知の方、ご教示願います。


class Sample
{
public:
Sample(int num1, int num2);
:
:
}

printf("戻り値:%X\n",Sample(10,0));

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cateye

2020/09/30 04:08 編集

-Sオプションでアセンラ出力してみれば、printf()に何を渡しているか分かるのでは? ・・・たぶん、その時のEAXだと思うけど・・・処理系依存
guest

回答2

0

printfでコンストラクタの戻り値を出力すると、コンパイルエラーにならず、数値が出力されました。

printfの引数はコンパイル時点で型チェックされるとは限りません(親切に警告してくれる場合もあります)。%Xにクラスインスタンスを持ってくるなど、想定していないものを割り振った場合、どのように動くのかは誰も保証しません。

投稿2020/09/30 02:50

maisumakun

総合スコア146018

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jonnnnnnnyyyy

2020/09/30 04:13

回答ありがとうございます。 コンパイルエラーにはならないものの、動作は保証されていないのですね。 勉強になりました。
guest

0

ベストアンサー

コンストラクタには戻り値はない、のではなく、インスタンスを返します

投稿2020/09/30 02:48

y_waiwai

総合スコア88040

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jonnnnnnnyyyy

2020/09/30 04:11

遅くなり申し訳ありません。 なるほど。インスタンスを返しているのですね。 引数を変えるとそれに合わせて出力値も変化したので、納得しました。 ありがとうございます。
y_waiwai

2020/09/30 04:17

インスタンスは何者か、って話になりますが、アドレスかもしれないし、何かのテーブルのIDかもしれないし、ハンドルかもしれない、と、そこらへんは実装に依存するのでこれ、とはいえませんね
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問