2016-06-29 12 views
-1

私はstd::stackについて質問がありますこれら2つのコンストラクタがなぜexplicitですか?std :: stackのこれらのコンストラクタはなぜ明示的に

 explicit stack(const Container& cont = Container()); 
    explicit stack(Container&& cont = Container()); 

注:Source

+1

私はあなたの3(http://en.cppreference.com/w/cpp/container/stack/operator%3D)を手に入れませんか? – Holt

+3

1つにつき1つの質問をしてください。 – user2079303

+3

(1):[可能な重複](http://stackoverflow.com/questions/102459/why-does-stdstack-use-stddeque-by-default?rq=1) – ArchbishopOfBanterbury

答えて

0

一つの問題は、あなたが暗黙の呼び出しを想定した場合に他の人があなたの例に従った場合、何が起こるだろうということですか?だから、例えば次のように

#include <iostream> 
#include <vector> 
using namespace std; 

class Test { 
    public: 

    Test(const std::vector<int>&) { 
     cout << "Test(const std::Vector<int>&)" << endl; 
    } 
}; 
class AnotherTest { 
    public: 

    AnotherTest(const std::vector<int>&) { 
     cout << "AnotherTest(const std::Vector<int>&)" << endl; 
    } 
}; 

void test_function(const AnotherTest&) { 
    cout << "fucntion(const AnotherTest&)" << endl; 
} 
void test_function(const Test&) { 
    cout << "fucntion(const Test&)" << endl; 
} 

int main() { 
    const std::vector<int> vec {1, 2, 3}; 
    test_function(vec); 

    return 0; 
} 

のコンパイルに失敗したあなたは簡単にこの問題がstackqueueで発生見ることができます。あなたが誤ってstackを期待して機能する基盤となるコンテナ(のようなvectordeque)を渡すことはできませんので

3

コンストラクタは、(少なくとも驚きの原則に違反言及しないように)予想外のコピーが得られ、明示されています。

関連する問題