はの一つは、このようなスコープ曖昧
class Foo {
public:
void bar();
operator bool() const { return true; }
};
としてクラスFooのを持っているとしましょうならば、一つは
if(Foo foo = Foo())
{
if(Foo foo = Foo())
{
foo.bar();
}
}
は、今私は(ここで起こっスコープ解決を把握トラブルを抱えていないことができますI fooの再宣言のコンパイラエラーが予想されます)。
私はfoo.bar()が2番目のfoo(そのスコープは "より近い")で実行されると期待していますが、実際に最初のfooとは異なるオブジェクトであることを保証していますか?さらに、それぞれのifブロックの終わりにそれぞれ独立して配置されていますか(デストラクタが呼び出されますか?)私はfoo.bar()は第FOO上で実行することを期待
ここではあいまいさはありません。 Standardは、* scope *と* potential scope *の違いを明確に示しています。しかし、それは良いアイデアにはなりません、しかし、これをやってはいけません! –
私はあまりにもあいまいであると私はそれを意味! ^^ –
これは_シャドウイングと呼ばれ、一般的には良い考えではありません。とにかく、時にはそれを行うこともありますが、 'struct s {int(int n):n(n){} int n; }; ' – wilhelmtell