-3

重複の可能性:
C++ の明示的なキーワードは何を意味しますか?

以下がわかりません。私が持っている場合:

class Stack{
    explicit Stack(int size);
}

キーワードなしでexplicit私ができることは次のとおりです。

Stack s;
s = 40;

明示的に指定されていない場合、なぜ上記のことを許可されるのでしょうか?? これはスタック割り当て (コンストラクターなし) であり、C++ を使用しない限り、変数に何かを割り当てることができるexplicitためですか?

4

2 に答える 2

6

この行

s = 40;

と同等です

s.operator = (40);

デフォルトと一致しようとしますoperator = (const Stack &)Stackコンストラクターが明示的でない場合、次の変換が試行され、成功します。

s.operator = (Stack(40));

コンストラクターが の場合、explicitこの変換は試行されず、オーバーロードの解決は失敗します。

于 2013-01-19T19:07:34.627 に答える
1

とてもシンプルです。明示的なキーワードは、コンパイラーが任意のデータ型からユーザー定義型への自動変換を停止するだけです。通常、単一の引数を持つコンストラクターで使用されます。したがって、この場合、コンパイラが明示的な変換を停止しているだけです

#include iostream
 using namespace std;
class A
{
   private:
     int x;
   public:
     A(int a):x(a)
      {}
}
 int main()
{
A b=10;   // this syntax can work and it will automatically add this 10 inside the 
          // constructor
return 0;
}
but here

class A
{
   private:
     int x;
   public:
    explicit A(int a):x(a)
      {}
}
 int main()
{
A b=10;   // this syntax will not work here and a syntax error
return 0;
}
于 2013-01-19T19:57:00.673 に答える