一時オブジェクトの作成はコンパイラによって異なりますか?一時オブジェクトの作成はC++コンパイラによって異なりますか?
以下のコードでは、char *を送信する関数を呼び出しますが、関数にはObject参照が必要です。ただし、Objectにはchar *を使用するコンストラクタがあります。したがって、一時オブジェクトが自動的に作成され、print関数に送信されます。
class Object {
string text;
public:
Object (const char* value) { text = value; }
void print() const { printf("[%s]\n", text.c_str()); }
};
void print(const Object& obj) { obj.print(); }
int main() {
print("hello");
}
この動作はコンパイラによって異なりますか? あなたはここに出力を見ることができます:あなたは、このようなコンストラクタ
Object (const char* value)
を宣言するとhttp://codepad.org/AABw5Ulz
「コンパイラは許可されています」とは、正しい表現ではないと思います。これを行う方法は他にありません。コンパイラは、関数呼び出しの引数として 'Object'インスタンスを構築する*必須*です。 –
私はどのようなコンパイラを使用していても、print(Object( "hello"))を書く必要はありません。それは非常に迷惑になるでしょう... – NIGO
はいKerrek SB、それは許されますが、私はそれがその決定を下すか、またはコンパイルエラーを表示するかどうかは分かりませんでした。 – NIGO