Visual Studio 2010中C++的四大变化(转)

在Visual Studio 2010上搭建Opengl环境 在Visual Studio 2010上搭建Opengl环境 最近在看Opengl编程指南第8版,第八版采用的是Opengl4.3的环境,我将它与之前的第7版的目录对比了一下,发现第8版与第7版有了翻天覆地的变化,好像第八版把重点都放在了着色语言上面。 于是试着在vs2010上实现了一下第一个例程,发现环境搭建没有人指导的条件下好困难,但最后终于折腾成功了,把心得写一下,希望对同样迷茫的人有点帮助。 阅读详情

在微软即将发布的Visual Studio 2010正式版中,其对C++语言做了一些修改,本文对此做了小结,与大家分享。

Lambda表达式

很多编程编程语言都支持匿名函数(anonymous function)。所谓匿名函数,就是这个函数只有函数体,而没有函数名。Lambda表达式就是实现匿名函数的一种编程技巧,它为编写匿名函数提供了 简明的函数式的句法。同样是Visual Studio中的开发语言,Visual Basic和Visual C#早就实现了对Lambda表达式的支持,终于Visual C++这次也不甘落后,在Visual Studio 2010中添加了对Lambda表达式的支持。

Lambda表达式使得函数可以在使用的地方定义,并且可以在Lambda函数中使用Lambda函数之外的数据。这就为针对集合操作带来了很大的 便利。在作用上,Lambda表达式类似于函数指针和函数对象,Lambda表达式很好地兼顾了函数指针和函数对象的优点,却没有它们的缺点。相对于函数 指针或是函数对象复杂的语法形式,Lambda表达式使用非常简单的语法就可以实现同样的功能,降低了Lambda表达式的学习难度,避免了使用复杂的函 数对象或是函数指针所带来的错误。我们可以看一个实际的例子:

  1. #include "stdafx.h"   
  2. #include <algorithm>   
  3. #include <iostream>   
  4. #include <ostream>   
  5. #include <vector>   
  6.  
  7. using namespace std;   
  8.  
  9. int _tmain(int argc, _TCHAR* argv[])   
  10. {   
  11. vector<int> v;   
  12. for (int i = 0; i < 10; ++i) {   
  13. v.push_back(i);   
  14. }   
  15.  for_each(v.begin(), v.end(), [] (int n) {   
  16. cout << n;   
  17. if (n % 2 == 0) {   
  18. cout << " even ";   
  19. } else {   
  20. cout << " odd ";   
  21. }   
  22. });   
  23. cout << endl;   
  24.  
  25. return 0;   
  26. }  
  27. #include "stdafx.h"  
  28. #include <algorithm> 
  29. #include <iostream> 
  30. #include <ostream> 
  31. #include <vector> 
  32.  
  33. using namespace std;  
  34.  
  35. int _tmain(int argc, _TCHAR* argv[])  
  36. {  
  37. vector<int> v;  
  38. for (int i = 0; i < 10; ++i) {  
  39. v.push_back(i);  
  40. }  
  41.  for_each(v.begin(), v.end(), [] (int n) {  
  42. cout << n;  
  43. if (n % 2 == 0) {  
  44. cout << " even ";  
  45. } else {  
  46. cout << " odd ";  
  47. }  
  48. });  
  49. cout << endl;  
  50.  
  51. return 0;  
  52. } 

这段代码循环遍历输出vector中的每一个数,并判断这个数是奇数还是偶数。我们可以随时修改Lambda表达式而改变这个匿名函数的实现,修改 对集合的操作。在这段代码中,C++使用一对中括号“[]”来表示Lambda表达式的开始,其后的”(int n)”表示Lambda表达式的参数。这些参数将在Lambda表达式中使用到。为了体会Lambda表达式的简洁,我们来看看同样的功能,如何使用函数 对象实现:

  1. #include "stdafx.h"   
  2. #include <algorithm>   
  3. #include <iostream>   
  4. #include <ostream>   
  5. #include <vector>   
  6. using namespace std;   
  7.  
  8. struct LambdaFunctor {   
  9. void operator()(int n) const {   
  10. cout << n << " ";   
  11. if (n % 2 == 0) {   
  12. cout << " even ";   
  13. } else {   
  14. cout << " odd ";   
  15. }   
  16.  
  17. }   
  18. };   
  19.  
  20. int _tmain(int argc, _TCHAR* argv[])   
  21. {   
  22. vector<int> v;   
  23.  
  24. for (int i = 0; i < 10; ++i) {   
  25. v.push_back(i);   
  26. }   
  27.  
  28. for_each(v.begin(), v.end(), LambdaFunctor());   
  29. cout << endl;   
  30.  
  31. return 0;   
  32. }  
  33. #include "stdafx.h"  
  34. #include <algorithm> 
  35. #include <iostream> 
  36. #include <ostream> 
  37. #include <vector> 
  38. using namespace std;  
  39.  
  40. struct LambdaFunctor {  
  41. void operator()(int n) const {  
  42. cout << n << " ";  
  43. if (n % 2 == 0) {  
  44. cout << " even ";  
  45. } else {  
  46. cout << " odd ";  
  47. }  
  48.  
  49. }  
  50. };  
  51.  
  52. int _tmain(int argc, _TCHAR* argv[])  
  53. {  
  54. vector<int> v;  
  55.  
  56. for (int i = 0; i < 10; ++i) {  
  57. v.push_back(i);  
  58. }  
  59.  
  60. for_each(v.begin(), v.end(), LambdaFunctor());  
  61. cout << endl;  
  62.  
  63. return 0;  
  64. }  


通过比较我们就可以发现,Lambda表达式的语法更加简洁,使用起来更加简单高效。

静态断言static_assert

在之前的C++标准C++03中,我们可以使用两种断言:

◆使用预处理中的条件编译和#error指令,可以在预处理阶段检查一些编译条件。
◆可以使用宏assert来进行运行时检查,以确保程序逻辑的正确性。

但使用#error方法是非常烦琐的,并且不能够对模板参数进行检查,因为模板实例化是在编译时进行,而#error方法是在预处理阶段进行的。而 assert宏是在运行时进行检查。不难发现,我们缺少了一样东西,那就是可用于在编译时检查的工具。于是,静态断言应运而生。

在新的C++标准C++0x中,加入了对静态断言的支持,引入了新的关键字static_assert来表示静态断言。使用静态断言,我们可以在程 序的编译时期检测一些条件是否成立,这个特性在调试模板函数的模板参数时特别有用。在编译的时候,模板函数实例化,这时我们就可以使用静态断言去测试模板 函数的参数是否按照我们的设计拥有合适的值。例如下面这段代码:

  1. template <int N> struct Kitten {   
  2. static_assert(N < 2, "Kitten<N> requires N < 2.");   
  3. };   
  4.  
  5. int main() {   
  6. Kitten<1> peppermint;   
  7. Kitten<3> jazz;   
  8.  
  9.  return 0;   
  10. }  
  11. template <int N> struct Kitten {  
  12. static_assert(N < 2, "Kitten<N> requires N < 2.");  
  13. };  
  14.  
  15. int main() {  
  16. Kitten<1> peppermint;  
  17. Kitten<3> jazz;  
  18.  
  19.  return 0;  
  20. } 


当我们在主函数中使用“1”去实例化Kitten这个结构体时,在编译的时候,静态断言static_assert会测试参数N的值,当N的值小于2时就 会产生一个断言错误,并将相应的调试帮助信息输出到“Error List”窗口中,这样程序员就可以对问题快速定位,解决问题就更加方便了。

另外,静态断言还带来很多其他的优势。例如静态断言在编译时进行处理,不会产生任何运行时刻空间和时间上的开销,这就使得它比assert宏具有更 好的效率。另外比较重要的一个特性是如果断言失败,它会产生有意义且充分的诊断信息,帮助程序员快速解决问题。

auto关键字

在C++中,auto关键字的意义发生了改变。从Visual Studio 2010开始,auto关键字将用于指引编译器根据变量的初始值来决定变量的数据类型。换句话说,我们可以把auto当成一种新的数据类型,它可以“从初 始化器(initialize)中推导出所代表的变量的真正类型”。这种对auto关键字的使用方式可以大大消除当前替代方式所导致的冗长和易出错的代 码。我们看一个实际的例子:

  1. #include <iostream>   
  2. #include <map>   
  3. #include <ostream>   
  4. #include <regex>   
  5. #include <string>   
  6. using namespace std;   
  7. using namespace std::tr1;   
  8.  
  9. int main() {   
  10. map<string, string> m;   
  11.  
  12. const regex r("(//w+) (//w+)");   
  13.  
  14. for (string s; getline(cin, s); ) {   
  15. smatch results;   
  16. if (regex_match(s, results, r)) {   
  17. m[results[1]] = results[2];   
  18. }   
  19. }   
  20. for (auto i = m.begin(); i != m.end(); ++i) {   
  21. cout << i->second << " are " << i->first << endl;   
  22. }   
  23.  
  24. return 0;   
  25. }  
  26. #include <iostream> 
  27. #include <map> 
  28. #include <ostream> 
  29. #include <regex> 
  30. #include <string> 
  31. using namespace std;  
  32. using namespace std::tr1;  
  33.  
  34. int main() {  
  35. map<string, string> m;  
  36.  
  37. const regex r("(//w+) (//w+)");  
  38.  
  39. for (string s; getline(cin, s); ) {  
  40. smatch results;  
  41. if (regex_match(s, results, r)) {  
  42. m[results[1]] = results[2];  
  43. }  
  44. }  
  45. for (auto i = m.begin(); i != m.end(); ++i) {  
  46. cout << i->second << " are " << i->first << endl;  
  47. }  
  48.  
  49. return 0;  
  50. } 


在这段代码中,我们使用auto关键字来代替了真正的数据类型map<string, string>::iterator,这使得整个代码自然而简洁。另外,跟其他数据类型一样,我们也可以对auto关键字进行修饰,例如添加 const,指针(*),左值引用(&),右值引用(&&)等等,编译器会根据auto类型所代表的真正的数据来决定这些修饰的 具体含义。为了兼容一些旧有的C++代码,我们可以使用/Zc:auto这个编译器选项,来告诉编译器是采用auto关键字的原有定义还是在新标准C++ 中的定义。

右值引用

作为最重要的一项语言特性,右值引用(rvalue references)被引入到 C++中。我们可以通过操作符“&&”来声明一个右值引用,原先在C++中使用“&”操作符声明的引用现在被称为左值引用。

  1. int a;  
  2. int& aa_lvref = a;// 左值引用  
  3. int b;  
  4. int&& bb_rvref = b;// 右值应用 
  5.  

左值引用和右值引用的表现行为基本一致,它们唯一的差别就是右值引用可以绑定到一个临时对象(右值)上,而左值引用不可以。例如:

  1. int& a_lvref = int();// error C2440: 'initializing' : cannot convert from 'int' to 'int &'  
  2. int&& b_rvref = int();// OK! 
  3.  

在第一行代码中,我们将一个临时对象int()绑定到一个左值引用,将产生一个编译错误。而在第二行中,我们将临时对象绑定到右值引用,就可以顺利 通过编译。右值是无名的数据,例如函数的返回值一般说来就是右值。当对右值进行操作的时候,右值本身往往没有必要保留,因此在某些情况下可以直接“移动” 之。通过右值引用,程序可以明确的区分出传入的参数是否为右值,从而避免了不必要的拷贝,程序的效率也就得到了提高。我们考虑一个简单的数据交换的小程 序,从中来体会右值引用所带来的效率提升。我们可以写一个函数swap来实现两个变量值的交换:

  1. template <class T> swap(T& a, T& b)   
  2. {   
  3. T tmp(a); // tmp对象创建后,我们就拥有了a的两份拷贝   
  4. a = b;// 现在我们拥有b的两份拷贝   
  5. b = tmp;// 现在我们拥有a的两份拷贝   
  6. } 

在这段代码中,虽然我们只是为了进行简单的数据交换,但是却执行了多次对象拷贝。这些对象的拷贝操作,特别是当这些对象比较大的时候,无疑会影响程 序的效率。那么,如果使用右值引用如何实现呢?

  1. #include "stdafx.h"   
  2.  
  3. template <class T> 
  4. T&& move(T&& a)   
  5. {   
  6. return a;   
  7. }   
  8.  
  9. template <class T> void swap(T& a, T& b)   
  10. {   
  11. T tmp(move(a)); // 对象a被移动到对象tmp,a被清空   
  12. a = move(b);// 对象b被移动到对象a,b被清空   
  13. b = move(tmp);// 对象tmp被移动到对象b   
  14. }   
  15.  
  16. int _tmain(int argc, _TCHAR* argv[])   
  17. {   
  18. int a = 1;   
  19. int b = 2;   
  20. swap(a, b);   
  21.  
  22.  return 0;   
  23. }  
  24. #include "stdafx.h"  
  25.  
  26. template <class T>   
  27. T&& move(T&& a)  
  28. {  
  29. return a;  
  30. }  
  31.  
  32. template <class T> void swap(T& a, T& b)  
  33. {  
  34. T tmp(move(a)); // 对象a被移动到对象tmp,a被清空  
  35. a = move(b);// 对象b被移动到对象a,b被清空  
  36. b = move(tmp);// 对象tmp被移动到对象b  
  37. }  
  38.  
  39. int _tmain(int argc, _TCHAR* argv[])  
  40. {  
  41. int a = 1;  
  42. int b = 2;  
  43. swap(a, b);  
  44.  
  45.  return 0;  
  46. } 


在这段重新实现的代码中,我们使用了一个move()函数来代替对象的赋值操作符“=”,move()只是简单地接受一个右值引用或者左值引用作为参数, 然后直接返回相应对象的右值引用。这一过程不会产生拷贝(Copy)操作,而只会将源对象移动(Move)到目标对象。

正是拷贝(Copy)和移动(Move)的差别,使得右值引用成为C++0x中最激动人心的新特性之一。从实践角度讲,它能够完美是解决C++中长 久以来为人所诟病的临时对象的效率问题。从语言本身讲,它健全了C++中的引用类型在左值右值方面的缺陷。从库设计者的角度讲,它给库设计者又带来了一把 利器。而对于广大的库使用者而言,不动一兵一卒便能够获得“免费的”效率提升,在Visual Studio 2010中,因为有了对这些C++新特性的支持,重新点燃了程序员们对C++的热情。

Visual Studio 2010 C++开发实战指南:从环境配置到项目调试 C++作为经典的编程语言,其开发环境配置与项目构建是每位开发者必须掌握的基础技能。在Windows平台,Visual Studio作为主流的集成开发环境,其项目配置、编译链接原理直接影响程序的构建与运行。对于需要维护遗留系统或特定行业应用的开发者而言,理解经典IDE如Visual Studio 2010的工程结构、调试技巧与依赖管理具有重要的技术价值。本文聚焦于VS2010环境下的C++项目开发,通过解析**MFC库集成**与**第三方依赖配置**等核心问题,提供从环境准备、项目创建到错误排查的完整实践路径 阅读详情

相关推荐

在Visual Studio 2010中用C++开发文件夹监控系统

C++是一种静态类型、编译式、通用的编程语言,以其功能强大和效率高而闻名。它是C语言的扩展,支持过程化编程、面向对象编程和泛型编程。掌握C++对于任何希望在IT行业深入发展的专业人士来说都是基础而至关重要的。本章将首先回顾C++的核心概念,包括变量、数据类型、控制结构、函数、类和对象等,这些都是构建复杂应用程序所必需的。" << endl;// 输出 Hello, World!到屏幕return 0;

weixin_30336531的博客 1173

好厉害的c++ 2010

Visual Studio 2010中C++的四大变化2010-04-02 13:54 |  2834次阅读 |  来源:尹成 博客园  【已有17条评论】发表评论 关键词:微软  | 感谢java060515的提供 |  收藏这篇资讯 在微软即将发布的Visual Studio 2010正式版中,其对C++语言做了一些修改,本文对此做了小结,与大家分享。Lam

maiyude的专栏 798

深度学习赋能胶囊内镜:AI如何实现胃肠道出血的自动检测与分割

在计算机视觉领域,图像分类与目标检测是处理医学影像分析的核心技术。其原理在于通过卷积神经网络(CNN)自动学习图像中的多层次特征表示,实现对特定目标的识别与定位。这项技术的价值在于能够将医生从海量、重复的阅片工作中解放出来,提升诊断效率与一致性,尤其在处理如胶囊内镜产生的数万张连续图像时优势显著。其应用场景广泛覆盖了医学影像的辅助诊断,例如在消化内科,对胃肠道出血的早期发现与精准定位具有重要临床意义。本文聚焦于利用深度学习模型,如U-Net和EfficientNet,构建一个能够从复杂多变的胶囊内镜图像中,

weixin_42533910的博客 383

Visual Studio 11开发指南(17)C++11更新- Lambda表达式

Visual Studio 2010 年以来有可能在 c + + 代码中,和更具体地 STL 使用 Lambda 表达式 (匿名方法的窗体)。例如,他们是很好的做法,当我们使用这些类型的算法for_each、 parallel_for、 parallel_for_each等。 1.std::deque&lt;int&gt; d1; 2. d1.push_back (2); 3. d1....

tubaluer 127

从收音机到Arduino:手把手教你用BJT三极管搭建一个简易音频放大器(附电路图与元件清单)

本文详细介绍了如何使用BJT三极管搭建简易音频放大器,涵盖电路原理、元件选择、设计步骤及调试技巧。通过实践项目帮助电子爱好者深入理解BJT的放大特性,并提供与Arduino结合的扩展应用方案,适合创客和DIY玩家。

aitie1479的博客 443

深入剖析:功率放大电路设计精髓——从理论到实践

输入信号首先被调制(通常是PWM脉宽调制)成高频开关信号,驱动功率开关管(MOSFET),再通过LC低通滤波器滤除高频分量,还原出放大的音频信号。在靠近功放板电源引脚处放置足够容量的电解电容(如100uF - 1000uF)和高频瓷片电容(如0.1uF)并联进行电源去耦,抑制低频和高频干扰,防止低频振荡(Motorboating)和高频自激。,堪称电子世界里的“能量转换器”。当输入信号在零附近(即两个器件切换导通的区域)时,由于器件的开启电压(Vbe或Vgs)不为零,输出波形会出现明显的衔接不流畅的失真。

Zihan2558的博客 1698

Visual Studio2010新特性--auto 数据类型自动类型判别

VC++2010在c++语言里面增加了一个特殊的新特性,c++语言可以自动判别数据类型, 而无需跟以前的c++语言一样,需要先定义数据,再使用,c++编译器将自动识别数据类型, 给程序员带来了更多的灵活性与便捷! auto这个关键字来自VC++ 6.0标准。在VC++ 6.0中它没有什么作用,C++ 0x中“借用”它来作为自动类型推演(automatic type deduction)。当a

放飞的心灵-记录学习的点点滴滴 960

无人驾驶感知融合——横摆角速度的多源估计算法解析

本文深入解析了无人驾驶感知融合中的横摆角速度多源估计算法,详细介绍了轮速差法、侧向加速度法、曲率法和惯性传感器直读法四种计算方法及其优缺点。通过卡尔曼滤波实战案例,展示了多源融合算法在提升精度和稳定性方面的显著优势,并探讨了工程实践中的时间对齐、坐标系统一等关键问题。

weixin_31458015的博客 462

VS2010 + C#4.0使用 async + await

方法一: 安装官方出的Microsoft.Bcl.Async包 最新发布日期为 2014/4/12,版本1.0.168 (不支持VS2010) 1、解决方案-右键-管理解决方案的NuGet程序包 2、搜索Microsoft.Bcl.Async,点击安装 3、等待下载完成 4、点击我接受 5、发现引用下多出7个引用 ...

weixin_30668887的博客 1328

uniapp - 微信小程序接入官方人脸识别认证详细流程及示例源码,Uniapp微信小程序项目集成官方提供的人脸识别身份验证插件接口(多种示例:人脸核验、身份证件与人脸是否匹配、是否活体、实名认证等)

uni-app微信小程序人脸识别认证,使用uniapp开发微信小程序的人脸采集功能/人脸识别功能,uniapp vue3微信小程序活体人脸识别,Uni-app微信小程序实名认证,uniApp微信小程序人脸认证,UniApp的微信小程序实名认证与人脸识别系统开发,人脸核身微信小程序uni-app接入流程,wx.startFacialRecognitionVerify,uniapp开发微信小程序-人脸采集功能、微信人脸识别实名认证集成指南,识别失败,人脸识别接口怎么调用,前后端完整示例代码demo,人脸检测功能

🏆 前端领域优质创作者 3284

Python爬虫实战:Playwright 攻克京东图书新书榜(含动态价格与分页)!

我长期专注 Python 爬虫工程化实战,主理专栏 《Python爬虫实战》:从采集策略到反爬对抗,从数据清洗到分布式调度,持续输出可复用的方法论与可落地案例。内容主打一个“能跑、能用、能扩展”,让数据价值真正做到——抓得到、洗得净、用得上。

喵手的博客 594

Visual Studio 2010中国团队的研发内幕

——微软VisualStudio商业软件部总经理潘正磊专访 文 / 霍泰稳常政 随着2010年4月12日微软官方正式颁布“VisualStudio2010”的日期临近,无数中国开发者翘首以盼,津津乐道微软下一代软件开发平台的全新功能。但并不是很多人知道,有一群中国研发人员在VisualStudio2010的诞生过程中,起着举足轻重的作用。这是一个什么样的团队?他们正以什么样的方式...

《程序员》官方BLOG 5277

Python爬虫实战:利用最新技术爬取抖音话题挑战视频

本文将详细介绍如何使用Python最新技术栈构建一个高效的抖音话题挑战视频爬虫。我们将从环境配置开始,逐步讲解请求模拟、数据解析、反反爬策略、数据存储等关键环节,并提供完整的代码实现。本文适合有一定Python基础的开发者学习高级网络爬虫技术。关键词:Python爬虫、抖音API、话题挑战、视频爬取、反反爬本文详细介绍了如何使用Python最新技术栈构建抖音话题挑战视频爬虫。我们从基础请求开始,逐步实现了数据解析、反反爬策略、数据存储等核心功能,并探讨了分布式和增量爬取等高级主题。更智能的反反爬策略。

2201_76125261的博客 1744

Visual Studio 2010中C++项目升级指南

转自:http://www.cnblogs.com/flying_bat/archive/2010/04/28/1722648.html 如何升级? Visual Studio 2010支持来自VC6、Visual Studio 2002、Visual Studio 2003、Visual Studio 2005和Visual Studio 2008的升级。同Visual Stud

missingu1314的专栏 1370

【CanMV K210】AI 视觉 MNIST 手写数字识别与分类推理

本文介绍了基于CanMV K210开发板的MNIST手写数字识别实验。实验通过摄像头采集图像,经过开窗、灰度化、缩放、反色等预处理后,使用KPU神经网络加速器运行MNIST分类模型,最终在LCD上显示识别结果。重点讲解了分类模型与检测模型的区别、图像预处理流程以及KPU推理结果的解析方法。实验帮助理解从图像采集到分类输出的完整AI视觉处理链路,并提供了调试思路和硬件连接说明。

Mr数据杨 366

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Visual Studio 2010中C++的四大变化

在微软即将发布的Visual Studio 2010正式版中,其对C++语言做了一些修改,本文对此做了小结,与大家分享。 Lambda表达式 很多编程编程语言都支持匿名函数(anonymous function)。所谓匿名函数,就是这个函数只有函数体,而没有函数名。Lambda表达式就是实现匿名函数的一种编程技巧,它为编写匿名函数提供了 简明的函数式的句法。同样是Visual Studio中的

狼牙 861

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Visual Studio 2010 C++ 0x

美国AT&T贝尔实验室的本贾尼•斯特劳斯特卢普(Bjarne Stroustrup)博士在20世纪80年代初期发明并实现了C++。随后,在面向对象语言迅速发展的时代背景下,C++以其面向对象的语言特性同时对C语言的良好兼容,并且凭借着接近C语言的效率,C++语言在工业界使用的开发语言中占据了相当大的份额。在以后的发展中,C++不断引入新的内容,标准模板库(STL)和后来的Boost等程序库的出现,

博客搬往 http://begtostudy.cnblogs.com 2万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

visual studio与visual c++ 6.0的区别

 Visual Studio支持多种语言,Visual C++ 6.0 只支持C和C++ Visual C++ 6.0 是Visual Studio 6.0的一个组成部分,Visual Studio 6.0中还包括Visual Basic 6.0、Visual Foxpro 6.0和Visual J++ 6.0。 之后的版本不再支持Visual Foxpro,而且新增加了C#

夏日向日葵的专栏 2万+

Visual Studio 2010中VC++ Directories的设置

以往,在Visual Studio 2008中,VC++ Directories的设置位于这里: Tools | Options | Projects and Solutions | VC++ Directories 在Visual Studio 2010中,VC++ Directories的位置变了。如下: View | Other Window | Property Manage

辛亚平的专栏 1万+
上一篇: DAO在MFC中的应用实例
下一篇: 学习 10 种良好的 XML 使用习惯(转)
mannhello
博客等级 码龄18年 64粉丝 52原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值