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

网站设计客户端asp网站服务建设

网站设计客户端,asp网站服务建设,宝塔服务器搭建网站教程,兰州网站开发公司文章目录 引言auto 关键字基本概念使用方法高级特性与指针和引用结合使用与 const 结合使用 实际应用案例定义迭代器泛型编程 使用限制 decltype 关键字基本概念使用方法推导普通变量类型推导函数返回类型与复杂表达式一起使用 高级特性实际应用案例模板编程推导 Lambda 表达式…

文章目录

    • 引言
    • auto 关键字
      • 基本概念
      • 使用方法
      • 高级特性
        • 与指针和引用结合使用
        • 与 const 结合使用
      • 实际应用案例
        • 定义迭代器
        • 泛型编程
      • 使用限制
    • decltype 关键字
      • 基本概念
      • 使用方法
        • 推导普通变量类型
        • 推导函数返回类型
        • 与复杂表达式一起使用
      • 高级特性
      • 实际应用案例
        • 模板编程
        • 推导 Lambda 表达式的类型
      • 推导规则
    • auto 和 decltype 的结合使用
    • 总结

引言

在 C++11 标准之前,开发者在定义变量时必须明确指定其类型,这在处理复杂类型或者模板编程时,会使代码变得冗长且难以维护。为了顺应编程语言中自动类型推导的趋势,C++11 引入了 autodecltype 两个关键字,极大地简化了代码编写过程,提高了代码的可读性和可维护性。

auto 关键字

基本概念

auto 是一种类型推导机制,它可以让编译器根据右值表达式的类型自动推导出变量的类型。在编译时,编译器会根据初始化表达式的类型来确定 auto 所代表的具体类型。

使用方法

auto 的基本使用语法如下:

auto variable_name = expression;

其中,expression 表示右值表达式。例如:

auto num = 10; // num 的类型被推导为 int
auto str = "hello"; // str 的类型被推导为 const char*
auto pi = 3.14; // pi 的类型被推导为 double

高级特性

与指针和引用结合使用
int var5 = 0;
auto ptr1 = &var5;   // ptr1 为 int*
auto ptr2 = &var5;   // ptr2 为 int*
auto ref1 = var5;    // ref1 为 int&
auto ref2 = ref1;    // ref2 为 int
与 const 结合使用

当类型不为引用时,auto 的推导结果将不保留表达式的 const 属性;当类型为引用时,auto 的推导结果将保留表达式的 const 属性。

int var6 = 0;
const auto constVar = var6;  // constVar 为 const int
auto nonConstVar = constVar; // nonConstVar 为 int
const auto &constRef = var6; // constRef 为 const int&
auto &nonConstRef = constRef; // nonConstRef 为 const int&

实际应用案例

定义迭代器

在定义 STL 容器的迭代器时,auto 非常有用,因为迭代器的类型通常很复杂。

#include <vector>
#include <iostream>
int main() {std::vector<int> vec = {1, 2, 3, 4, 5};for (auto it = vec.begin(); it != vec.end(); ++it) {std::cout << *it << " ";}std::cout << std::endl;return 0;
}
泛型编程

在泛型编程中,auto 可以用于不确定类型的情况,简化代码。

#include <iostream>
using namespace std;
class C {
public:static int get() {return 100;}
};
class D {
public:static const char* get() {return "http://example.com";}
};
template <typename T>
void genericFunc() {auto result = T::get(); // result 的类型由编译器推导cout << result << endl;
}
int main() {genericFunc<C>();genericFunc<D>();return 0;
}

使用限制

  • 不能在函数参数中使用,因为函数参数在声明时并没有初始化。
  • 不能用于类的非静态成员变量。
  • 不能定义数组,例如 auto arr[] = var4; 是错误的。
  • 不能用于模板参数。

decltype 关键字

基本概念

decltype 是一个操作符,用于查询表达式的类型,而不实际计算表达式的值。它在编译时检查参数的类型,并生成该类型,是一个纯粹的编译时操作。

使用方法

推导普通变量类型
int x = 1;
decltype(x) y = x; // y 的类型为 int
推导函数返回类型
template<typename A, typename B>
auto add(A a, B b) -> decltype(a + b) {return a + b;
}
与复杂表达式一起使用
std::vector<int> v;
decltype(v.begin()) it = v.begin(); // it 的类型为 std::vector<int>::iterator

高级特性

decltype 的推导规则较为复杂,主要取决于表达式的值类型:

  • 如果表达式的值类型是 xvalue(将亡值),decltype 推导出的类型是 T&&
  • 如果表达式的值类型是 lvalue(左值),decltype 推导出的类型是 T&
  • 如果表达式的值类型是 prvalue(纯右值),decltype 推导出的类型是 T

实际应用案例

模板编程

在模板编程中,尤其是当函数返回类型依赖于模板参数时,decltype 可以精确推导函数返回类型。

template <typename T, typename U>
auto add(T t, U u) -> decltype(t + u) {return t + u;
}
推导 Lambda 表达式的类型

如果需要在其他地方使用 Lambda 表达式的类型,可以使用 decltype

auto lambda = [](int x) -> int { return x * x; };
decltype(lambda) anotherLambda = lambda;

推导规则

  • 如果 exp 是一个不被括号 () 包围的表达式,或者是一个类成员访问表达式,或者是一个单独的变量,那么 decltype(exp) 的类型就和 exp 一致。
  • 如果 exp 是函数调用,则 decltype(exp) 的类型就和函数返回值的类型相同(不会调用函数)。
  • 如果 exp 是一个用括号括起来的左值,则 decltype(exp) 为指向其类型的引用。

auto 和 decltype 的结合使用

autodecltype 可以结合使用,以便在需要类型匹配的场景中自动推导变量类型。例如:

auto x = 1;
decltype(auto) y = x; // y 的类型为 int

在模板编程中,这种结合使用的方式非常有用,因为它可以帮助我们将一个表达式的类型推导给另一个变量,而不必显式地指定类型。

总结

autodecltype 是 C++11 引入的两个强大的类型推导工具,它们在简化代码、提高类型安全性方面发挥了重要作用。auto 主要用于自动推导变量的类型,特别是在处理复杂类型或模板类型时;而 decltype 主要用于查询表达式的类型,特别是在模板编程中推导函数返回类型。理解这两个关键字的工作原理和应用场景,有助于我们编写更加高效、可读性强的 C++ 代码。


文章转载自:

http://dh3ALS0K.nrfqd.cn
http://nr20cvRD.nrfqd.cn
http://tntcSpVA.nrfqd.cn
http://xZZhgpes.nrfqd.cn
http://gjrbYQG7.nrfqd.cn
http://BfzJ4UJE.nrfqd.cn
http://CwsLZ00h.nrfqd.cn
http://hZzCYcCL.nrfqd.cn
http://Z6uPUIzL.nrfqd.cn
http://TA4moa6k.nrfqd.cn
http://fTPa7b2Z.nrfqd.cn
http://51DCuUN8.nrfqd.cn
http://yN7zPRe2.nrfqd.cn
http://f01qYb3K.nrfqd.cn
http://BJQXmMpo.nrfqd.cn
http://JWQfK6yX.nrfqd.cn
http://ce84kmgT.nrfqd.cn
http://WRoizgWE.nrfqd.cn
http://O3xyOAig.nrfqd.cn
http://40mjCXL5.nrfqd.cn
http://Zo8n0EnW.nrfqd.cn
http://DW5nDNn1.nrfqd.cn
http://Hyh7mN00.nrfqd.cn
http://bynMvMbM.nrfqd.cn
http://JivX1eH0.nrfqd.cn
http://J72mOvY5.nrfqd.cn
http://V8vGhU17.nrfqd.cn
http://5gyZaSnY.nrfqd.cn
http://mhbZ6E1y.nrfqd.cn
http://gnkvDCcD.nrfqd.cn
http://www.dtcms.com/wzjs/649751.html

相关文章:

  • 广州十大网站建设小程序到哪里去找
  • 企业管理软件行业未来的发展windows优化大师值得买吗
  • 学做网站平台wordpress主题与演示不一样
  • 做一家电商网站需要多少钱安装wordpress
  • dede网站模板页在什么文件夹一流的手机网站建设
  • 企业自建网站平台有哪些wordpress网店插件
  • 英文网站制作 官网企业信息管理系统发展历程
  • 四川住房建设和城乡建设厅网站wordpress设置密码访问带提示
  • 网站建设步骤 教 程在网站上上传文件需要怎么做
  • 网站开发售后工作wordpress如何知道用户数量
  • html 做网站的模板广东企业建网站
  • c mvc制作网站开发上海金融网站制作公
  • 蓬莱做网站那家好sql与网站开发
  • 给个网站急急急202深圳好的网站建设公司排名
  • 重庆云阳网站建设公司给网站写文章怎么做
  • 网站解析ip地址网站出现搜索
  • 阜阳建设大厦网站同步wordpress
  • 没有rss源的网站如何做rss订阅搜索推广渠道
  • 淘宝建站服务网站建设费需要列入无形资产吗
  • 西昌手机网站设计seo排名技术软件
  • 做python一个网站做海外网站的公司
  • 网站流程图wordpress输出文章标签名
  • 南通公司做网站代替 wordpress
  • 2019年建设什么网站好哪些网站做二手挖机
  • 网站建设优化东莞网站首页空白 wordpress
  • 张掖响应式建站平台湖南做网站 就问磐石网络专业
  • 建立的网站百度搜索不到中国是唯一一个拥有空间站
  • 网站建设规划书总结怎么写建筑工程机械人才网
  • 微网站制作电话wordpress 建站的利弊
  • 文山网站建设代理儋州市住房和城乡建设局官方网站