C++ C++;异常捕获延迟,这可能是什么原因?

C++ C++;异常捕获延迟,这可能是什么原因?,c++,class,generics,exception,operator-overloading,C++,Class,Generics,Exception,Operator Overloading,我在main.cpp中有以下代码: #include <iostream> #include "Matrix.h" int main(){ mtm::Dimensions dim_1(2,3); try{ const mtm::Matrix<int> mat_1 = mtm::Matrix<int>::Diagonal(2,1); mtm::Matrix<int> mat_2 = mtm::Matr

我在
main.cpp
中有以下代码:

#include <iostream>
#include "Matrix.h"

int main(){
    mtm::Dimensions dim_1(2,3);
    try{
        const mtm::Matrix<int> mat_1 = mtm::Matrix<int>::Diagonal(2,1);
        mtm::Matrix<int> mat_2 = mtm::Matrix<int>::Diagonal(2,-1);
        std::cout<<(-mat_2)(1,1)<<(-mat_2)(2,2)<<std::endl;
    } catch(mtm::Matrix<int>::AccessIllegalElement& e){
        std::cout<<e.what()<<std::endl;
    }
}
它返回以下内容:(注意开头的1)


下面是我如何实现
operator语句
std::cout语句
std::cout,那么如果可能的话,在我的例子中应该怎么做来解决这个问题呢?也许值得指出的是,从c++17中指定了顺序,并且必须从
(.matu 2)(1,1)
@smith抛出异常,你有一个选择是开始编译到C++17。那么,如果可能的话,我应该怎么做来解决这个问题呢?也许值得指出的是,从C++17中指定了顺序,并且必须从
(-mat_2)(1,1)
@smith抛出异常,你有一个选择是开始编译到C++17。为什么你认为异常来得晚?这不是不能解决问题吗,但是你真的需要额外的东西吗<代码>“\n”
结束一行。为什么您认为异常延迟了?这不是不能解决问题吗,但是你真的需要额外的东西吗<代码>“\n”
结束一行。
Mtm matrix error: An attempt to access an illegal element
1Mtm matrix error: An attempt to access an illegal element
template<typename T>
std::ostream &operator<<(std::ostream &os, const Matrix<T> &matrix) {
    typename Matrix<T>::const_iterator it_begin = matrix.begin();
    typename Matrix<T>::const_iterator it_end = matrix.end();
    return printMatrix(os, it_begin, it_end, matrix.width());
}
template<class ITERATOR_T>
std::ostream& printMatrix(std::ostream& os,ITERATOR_T begin,
                          ITERATOR_T end, unsigned int width){
    unsigned int row_counter=0;
    for (ITERATOR_T it= begin; it !=end; ++it) {
        if(row_counter==width){
            row_counter=0;
            os<< std::endl;
        }
        os <<*it<<" ";
        row_counter++;
    }
    os<< std::endl;
    return os;
}