VS2015 C++编译器Bug一例
来源:互联网 发布:Unity3d添加GameObject 编辑:程序博客网 时间:2024/05/20 18:44
补充:
不好意思, 非VC编译器的Bug, 是我自己的错误。ToString()的返回值是一个临时string, 执行完 const char* szText = const_cast<Test&>(tst).ToString().c_str();后, 临时string就会被销毁, szText所指向的string内容已经被销毁, 所以乱码。至于,g++编译, 输出结果正确, 有可能是vc++与g++对std::string的实现方式不同(引用: jackyjkchen 的回答: gcc的string使用了引用计数、写时拷贝,很可能不同情景下的析构有所区别)。
顺便再次提醒大家谨慎使用string的c_str方法。
参考文章:
1. 小心使用临时string对象的c_str()值
2. 聊聊C++临时对象的析构时间点------顺便再次提醒大家谨慎使用string的c_str方法
3. C++ c_str() 和 临时变量
4. C++中string.c_str()函数的一些疑问,寻求高手帮忙
前天, VC2015编译的项目 出现莫名其妙的错误, 经过Debug, 发现类似下面示例代码中
"const char* szText = const_cast<Test&>(tst).ToString().c_str();" 输出结果不正常, szText Debug查看为乱码,
百思不得解, 只好将上句代码拆分为两行, 结果再次编译运行正常. 后来在Windows Mingw(gcc 4.9.2)下测试,
发现结果正常. 估计这是VC++的编译器的一个Bug.
"const char* szText = const_cast<Test&>(tst).ToString().c_str();" 输出结果不正常, szText Debug查看为乱码,
百思不得解, 只好将上句代码拆分为两行, 结果再次编译运行正常. 后来在Windows Mingw(gcc 4.9.2)下测试,
发现结果正常. 估计这是VC++的编译器的一个Bug.
#include <iostream>class Test{public: std::string ToString() { return std::string("nihao"); }};void test(const Test& tst){ // 单独写一行, vs2015下, szText结果调试为乱码, 控制台输出为空 // 而mingw编译输出正常 const char* szText = const_cast<Test&>(tst).ToString().c_str(); // 分两行, vs2015与mingw输出结果均正常 std::string strText = const_cast<Test&>(tst).ToString(); const char* szText2 = strText.c_str(); std::cout << "szText:" << szText << '\n'; std::cout << "szText2:" << szText2 << '\n';}int main(){ Test tst; test(tst); getchar();}
测试环境
系统: Win10 专业版 32bit
VS: VS Community 2015 版本 14.0.25431.01 Update3 . 编译测试程序 32bit
GCC: Windows gcc4.9.2 编译选项: g++ -std=c++1y . 编译测试程序 32bit
输出结果
VS2015
GCC
0 0
- VS2015 C++编译器Bug一例
- IBM C编译器bug
- 编译器bug
- 用C实现C编译器(一)
- JavaFX编译器编译重载方法的一处BUG
- JavaFX编译器编译满载方法的一处BUG
- c++bug小结(一)
- 关于《C语言深度剖析》之编译器的bug问题
- 《C语言深度解剖》4.15编译器的bug一节详解
- VS2015 编译器报错C4996
- C#WindowsForm拖拽事件一例bug分析
- 《C专家编程》:编译器的金科玉律(一)
- 安装VS2015出现的bug
- VS2015中findContours的BUG
- vs2015查找功能的bug
- 调试BUG一例
- c#编译器的bug
- 编译器也有bug
- 项目二计算长方形的周长
- 正则表达式的用法
- 动态规划解决最长公共子序列LCS问题
- 100天土鸡饲养计划(53)
- 运行时异常和检查性异常区别
- VS2015 C++编译器Bug一例
- 选书的基本原则
- Python进阶强化训练之csv|json|xml|excel高效解析与构建技巧
- shell 文本文件列筛选
- 饿了么2017机试编程题
- 关于RSA算法密钥长度/密文长度/明文长度
- java.sql.SQLDataException: ORA-01830: 日期格式图片在转换整个输入字符串之前结束
- PAT(A) - 1099. Build A Binary Search Tree (30)
- adb Install安装错误常见列表