一行代码让vector自带下标范围检查

#include <vector>#define _GLIBCXX_DEBUG就行

1
2
3
4
5
6
7
8
9
10
#define _GLIBCXX_DEBUG

#include <bits/stdc++.h>

using namespace std;

int main() {
vector<int> a{1, 2, 3};
auto t = a[3]; // runtime error
}

也可以在cmake传递参数add_definitions(-D_GLIBCXX_DEBUG)开启

_GLIBCXX_DEBUG说明

_GLIBCXX_DEBUG是一个用于启用C++标准库的调试模式的宏定义。当定义了这个宏时,会启用GCC(GNU Compiler Collection)中libstdc++标准库的调试模式,该模式提供了一些额外的运行时检查来捕获一些常见的C++程序错误,如数组越界、迭代器失效等。

在使用_GLIBCXX_DEBUG时,编译器会对标准库的数据结构和操作进行更严格的检查,这可能会导致性能下降,但有助于发现和调试潜在的程序错误。

需要注意的是,使用_GLIBCXX_DEBUG会导致程序的执行速度变慢,并且会增加一些内存开销,因为额外的检查会增加程序的运行时负担。通常情况下,只有在调试阶段才会使用_GLIBCXX_DEBUG来帮助捕获和修复一些难以发现的错误。