この単純なコードブロックは、予期しない動作をします。C++で匿名変数を有効にしようとする
#include <iostream>
using namespace std;
class Node
{
public:
char* data;
Node(char d)
{
data = &d;
}
};
int main()
{
Node NodeA = Node('c');
cout<<*(NodeA.data)<<endl;
return 0;
}
私は出力として 'c'を得ようとしていましたが、代わりに '}'を出力しました。 "c"である無名変数に "data"ポインタを割り当てることに関連しなければならないと感じました。
これは、同様の問題を議論しているquestionです。
しかし、一番上の答えに記載されているように、匿名変数は、式の終わりまでに参照するポインタで囲まれていない場合にのみ、殺されます。私はポインタ( "データ")をバインドしているので、ここではそうではないと私は信じていますが、何とかそれはまだ殺されます。
予期せぬ出力を引き起こしていることをここで知りたいと思います。あなたのクラスで
あなたは匿名の 'c ''へのポインタを取っておらず、_parameter_ 'd'へのポインタを取っています。 '' c''は_by value_で 'Node(char d)'に渡されます。 – Steve
あなたはそれを匿名と呼びますが、関心のあるものは 'd'です - 私はローカルと呼んでいます。あなたのポインタがローカル変数が範囲外になったときに何が起こると思いますか? – UKMonkey