快速业务通道

工作中的C++:基本原理,重点推荐和结束语

作者 佚名技术 来源 程序设计 浏览 发布时间 2012-06-29

目录

基本原理

抛弃托管扩展

未来的乐趣

编程的演变

终极目标

结束语,尽管不是再见

这个月,我要改变常规的问答形式来告诉您关于我在网上发现的一个非常不错的文档。几个星期前,有人写信询问我,为什么他不能在 C++/CLI 中声明 const 函数:

// 引用类
ref class A {
  void f() const; // 不!
};

对此,我回复道:您就是不能,这是规则。公共语言基础结构 (CLI) 是为支持诸如 Visual Basic®、Java 甚至是 COBOL 语言而设计的 - 这些语言甚至不知道 const 的含义。因为 CLI 不知道 const 成员函数为何物,所以您不能使用。

我打完回复后,模糊地记起了一些埋藏在记忆深处的一些东西,关于 const,关于如何处理编译器提示以使其他语言可以忽略这些提示。我查找了以前的专栏,发现曾在 2004 年 7 月回答过一个关于 const 的问题。实际上,C++/CLI 的确允许声明 const 数据成员和参数 - 但不是 const 成员函数。图 1 显示了一个小程序,其具有 const 静态数据成员的引用类。如果编译此程序,然后使用 ILDASM 来反汇编,您将看到类似于下面的信息:

field public static int32
  modopt([mscorlib]System.Runtime.CompilerServices.IsConst)
    g_private = int32(0x00000001)

Figure1const.cpp

////////////////////////////////////////////////////////////////
// 要编译类型:
//  cl /clr const.cpp
//
#include <stdio.h>
ref class A {
  int m_val;
  // 允许使用常量数据成员,将生成 modopt
  static const int g_private = 1;
public:
  // 公共常量成员可由 Visual Basic 或其他不能识别常量的程序
  // 来修改(因而改用字面量)。
  literal int g_public = 1;
  A(int i) { m_val = i; }
  void print(); // const;       // 不!不允许使用常量 fn
};
void A::print()
{
  printf("Val is %d\n",m_val);
}
int main()
{
  A a(17);
  a.print();
}

Modopt(可选的修饰符)是一种对 CLI 使用者宣告的 MSIL 声明符:如果您了解它,很好;如果不了解,可以完全忽略它。相反,modreq(所需的修饰符)表示:如果您不了解它,就不能使用此函数。Volatile 便是 modreq 的一个示例。因为一个 volatile 引用随时都可以被操作系统/硬件(甚至是另一个线程)更改,所以 CLI 使用者最好知道 volatile 的含义,如果想要使用 volatile 对象的话。但 const 是可选的。请注意,尽管托管扩展会将 C++ const 对象转化成 CLI 文字量,C++/CLI 不再这么做了。因此要小心 - 如果声明一个公共 const 数据成员,用像 Visual Basic 这样的语言编写的客户端能够改变它的值。如果您希望 CLI 客户端不能改变该值,就应该声明对象字面量,如在图 1 中所示。但是,成员函数呢 - 为什么 const 成员函数是不允许的?

基本原理

噢,我在查找回复的过程中,偶然发现了一篇很好的文章,称为《A Design Rationale for C++/CLI》(C++/CLI 设计基本原理),出自 Microsoft 的 Herb Sutter 之手。Herb 是 C++/CLI 的架构师之一。您可以从 Herb 的博客上获得我在后面称作“基本原理”的文档(URL 是非常长的字符串 - 只要在 Web 上搜索“C++/CLI Rationale”就会找到)。正如标题表明的那样,“基本原理”解释了 C++/CLI 中所有事物为何以那种方式存在。它回答了从“为什么首先扩展 C++”到我自己关于 const 函数疑问的所有问题。我认为,每个想要了解 C++/CLI 深层原理的人都有必要阅读“基本原理”。由于“基本原理”中有很多重复,因此我想给出一些重点推荐。

就让我们从最重要的问题开始吧,为什么首先扩展 C++?简单明了的回答就

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号