未定义行为:没有定义那样做有什么意义的行为。
注意:不要依赖未定义行为。
c++中的未定义行为有:
1、连接字符串字面值和宽字符串字面值。
2、使用在函数体内定义的未初始化的变量(非用作赋值操作符的左操作数)。
3、获取不存在的元素也是未定义行为。例如:数组、string、vector等通过下标操作符获取超过该对象的长度的元素。
所谓的“缓冲区溢出”问题就是对不存在的元素进行下标操作的结果。这样的缺陷往往导致PC机和其他应用中最常见的安全问题。
4、若操作符有两个以上的操作数(例如a+b中,+有两个操作数),则求这两个操作数的值的顺序未定义(也就是说,先求a的值还是先求b的值是未确定的)。
上面这个未定义引出了下面的问题:
int a(11);
cout << a++ << a-- << a << endl;
该代码的输出结果未定义。