c++ - 看不见的 C++ 语法

标签 c++

一个 friend 发给我这个,我真的不知道它是什么,在循环中。不管它是什么,它都会调用 std::set 构造函数 50 万次……感谢任何帮助。我预计会出现编译器错误,但它实际上是在 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;
};

最佳答案

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

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

关于c++ - 看不见的 C++ 语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3904066/

相关文章:

c++ - 使用ffmpeg将平面RGB图像组合成无损视频

python将结构和指针传递给c函数以进行输入和输出

c++ - 这个函数有什么作用?

c++ - 为什么 GLEW 说我没有扩展?

C++ 从 LPCTSTR 转换为 const char *

c++ - 即使在子弹模式下也能穿透物体

c++ - 如何跟踪任何程序试图使用哪些网络端口?

c++ - 在C++书籍中,array bound必须是常量表达式,但为什么下面的代码有效?

c++ - 在 C++ 中创建大小为 66000 X 66000 的二维数组

c++ - Qt QMenu 设置样式表