看不见的C++语法

dsi*_*ign 2 c++

一位朋友发给我这个,我真的不知道它是什么,在循环中.无论它是什么,它调用std :: set构造函数五十万次....任何帮助表示赞赏.我希望编译器出错,但实际上它在g ++ 4.4和4.5中编译,并且行为与复制构造不同......

#include <stdio.h>
#include <stdlib.h>
#include <boost/unordered_map.hpp>
#include <set>
#include <string>

typedef boost::unordered_map<int, std::set<int> > mymap;

int main () {
    mymap map;
    for ( int i = 0 ; i < 1000 ; i++ )     
    {
        std::set<int>  map[i] ;
    }
    return 1;
};
Run Code Online (Sandbox Code Playgroud)

AnT*_*AnT 12

您正在处理GCC特定的C++语言非标准扩展.每次迭代都定义了一个std::map带有i元素的对象数组(并立即销毁它).

在标准C++中,使用非常量表达式来指定数组大小是非法的,因此代码不是合法的C++.它再次编译,只是因为GCC允许它作为扩展.