글로벌을 사용하는 것이 아니라 사용하는 것이 좋습니다. 로컬 정적. 메인이 입력되기 전에 벡터의 초기화가 발생하기 때문에 던져진 예외는 메인에 걸리지 않습니다. 예를 들어 말해 당신은 예외 던질 수 있습니다 건설있어 유형이 다음 초기화, 생성자에 의해 throw되는 예외를 catch하지 않습니다 주요 본문에 시도/캐치
class A {
public:
A() {
// ... code that might throw an exception
}
};
을, 그래서 당신을 프로그램은 즉시 죽을 것이고 아마도 디버거를 사용하여 원인을 찾을 수 없을 것입니다! answer이 제안한 기술을 이용하여 초기화 - 생성자에서 예외를 잡을
std::Vector<A> v(5, A()); // May throw an exception here not caught by main
int main() {
try {
// Exception for 'v' not handled here.
}
catch (...) {
}
}
다른 방법은 로컬 정전기를 사용하는 것이다.
std::Vector<A> init(); // Returns a vector appropriately initialized
std::vector<A> & getV() {
static std::vector<A> cache = init();
return cache;
}
int main() {
try {
getV().at[0]; // First call to getV - so initialization occurs here!
}
catch (...) {
}
}
이것이 하나 소개 : STD : 벡터 A (3, 100), a_init ((A [0], A는 [1] = 99, 98 = A)); 그것은 "98, 99, 100"과 동등합니다 :) –
호기심에서 벗어나서, 왜 당신은 그것을 필요로합니까? –