私はstd::stack
について質問がありますこれら2つのコンストラクタがなぜexplicit
ですか?std :: stackのこれらのコンストラクタはなぜ明示的に
explicit stack(const Container& cont = Container());
explicit stack(Container&& cont = Container());
注:Source
私はstd::stack
について質問がありますこれら2つのコンストラクタがなぜexplicit
ですか?std :: stackのこれらのコンストラクタはなぜ明示的に
explicit stack(const Container& cont = Container());
explicit stack(Container&& cont = Container());
注:Source
一つの問題は、あなたが暗黙の呼び出しを想定した場合に他の人があなたの例に従った場合、何が起こるだろうということですか?だから、例えば次のように
#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;
}
のコンパイルに失敗したあなたは簡単にこの問題がstack
とqueue
で発生見ることができます。あなたが誤ってstack
を期待して機能する基盤となるコンテナ(のようなvector
やdeque
)を渡すことはできませんので
コンストラクタは、(少なくとも驚きの原則に違反言及しないように)予想外のコピーが得られ、明示されています。
私はあなたの3(http://en.cppreference.com/w/cpp/container/stack/operator%3D)を手に入れませんか? – Holt
1つにつき1つの質問をしてください。 – user2079303
(1):[可能な重複](http://stackoverflow.com/questions/102459/why-does-stdstack-use-stddeque-by-default?rq=1) – ArchbishopOfBanterbury