48512


int main関数の部の例外処理のここですと書いてある部分なのですが、thisを返してもなぜ不定値？(初期化してない？)
コンソール画面で`[添え字範囲エラー52570]`と謎の数値が出てします。  
なぜなのでしょうか？、コメント部のしてあるソースの部分も同じの謎の数値が出てしまいます。

### Array.h

[code]

    // 配列クラステンプレートArray
    #ifndef ___ClassTemplate_Array
    #define ___ClassTemplate_Array
    
    //===== 配列クラステンプレート =====//
    template <class Type> class Array {
        int nelem;      // 配列の要素数
        Type* vec;      // 先頭要素へのポインタ
    
        //--- 添字の妥当性を判定 ---//
        bool is_valid_index(int idx) { return idx >= 0 && idx < nelem; }
    
    public:
    
        //----- 添字範囲エラー -----//
        class IdxRngErr {
            const Array<Type>* ident;
            int idx;
        public:
            IdxRngErr(const Array<Type>* p, int i) : ident(p), idx(i) { }
            int Index() const { return idx; }///////////////ここです。
    
            const Array<Type>* aIdent() { return ident; }
        };
    
        //--- 明示的コンストラクタ ---//
        explicit Array(int size, const Type& v = Type()) : nelem(size) {
            vec = new Type[nelem];
            for (int i = 0; i < nelem; i++)
                vec[i] = v;
        }
    
        //--- コピーコンストラクタ ---//
        Array(const Array<Type>& x) {
            if (&x == this) {                       // 初期化子が自分自身であれば…
                nelem = 0;
                vec = NULL;
            }
            else {
                nelem = x.nelem;                    // 要素数をxと同じにする
                vec = new Type[nelem];              // 配列本体を確保
                for (int i = 0; i < nelem; i++)     // 全要素をコピー
                    vec[i] = x.vec[i];
            }
        }
    
        //--- デストラクタ ---//
        ~Array() { delete[] vec; }
    
        //--- 要素数を返す ---//
        int size() const { return nelem; }
    
        //--- 代入演算子= ---//
        Array& operator=(const Array<Type>& x) {
        //
            std::cout << "代入演算子\n";
            if (&x != this) {                   // 代入元が自分自身でなければ…
                if (nelem != x.nelem) {         // 代入前後の要素数が異なれば…
                    delete[] vec;               // もともと確保していた領域を解放
                    nelem = x.nelem;            // 新しい要素数
                    vec = new Type[nelem];      // 新たに領域を確保
                }
                for (int i = 0; i < nelem; i++) // 全要素をコピー
                    vec[i] = x.vec[i];
            }
            return *this;
        }
    
        //--- 添字演算子[] ---//
        Type& operator[](int i) {
            if (!is_valid_index(i))
                throw IdxRngErr(this, i);               // 添字範囲エラー送出
            return vec[i];
        }
    
        //--- const版添字演算子[] ---//
        const Type& operator[](int i) const {
            if (!is_valid_index(i))
                throw IdxRngErr(this, i);               // 添字範囲エラー送出
            return vec[i];
        }
    
    };
    
    #endif
    
[/code]

### int main()関数部

[code]

    int main() {
        Array<int> x(5);
        Array<double> y(4);
        cout <<"添え字数int "<< x.size()<<'\n';
        cout << "添え字数double " << y.size() << '\n';
    
        while (1) {
            int t = 0;
            int n = 0;
            double d = 0.0;
    
            cout << "添え字を入力:"; 
            cin >> n;
    
            try {
                int i = 0;
                for (i = 0; i < n; i++) {
                    x[i] = i;
                //  y[i] = d;
                }
            } catch (Array<int>::IdxRngErr& x) {
                Array<int> const *ptr = x.aIdent();
    
                //ここです↓/////////////////////////////////////////////////
                cout << "int 要素数範囲エラー" << ptr->size() << '\n\n';
                //cout << "int 要素数範囲エラー" << x.Index() << '\n\n';
    
                //cout<<"要素数範囲エラー"<< y.Index()<<'\n';
                //continue;
            } catch (Array<double>::IdxRngErr& x) {
                //t = 0;
                cout << "double 要素数範囲エラー" << x.Index() << '\n\n';
                continue;
            }
            cout << "\n\n\n";
            //t = 0;
        }
    
        _getch();
        return 0;
    }
    
[/code]


CC BY-SA 4.0
2018-09-18T11:44:42.313
48510
2018-09-18T13:13:17.260
2018-09-18T11:47:55.047
19110
question
c++
c++,なぜ不定値の値が来るの知りたい


実は、`ptr->size()` はちゃんと動いています。期待通り`5`を返していて、それがコンソールに表示されています。

問題は後に続く`2570`です。これは`'\n\n'`を整数として解釈した結果です。`\n` はASCIIで10、10 * 256 + 10 で
`2570` となります。本当は「`"\n\n"`」と書くべきだったのだと思います。


CC BY-SA 4.0
2018-09-18T13:13:17.260
48512
2018-09-18T13:13:17.260
3475
48510
answer