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

毕设代做的网站wordpress首部如何添加自定义代码

毕设代做的网站,wordpress首部如何添加自定义代码,提供图片做网站的要求,本地服务器公网ip wordpress文章目录 1. constexpr 函数中使用非字面量变量、标号和 goto (P2242R3)示例代码 2. 允许 constexpr 函数中的常量表达式中使用 static 和 thread_local 变量 (P2647R1)示例代码 3. constexpr 函数的返回类型和形参类型不必为字面类型 (P2448R2)示例代码 4. 不存在满足核心常量…

文章目录

    • 1. constexpr 函数中使用非字面量变量、标号和 goto (P2242R3)
      • 示例代码
    • 2. 允许 constexpr 函数中的常量表达式中使用 static 和 thread_local 变量 (P2647R1)
      • 示例代码
    • 3. constexpr 函数的返回类型和形参类型不必为字面类型 (P2448R2)
      • 示例代码
    • 4. 不存在满足核心常量表达式要求的调用的 constexpr 函数 (P2448R2)
      • 示例代码
    • 总结表格

在 C++23 标准中, constexpr 特性迎来了一系列令人瞩目的改动,这些改动进一步提升了 C++ 的编译时计算能力和代码的灵活性。下面我们将详细介绍这些改动,并通过表格的形式进行总结。

1. constexpr 函数中使用非字面量变量、标号和 goto (P2242R3)

在 C++23 之前,constexpr 函数的使用受到较多限制,不能在其中使用非字面量变量、标号和 goto 语句。但在 C++23 中,这些限制被放宽了。这意味着在 constexpr 函数里,我们可以更自由地编写代码,利用非字面量变量进行计算,使用标号和 goto 语句实现复杂的控制流。

在过去,由于这些限制,一些看似合理的代码可能会被编译器拒绝。例如下面的代码:

template<typename T> constexpr bool f() {if (std::is_constant_evaluated()) {// ...return true;} else {T t;// ...return true;}
}
struct nonliteral { nonliteral(); };
static_assert(f<nonliteral>());

在之前的标准中,这段代码可能会因为 nonliteral 是一个非字面类型而导致编译失败,尽管导致失败的那一行代码并不在常量求值的上下文中。而在 C++23 中,这样的代码是有效的。

从编译器支持情况来看,GCC 12 和 Clang 15 开始支持这一改动。这一改动的原理是,只要这些非字面量变量、标号和 goto 语句在编译时不被求值,它们在函数中的存在就不会有问题。因为 constexpr 函数可能在编译时求值,也可能在运行时求值。如果我们想在 constexpr 函数中调用一段保证在编译时求值的代码,需要将这段代码放在 if constevalif (std::is_constant_evaluated()) 条件下的代码块中。

示例代码

#include <iostream>constexpr int func(int x) {int result = 0;if (x > 0) {result = x * 2;} else {// 使用标号和 gotolabel:result = -x;}return result;
}int main() {constexpr int value = func(5);std::cout << "Result: " << value << std::endl;return 0;
}

2. 允许 constexpr 函数中的常量表达式中使用 static 和 thread_local 变量 (P2647R1)

在 C++23 之前,constexpr 函数的常量表达式中不允许使用 staticthread_local 变量。C++23 打破了这个限制,允许在 constexpr 函数的常量表达式中使用这两种变量。这为编译时计算提供了更多的可能性,例如可以在编译时初始化一些静态变量或线程局部变量。

最初,constexpr 函数中根本不允许声明任何 static 变量。后来在 [P2242R3] 中有所放宽,规则改为控制流不能经过 static 变量的初始化。对于 static(或者更糟糕的 thread_local)变量,其初始化器可能会运行任意代码,所以之前有这样的限制是合理的。但对于 static constexpr 变量,根据定义,它必须是常量初始化的,不存在何时运行初始化的问题,它就是一个常量。

下面我们来看一个例子:

char xdigit(int n) {static constexpr char digits[] = "0123456789abcdef";return digits[n];
}

这个函数原本是完全没问题的,但当我们尝试将其扩展为在编译时也能工作时,就会遇到问题:

constexpr char xdigit(int n) {static constexpr char digits[] = "0123456789abcdef";return digits[n];
}

在之前的标准中,这段代码是格式错误的,但在 C++23 中,它是有效的。

在之前为了实现类似的功能,有几种变通方法,但都有各自的缺点。比如可以完全避开 static 变量,直接索引字面量,但这只在我们只需要使用一次时才有效:

constexpr char xdigit(int n) {return "0123456789abcdef"[n];
}

也可以将 static 变量移到非局部作用域,但我们希望将其设为局部变量是有原因的,它只与这个特定的函数相关:

static constexpr char digits[] = "0123456789abcdef";
constexpr char xdigit(int n) {return digits[n];
}

还可以将变量设为非 static,但编译器很难对其进行优化,会导致代码生成效果变差:

constexpr char xdigit(int n) {constexpr char digits[] = "0123456789abcdef";return digits[n];
}

示例代码

#include <iostream>constexpr int func() {static int counter = 0;counter++;return counter;
}int main() {constexpr int value = func();std::cout << "Counter value: " << value << std::endl;return 0;
}

3. constexpr 函数的返回类型和形参类型不必为字面类型 (P2448R2)

在 C++23 之前,constexpr 函数的返回类型和形参类型必须是字面类型。C++23 放宽了这一要求,允许 constexpr 函数的返回类型和形参类型不必为字面类型。这使得 constexpr 函数的使用更加灵活,可以处理更多类型的数据。

示例代码

#include <iostream>
#include <string>constexpr std::string func(const std::string& str) {return str + " appended";
}int main() {constexpr std::string result = func("Hello");std::cout << "Result: " << result << std::endl;return 0;
}

4. 不存在满足核心常量表达式要求的调用的 constexpr 函数 (P2448R2)

在 C++23 中,对于那些不存在满足核心常量表达式要求的调用的 constexpr 函数,也有了新的处理方式。这使得在某些情况下,即使函数的调用不满足核心常量表达式的要求,函数仍然可以作为 constexpr 函数存在。

示例代码

#include <iostream>constexpr int func(int x) {if (x > 0) {return x * 2;} else {// 这里的调用可能不满足核心常量表达式要求return -x;}
}int main() {int value = 5;// 这里的调用可能不是常量表达式int result = func(value);std::cout << "Result: " << result << std::endl;return 0;
}

总结表格

改动内容提案编号说明
constexpr 函数中使用非字面量变量、标号和 gotoP2242R3放宽了 constexpr 函数的使用限制,允许使用非字面量变量、标号和 goto 语句,只要在编译时不被求值即可,GCC 12 和 Clang 15 开始支持
允许 constexpr 函数中的常量表达式中使用 static 和 thread_local 变量P2647R1打破了 constexpr 函数常量表达式中对 staticthread_local 变量的限制,之前 static 变量相关规则在 [P2242R3] 中有所调整,现在 static constexpr 变量在 constexpr 函数中使用更合理
constexpr 函数的返回类型和形参类型不必为字面类型P2448R2使 constexpr 函数的使用更加灵活,可处理更多类型的数据
不存在满足核心常量表达式要求的调用的 constexpr 函数P2448R2对于不满足核心常量表达式要求的调用的 constexpr 函数有了新的处理方式

文章转载自:

http://jDZosuKi.ywgrr.cn
http://Bsz3DT6V.ywgrr.cn
http://pX4s56KY.ywgrr.cn
http://lAJjvTGP.ywgrr.cn
http://w2ow7J2E.ywgrr.cn
http://tL2DKumW.ywgrr.cn
http://RAeab3oc.ywgrr.cn
http://BFivyafC.ywgrr.cn
http://909mKmxz.ywgrr.cn
http://BIzhTq11.ywgrr.cn
http://mWU5zBRY.ywgrr.cn
http://sFRZL5WT.ywgrr.cn
http://gydV7olA.ywgrr.cn
http://ILaRDe5r.ywgrr.cn
http://QB2q58BE.ywgrr.cn
http://wBkRNKIB.ywgrr.cn
http://ekTclpJJ.ywgrr.cn
http://Lb419obG.ywgrr.cn
http://JQQGdX3G.ywgrr.cn
http://vHuPAPSz.ywgrr.cn
http://9Nmp54ux.ywgrr.cn
http://wGXfUIj4.ywgrr.cn
http://3C1JsYv0.ywgrr.cn
http://dD7umBu0.ywgrr.cn
http://iHoftjxX.ywgrr.cn
http://IawuLeP2.ywgrr.cn
http://7ToIFwx4.ywgrr.cn
http://CcWhrOMD.ywgrr.cn
http://nQaHsgJW.ywgrr.cn
http://lP8P5WKs.ywgrr.cn
http://www.dtcms.com/wzjs/747379.html

相关文章:

  • 网站广告的图片怎么做wordpress在线翻译
  • 网站制作公司起名建设银行衡阳市分行网站
  • 网站负责人 备案导视设计案例
  • 南京免费发布信息网站免费制作音乐的软件app
  • 汕头做网站北京双诚建设监理公司网站
  • 重庆承越网站建设地址帮别人制作wordpress赚钱吗
  • 重庆建设技术发展中心网站泉港区规划建设局网站
  • php做的网站后台wordpress editor.md
  • 网站制作 郑州做暧暧网站在线看
  • 如何做网站域名备案石家庄无极网站建设
  • 在互联网上建设网站可选择的方案有wordpress 做网课网站
  • 郑州网站制作公司名单wordpress关于
  • 网站建设的调查问卷百度网站排名提升工具
  • 洛阳做网站的公司wordpress 编辑器模板
  • 下载源码就能建网站吗本地网站源码
  • asp.net mysql 网站开发如何建立免费的网站
  • 洮南网站建设哪家专业利用模板如何制作网站
  • 求个没封的w站2022动漫设计工作室网站宣传片制作
  • 网站公司名称大全南昌大型网站建设公司
  • 广州金融网站设计wordpress 主题学习
  • 利用vs做网站网站建设课程
  • 不懂编程如何做网站网站建设的人员预期
  • 做网站 需要 域名 空间网站演示程序
  • 房子装修网站医学分类手机网站模版
  • 个性化网站模板昭通商城网站建设
  • 百度安装app下载免费湖南网站seo营销
  • 国际网站建设做网站的图片大全
  • asp 网站运行在线商城系统平台
  • 做网站注意哪些室内设计学校全国排名
  • 电子及商务网站建设报告桂林北站改造