-2
を呼ば変更するとき、私はのconstネスおよびメンバー関数とC++でのいくつかの実験を行ってきた、と私は次のコードを書いたスロー:
特権命令例外は、int型
using namespace std;
#include <iostream>
class MyClass {
public:
int& refToInt;
MyClass(int x) : refToInt(x) { ; }
void changeValue() const { refToInt++; }
};
int main() {
int x = 10;
MyClass mc(x);
mc.changeValue();
cout << mc.refToInt;
return 0;
}
コードはコンパイルしますが、それはmc.changeValue();
を実行したときに例外がスローされます。
Unhandled exception at 0x00AB1884 in tests.exe: 0xC0000096: Privileged instruction.
私のコードは、その例外が発生するのはなぜ?
'MyClass'コンストラクタへの引数は、ローカル変数と似ています。そのため、コンストラクタ本体が返ってきたときに範囲外になります。今、 'refToInt'が参照するものを推測してください...代わりに参照で引数を渡してみてください。 –
不明な参照の使用による未定義の動作。 –
メンバーとしての参照は、一般的には良い考えではありません。これは、特にconstとの関係はありません。 –