我对std::stack
为什么这两个构造函数是explicit
?
explicit stack( const Container& cont = Container() );
explicit stack( Container&& cont = Container() );
注意: Source
答案 0 :(得分:3)
构造函数是显式的,因此您不会意外地将基础容器(例如vector
或deque
)传递给期望stack
的函数,从而导致意外复制(而不是提到违反最小惊喜的原则。)
答案 1 :(得分: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;
}
您可以使用stack
和queue
轻松查看此问题。