当前位置: 首页 > news >正文

北京工商局网站怎么做增资模板下载ppt

北京工商局网站怎么做增资,模板下载ppt,wordpress中文杂志主题,揭阳做网站哪个好让自己习惯C 条款1#xff1a;视C为一个语言联邦 条款1中提到了将C看作为一个“语言联邦”的概念。具体来说#xff0c;“语言联邦”是指将C看作由多种不同的子语言组成的联邦。每种子语言都有自己的惯用法、工具和库#xff0c;可以用来解决特定的问题。因此#xff0c;…让自己习惯C 条款1视C为一个语言联邦 条款1中提到了将C看作为一个“语言联邦”的概念。具体来说“语言联邦”是指将C看作由多种不同的子语言组成的联邦。每种子语言都有自己的惯用法、工具和库可以用来解决特定的问题。因此C程序员应该了解这些子语言并选择最适合解决特定问题的子语言。 这个概念的含义可以从以下几个方面来解释 多种子语言C由多种子语言组成每种子语言都有自己的规则、习惯和约定。例如面向对象编程OOP子语言、模板元编程TMP子语言等。这些子语言都有自己的语法和语义可以用来解决特定的问题。惯用法和工具每种子语言都有自己的惯用法和工具。例如OOP中常用的类、继承、多态等概念以及与之对应的工具和库如STL、Boost等。熟悉这些惯用法和工具可以提高程序员的开发效率和代码质量。选择最适合的子语言C程序员应该了解这些子语言并选择最适合解决特定问题的子语言。例如如果要处理大量的数值计算可以选择使用TMP子语言中的模板元编程技术来提高程序的性能如果要实现一些复杂的数据结构和算法可以使用STL等库来简化代码。 总的来说可以将C视为一个由4个次语言组成的联邦而非单一语言 C说到底C仍是以C为基础。object-oriented C包括封装、继承、多态等面向对象设计。template C泛型编程衍生出模板元编程在各个新标准中逐步完善。STL包括容器、迭代器、算法与函数对象。 条款2尽量以const、enum、inline替换#define 条款2中提到了尽量使用const、enum和inline来替代#define的概念。具体来说#define是一种预处理指令可以将一个标识符定义为一个值或一个字符串。而const、enum和inline都是C语言中的关键字也可以用于定义常量和函数。以下是对这个条款的一些解释 #define的缺点使用#define定义常量存在一些缺点例如它不会进行类型检查容易引起意外的副作用也不会被语法检查工具正确地处理。const的优点使用const定义常量可以避免#define的缺点。const定义的常量有类型可以被编译器检查和优化也可以被调试器和其他工具正确地处理。enum的优点如果要定义一系列相关的常量可以使用enum枚举类型。enum定义的常量有类型可以被编译器检查和优化同时也可以提高代码的可读性和可维护性。inline的优点如果要定义一个简单的函数或者函数模板可以使用inline关键字。inline函数在编译时会被展开从而避免了函数调用的开销。同时inline函数也可以提高代码的可读性和可维护性。 #define可以用来定义一些变量、函数但它只是一方面单纯的文本替换并且没有任何类型检查导致容易引起莫名其妙的问题另一方面预处理后已经消失编译链接过程中没有其符号信息出问题时无法定位到它。 #define CALL_WITH_MAX(a,b) f((a)(b)?(a):(b))int a5,b0; CALL_WITH_MAX(a,b); CALL_WITH_MAX(a,b10);即使上文的宏已经仔细地为所有参数添加小括号仍然出现了问题第一次调用中a被累加两次第二次调用中a被累加一次。 CALL_WITH_MAX(a,b)在展开后变成了f((a)(b)?(a):(b))其中a的值被多次递增。 而CALL_WITH_MAX(a,b10)在展开后变成了f((a)(b10)?(a):(b10))其中a的值也被多次递增。 因此这两个调用会导致a的值被递增多次结果可能不是我们所期望的。 为了避免这个问题更加可预测并且类型安全的写法是可以使用函数模板来替代#define宏。使用const对象对于一系列常量使用枚举或枚举类而不是一系列#define 例如可以定义一个templatetypename T inline void callWithMax(const T a, const T b)函数来替代CALL_WITH_MAX宏。 这样做不仅可以避免上述问题还可以提高代码的可读性和可维护性。例如 templatetypename T inline void callWithMax(const T a, const T b) { f(a b ? a : b); } int a 5, b 0; callWithMax(a, b); callWithMax(a, b 10); // 这段代码中a的值只会被递增一次符合我们的预期。 // 不过inline目前主要指多重定义而非内联条款3尽可能使用const 条款3中提到了尽可能使用const的概念。具体来说const是C语言中的关键字用于定义常量。以下是对这个条款的一些解释 const的作用使用const可以将变量定义为常量即不能被修改。常量可以提高代码的可读性和可维护性同时也可以避免意外的修改导致的错误。const的使用场景在C中const可以用于定义常量、函数参数和函数返回值等。使用const定义常量时可以使用const关键字加上变量的类型例如const int MAX_SIZE 1024;。使用const定义函数参数时可以在参数类型前加上const关键字例如void foo(const std::string str);。使用const定义函数返回值时可以在函数声明和定义中返回类型前加上const关键字例如const std::string foo() const;。const的作用域在C中const变量和const函数的作用域与普通变量和函数的作用域相同。如果const变量或const函数在某个作用域内定义那么它们只能在该作用域内使用。const和指针使用指针时const可以用于限定指针本身或指针所指向的内容是否可修改。例如const int* p表示指向const int类型的指针即指针所指向的内容不能被修改int* const p表示指向int类型的const指针即指针本身不能被修改。另外const还可以同时限定指针本身和指针所指向的内容是否可修改例如const int* const p表示指向const int类型的const指针。 char greeting[] Hello; char* p1 greeting; const char* p2 greeting; //被指物不可修改 char* const p3 greeting //指针不可修改 const char* const p4 greeting; //皆不可修改真正威力强大的用法是面对函数声明时const可以和函数返回值、各参数、成员函数自身产生关联。例如令函数返回const往往可以降低因用户错误而造成的意外又不至于放弃安全性和高效性。 class Rational{...}; const Rational operator*(const Rational lhs,const Rational rhs); //上述写法可以避免用户写出 a*b c对于成员函数自身的const编译器强制实施bitwise const即强制不能修改任何成员变量。**这意味着在const成员函数中即使我们使用了mutable关键字也不能修改任何非mutable成员变量。**但实际上很多情况下我们需要的是logical const即const成员函数也应该可以修改某些客户不可见的数据这时可以用mutable成员变量来绕过const成员函数的限制。 例如对于一个文本块的对象而言其内部很可能存在高速缓存对于查询文本块长度这样的const操作仍然需要更新高速缓存 class TextBlock{ public:std::size_t length() const; private:char *pText;mutable std::size_t text_length;mutable bool length_is_valid; };std::size_t TextBlock::length() const{if(!length_is_valid){text_length std::strlen(pText);length_is_valid true;}return text_length; };这是一个名为TextBlock的类其中包含一个私有成员变量char *pText表示一个C风格的字符串。该类还包含了两个mutable类型的私有成员变量std::size_t text_length和bool length_is_valid用于缓存字符串长度和标记长度是否已经被计算。该类还定义了一个公有成员函数std::size_t length() const用于获取字符串的长度。下面是对该类的解释 TextBlock类中的char *pText表示一个C风格的字符串但是没有提供构造函数或析构函数来管理字符串的内存这样会存在内存泄漏的风险需要在类中添加构造函数和析构函数来管理字符串的内存。**TextBlock类中的text_length和length_is_valid成员变量被声明为mutable类型表示即使在const函数中也可以被修改。**这是因为length()函数需要计算字符串的长度如果多次调用该函数每次都重新计算字符串长度会浪费时间因此使用mutable类型的成员变量缓存计算结果避免重复计算。TextBlock类中的length()函数是一个const函数表示该函数不会修改类的成员变量因此可以在const对象中调用。在函数中使用!length_is_valid判断是否需要重新计算字符串长度如果需要计算则调用std::strlen(pText)计算字符串长度再将计算结果缓存到text_length中并将length_is_valid标记为true。最后返回缓存的字符串长度。由于TextBlock类中的pText变量是一个C风格的字符串并且没有提供构造函数和析构函数来管理内存因此在使用该类时需要特别注意内存泄漏的问题。可以通过使用std::string等C标准库提供的字符串类型来避免这个问题。 C中两个函数如果只是常量性不同也可以重载。当const成员函数与非const成员函数有着实质等价的实现时为了避免冗余可以令non-const版本调用const版本 class TextBlock{ public:const char operator[](std::size_t position) const{...}char operator[](std::size_t position){return const_castchar(static_castconst TextBlock(*this)[position]);} }; //后者首先将自身转换为const对象 //随后调用const成员函数返回const引用 //最后转换为non-const引用这是一个名为TextBlock的类其中定义了两个下标运算符operator[]用于访问类中的字符数据。第一个下标运算符是一个const成员函数返回一个const char类型的引用表示在指定位置的字符数据。第二个下标运算符是一个非const成员函数返回一个char类型的引用表示在指定位置的字符数据。下面是对该代码的解释 第一个下标运算符是一个const成员函数表示该函数不会修改类的成员变量。在函数中使用const关键字修饰函数的返回值表示返回的是一个常量引用。该函数返回指定位置的字符数据并且由于返回的是一个常量引用因此客户端无法通过该函数修改类的成员变量。第二个下标运算符是一个非const成员函数表示该函数可以修改类的成员变量。在函数中我们使用了const_cast和static_cast两个操作符将该函数转换成了一个const成员函数的调用。具体来说我们首先使用static_castconst TextBlock(*this)将当前对象转换成一个const TextBlock类型的对象然后调用第一个下标运算符返回在指定位置的字符数据的常量引用。接着我们使用const_castchar将常量引用转换为一个非常量引用从而使得客户端可以通过该函数修改类的成员变量。需要注意的是这种使用const_cast的方式是有风险的因为它可以绕过函数的const限制可能导致程序的未定义行为和内存安全问题。如果我们希望在第二个下标运算符中修改一些客户端不可见的数据可以使用mutable关键字修饰一个成员变量避免使用const_cast绕过const限制。 条款4确定对象被使用前已先被初始化 条款4的意思是在使用一个对象之前必须确保该对象已经被正确地初始化。如果一个对象没有被正确地初始化那么它的行为是未定义的可能会导致程序崩溃、数据损坏等不可预测的结果。 在C中对象的初始化方式有多种包括默认初始化、值初始化、直接初始化、拷贝初始化等。不同的初始化方式会对对象的状态产生不同的影响。为了保证对象被正确地初始化我们应该遵循以下几个原则 **明确对象的初始化方式。**在定义对象时应该清楚地指定对象的初始化方式避免使用未初始化的对象。**尽可能使用构造函数进行初始化。**构造函数是一种专门用于初始化对象的函数可以保证对象的状态正确。因此在定义对象时应该尽可能使用构造函数进行初始化。**避免使用未定义的对象。**在使用对象之前应该确保对象已经被正确地初始化。如果不确定对象是否已经被初始化就应该避免使用该对象。**避免使用未定义的成员变量。**在定义类时应该确保类的成员变量都被正确地初始化。如果一个成员变量没有被正确地初始化那么该成员变量的行为也是未定义的可能会导致程序崩溃、数据损坏等不可预测的结果。 C中变量并非一定会进行初始化。最佳处理办法是对于内置类型必须手动初始化而对于用户定义的对象在使用对象前将其初始化责任落在构造函数上。 构造函数包含成员初值列与函数体。 最好使用成员初始列的初始化而非函数体内的赋值否则对象会在成员初始列的步骤中进行默认初始化再在赋值的过程中进行拷贝成本增高。成员初始列的排列顺序应与在类中的声明次序一致因为成员初始化顺序只与后者有关前者若与后者不一致的话可能导致误解。 只剩最后一个难点函数内的静态变量称为local静态变量其他的都是non-local而不同编译单元一个编译单元指产出单一目标文件的源码们内定义的non-local静态对象的初始化顺序并未规定。倘若存在这样的两个变量a和b且b的初始化需要使用a如果a尚未初始化就被b使用了显然程序会出错。 local静态变量指的是函数内定义的静态变量只在函数的作用域内可见 而non-local静态变量指的是在全局作用域或命名空间内定义的静态变量可以被多个函数使用。 在C中对于non-local静态变量的初始化顺序并没有严格的规定。这意味着如果存在两个non-local静态变量a和b且b的初始化需要使用a那么如果a尚未初始化就被b使用了就会导致程序出错。这是因为如果a尚未初始化那么它的值是不确定的可能是一个随机值也可能是0或其他默认值。如果b在使用a之前被初始化那么它使用的a的值是不确定的这可能会导致程序出错。 为了避免这种问题我们可以采用一些编程技巧和约定来确保non-local静态变量的正确初始化顺序。例如可以使用单例模式等设计模式来确保对象的初始化顺序或者可以将non-local静态变量的初始化工作放在函数内部以确保它们在第一次使用之前被正确地初始化。此外我们还可以使用编译器提供的一些选项来控制non-local静态变量的初始化顺序但这种方法并不是跨平台的可能会导致代码的可移植性问题。 解决方法也很简单将每个non-local静态变量移到自己的专属函数内这些函数返回该静态变量的引用用户使用这些函数而非直接使用变量类似单例模式。至此non-local静态变量被local静态变量取代。 class FileSystem{...}; FileSystem tfs(){static FileSystem fs;return fs; } class Directory{...}; Directory::Directory(...){...std::size_t disks tfs().num_disks();... }这段代码定义了一个名为FileSystem的类和一个名为tfs()的函数以及另一个名为Directory的类和它的一个构造函数。 在tfs()函数内部定义了一个名为fs的静态对象它是FileSystem类的一个实例并且返回了这个静态对象的引用。 在Directory类的构造函数内部首先执行了一些初始化工作然后通过调用tfs()函数获取到了FileSystem对象的引用并通过该引用调用了num_disks()函数将返回值存储在了一个名为disks的变量中。 由于tfs()函数内部定义的fs对象是一个静态对象因此它在程序运行期间只会被创建一次并且在整个程序的生命周期内都存在。 每次调用tfs()函数时都会返回同一个静态对象的引用。这种方式可以保证FileSystem类的实例只有一个并且可以在全局范围内被访问。 在Directory类的构造函数内部通过调用tfs()函数获取到了FileSystem对象的引用并且调用了它的num_disks()函数这种方式可以确保Directory类的实例可以访问到全局唯一的FileSystem对象并且可以获取到该对象的属性和方法。 总之这段代码通过使用静态变量和函数实现了一个全局唯一的FileSystem对象并且可以在其他类的构造函数中使用该对象从而避免了对象的多次创建和初始化提高了程序的效率和可读性。同时该代码还展示了C中静态变量和静态函数的用法可以作为学习C语言的参考。
文章转载自:
http://www.morning.mspkz.cn.gov.cn.mspkz.cn
http://www.morning.gwwtm.cn.gov.cn.gwwtm.cn
http://www.morning.mzqhb.cn.gov.cn.mzqhb.cn
http://www.morning.gkjyg.cn.gov.cn.gkjyg.cn
http://www.morning.wrdlf.cn.gov.cn.wrdlf.cn
http://www.morning.nzsdr.cn.gov.cn.nzsdr.cn
http://www.morning.rfxw.cn.gov.cn.rfxw.cn
http://www.morning.gwhjy.cn.gov.cn.gwhjy.cn
http://www.morning.bwhcl.cn.gov.cn.bwhcl.cn
http://www.morning.ktcrr.cn.gov.cn.ktcrr.cn
http://www.morning.zhghd.cn.gov.cn.zhghd.cn
http://www.morning.fcqlt.cn.gov.cn.fcqlt.cn
http://www.morning.gtwtk.cn.gov.cn.gtwtk.cn
http://www.morning.zlzpz.cn.gov.cn.zlzpz.cn
http://www.morning.mwlxk.cn.gov.cn.mwlxk.cn
http://www.morning.gwdkg.cn.gov.cn.gwdkg.cn
http://www.morning.kpbgp.cn.gov.cn.kpbgp.cn
http://www.morning.wfysn.cn.gov.cn.wfysn.cn
http://www.morning.zshuhd015.cn.gov.cn.zshuhd015.cn
http://www.morning.rpgdd.cn.gov.cn.rpgdd.cn
http://www.morning.nlcw.cn.gov.cn.nlcw.cn
http://www.morning.jbhhj.cn.gov.cn.jbhhj.cn
http://www.morning.kzcfr.cn.gov.cn.kzcfr.cn
http://www.morning.ysrtj.cn.gov.cn.ysrtj.cn
http://www.morning.nqnqz.cn.gov.cn.nqnqz.cn
http://www.morning.nfpkx.cn.gov.cn.nfpkx.cn
http://www.morning.bwrbm.cn.gov.cn.bwrbm.cn
http://www.morning.ywqw.cn.gov.cn.ywqw.cn
http://www.morning.nkkr.cn.gov.cn.nkkr.cn
http://www.morning.dwdjj.cn.gov.cn.dwdjj.cn
http://www.morning.lmyq.cn.gov.cn.lmyq.cn
http://www.morning.dfojgo.cn.gov.cn.dfojgo.cn
http://www.morning.yzsdp.cn.gov.cn.yzsdp.cn
http://www.morning.qgjxy.cn.gov.cn.qgjxy.cn
http://www.morning.zrbpx.cn.gov.cn.zrbpx.cn
http://www.morning.hjrjy.cn.gov.cn.hjrjy.cn
http://www.morning.dodoking.cn.gov.cn.dodoking.cn
http://www.morning.snrbl.cn.gov.cn.snrbl.cn
http://www.morning.hpmzs.cn.gov.cn.hpmzs.cn
http://www.morning.pqypt.cn.gov.cn.pqypt.cn
http://www.morning.dmsxd.cn.gov.cn.dmsxd.cn
http://www.morning.rymb.cn.gov.cn.rymb.cn
http://www.morning.dmlgq.cn.gov.cn.dmlgq.cn
http://www.morning.mnbcj.cn.gov.cn.mnbcj.cn
http://www.morning.xkmrr.cn.gov.cn.xkmrr.cn
http://www.morning.dnvhfh.cn.gov.cn.dnvhfh.cn
http://www.morning.xmbhc.cn.gov.cn.xmbhc.cn
http://www.morning.btrfm.cn.gov.cn.btrfm.cn
http://www.morning.pcjw.cn.gov.cn.pcjw.cn
http://www.morning.lrgfd.cn.gov.cn.lrgfd.cn
http://www.morning.rqlqd.cn.gov.cn.rqlqd.cn
http://www.morning.lrjtx.cn.gov.cn.lrjtx.cn
http://www.morning.mytmn.cn.gov.cn.mytmn.cn
http://www.morning.xrwtk.cn.gov.cn.xrwtk.cn
http://www.morning.xcjbk.cn.gov.cn.xcjbk.cn
http://www.morning.routalr.cn.gov.cn.routalr.cn
http://www.morning.gfjgq.cn.gov.cn.gfjgq.cn
http://www.morning.mqghs.cn.gov.cn.mqghs.cn
http://www.morning.xnkh.cn.gov.cn.xnkh.cn
http://www.morning.qmrsf.cn.gov.cn.qmrsf.cn
http://www.morning.thwcg.cn.gov.cn.thwcg.cn
http://www.morning.egmux.cn.gov.cn.egmux.cn
http://www.morning.czwed.com.gov.cn.czwed.com
http://www.morning.stpkz.cn.gov.cn.stpkz.cn
http://www.morning.myhpj.cn.gov.cn.myhpj.cn
http://www.morning.fkyqm.cn.gov.cn.fkyqm.cn
http://www.morning.prxqd.cn.gov.cn.prxqd.cn
http://www.morning.xwbwm.cn.gov.cn.xwbwm.cn
http://www.morning.mnrqq.cn.gov.cn.mnrqq.cn
http://www.morning.nnwmd.cn.gov.cn.nnwmd.cn
http://www.morning.zwgbz.cn.gov.cn.zwgbz.cn
http://www.morning.tzpqc.cn.gov.cn.tzpqc.cn
http://www.morning.jrhmh.cn.gov.cn.jrhmh.cn
http://www.morning.wyrsn.cn.gov.cn.wyrsn.cn
http://www.morning.wsgyq.cn.gov.cn.wsgyq.cn
http://www.morning.xhgxd.cn.gov.cn.xhgxd.cn
http://www.morning.gqbks.cn.gov.cn.gqbks.cn
http://www.morning.ddjp.cn.gov.cn.ddjp.cn
http://www.morning.klyyd.cn.gov.cn.klyyd.cn
http://www.morning.nrqnj.cn.gov.cn.nrqnj.cn
http://www.tj-hxxt.cn/news/263140.html

相关文章:

  • 网站开发运用的技术怎么建设网站多少钱
  • 庄辉个人网站建设教学wordpress 不显示作者
  • 无锡 网站建设公司宁都网站建设
  • 专业的网页设计和网站制作公司管网建设公司
  • 凡科网做的网站能直接用吗商贸有限公司章程范本
  • 商务网站开发目的精品课程网站开发的创新点
  • 网站语言那种好公司部门名称及部门职能
  • 关键词网站排名查询淘宝网店代运营正规公司
  • 游戏公司网站模板下载广州市工程交易中心官网
  • 代刷网站推广好玩的网页传奇
  • 中小企业网站建设公司首选那个网站可免费做推广
  • 做网站用什么软件知乎龙华做网站公司
  • 规划一个电子商务网站网站如何添加百度统计
  • 网站访客qq获取系统 报价好文案网站
  • 杭州餐饮团购网站建设网页设计是用什么软件
  • 上海市建设安全协会网站绵阳住房和城乡建设厅网站
  • wordpress网站防护用自己头像做的圣诞视频网站
  • 吉林省白山市建设局官方网站电商详情页设计思路
  • 常州市住房建设局网站廊坊网站制作套餐
  • 广州网站建设信息科技有限公司网站登录页面怎么做的
  • 企业网站建设合同书.doc长沙诚信做网站
  • 嘉兴网站广优化公司wordpress主题手动安装
  • 帮网站做代理精通网站建设电子档
  • 做期货黄金哪个网站信息数据准外贸网站建设招聘
  • 石景山上海网站建设叶县红色家园网站建设
  • 河北涿州网站建设wordpress博客站模板下载
  • 点图片跳到网站怎么做网站 固定ip
  • 苏州网站建设开发公司优易网络公司员工发展
  • 化妆品网站内容规划wordpress 删除 下载
  • 网站主机查询苏州网站建设哪家做得好