- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在阅读 Inside The C++ Object Model 并发现对内联函数扩展感到困惑。
In general, each local variable within the inline function must be introduced into the enclosing block of the call as a uniquely named variable. If the inline function is expanded multiple times within one expression, each expansion is likely to require its own set of the local variables. If the inline function is expanded multiple times in discrete statements, however, a single set of the local variables can probably be reused across the multiple expansions.
在这里,在离散语句中多次展开内联函数是什么意思,这怎么可能发生?任何人都可以提出一个具体的例子来应用它吗?
最佳答案
我在处理术语离散语句时遇到了一些麻烦(特别是因为它已被多次强调)。我试图找到类似明确定义(通过谷歌)的东西,但我找不到。因此,我决定按字面意思将其解读为一个陈述(在分离的意义上,离散)。
表示函数 inline
只是向编译器提示程序员希望将函数体直接插入每个“调用点”(而不是简单地调用函数)。实际上,编译器决定函数是否真的内联。 (它甚至可能在一个调用点内联,但在另一点变成函数调用。)如果使用宏而不是内联函数,则内联要求将被授予(因为宏扩展实际上就是文本替换) .当然,宏有很多内联函数没有的限制。其中之一是内联函数可能具有局部变量。
我做了一个合成的例子。它不是“准备生产”的代码,但希望有助于说明主题:
#include <iostream>
using namespace std;
inline int absValue(int a)
{
int mB = -a;
return a < 0 ? mB : a;
}
int main()
{
int value;
// use input to prevent compile-time computation
cout << "input: " << flush;
cin >> value;
// multiple usages of absValue()
cout << "value: " << value << endl
<< "absValue(value): "
<< absValue(value)
<< endl
<< "absValue(-value): "
<< absValue(-value)
<< endl;
// done
return 0;
}
第二个输出语句多次调用函数 absValue()
,调用应该被内联。我想象它是这样的:
// multiple usages of absValue()
cout << "value: " << value << endl
<< "absValue(value): "
<< {
int mB = -(value);
return (value) < 0 ? mB : (value);
}
<< endl
<< "absValue(-value): "
<< {
int mB = -(-value);
return (-value) < 0 ? mB : (-value);
}
<< endl;
此语句中出现了两次 mB
。一方面,这是两个独立的局部变量。另一方面,它们可能在连续使用时共享堆栈上的相同存储空间。 (如果编译器优化引入某种代码重新排序,导致 absValue()
的第一次和第二次扩展交错,它们可能不会共享相同的存储。)
整个解释是理论上的。实际上,编译器希望将 mB
放入寄存器,甚至优化大部分代码。
我稍微摆弄了一下 godbolt进一步说明。最后,我必须承认它基本上证明了我上面的最后一段。
关于c++ - 为什么在 "discrete statements"中多次扩展的内联函数中的局部变量可以有一组变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45666879/
我有一个 Python 编码任务似乎是装箱问题或背包问题的某种变体,我不完全确定。我有一个似乎可行的选项,但我不认为它本身是正确的解决方案,因为可能存在可能失败的边缘情况。 (我不是 CS 或数学专业
预处理的作用主要在于将难以表达的string或者数组转换成模型容易训练的向量表示,其中转化过程大多是形成一张查询表用来查询。 常见的预处理方式包括: class Discreti
关闭。这个问题需要更多focused .它目前不接受答案。 想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post . 6年前关闭。 Improve this questi
我正在寻找一种使用离散和快速方法计算导数的方法。由于现在我不知道我拥有的方程类型,我正在寻找类似于我们可以为积分找到的离散方法,例如欧拉方法。 最佳答案 我认为您正在寻找以点计算的导数。 如果是这种情
Discrete mathematics (also finite mathematics)涉及逻辑、集合论、信息论、偏序集、证明、关系和许多其他主题等主题。 对于数学的其他分支,有支持编程的工具。统
我报名了一个我不应该参加的类(class)。所以现在我有点搞砸了,因为我不明白我的教授解释一阶逻辑时使用的任何符号。我需要一些关于如何重新学习所有这些东西的书籍建议。例如:我对“量词”是什么感到困惑(
我实现了一种称为离散余弦变换的图像/视频变换技术。该技术用于 MPEG 视频编码。我的算法基于以下 URL 中提出的想法: http://vsr.informatik.tu-chemnitz.de/~
我有以下数据: benchmark mispredpenal IPC pred ammp 1 1.0589 2lev ammp
我正在阅读 Inside The C++ Object Model 并发现对内联函数扩展感到困惑。 In general, each local variable within the inline
我正在制作类似于 Polyworld 的东西,这意味着我将模拟小爬行者在其中跑来跑去、进食和进化的虚拟世界。我正在用 Node.js 做,我计划使用物理和神经网络,但我不确定更新世界的最佳方式是什么,
我正在尝试使用 ggplot2 构建一个自定义 stat 函数,其中我想访问一个离散变量来计算每组的统计数据。但是,ggplot 层的默认行为是自动将隐式组分配给任何离散变量(主要是)。这意味着我的数
我似乎无法得到我的 ggparcoord使用离散比例绘制颜色。当我这样做时: ggparcoord(data = iris, columns = 1:4, groupColumn = "Species
假设我有两个浮点数,x和 y ,它们的值非常接近。 计算机上可以表示离散数量的浮点数,因此我们可以按升序枚举它们:f_1, f_2, f_3, ... .我想找到x的距离和 y在这个列表中(即它们是
我用 ggplot2 制作了一个散点图,并将一个二进制变量映射到点大小。结果令人满意,但我收到警告“不建议使用离散变量的大小”。 我知道使用大小来映射具有多个级别的非有序分类变量可能不如使用点形状或不
我正在尝试为离散结果(每个值使用单一颜色)制作热图,以便: df<-data.frame(x=rep(LETTERS[1:10], each=10), y=rep(1:1
我正在使用 ggmap 处理马达加斯加 map myMap <- get_map(location=k, source="stamen", maptype="toner", crop=FALSE,
我有下表,但经过多次尝试无法绘制数据,以便 x 轴刻度线与 year 对齐。 .我找到了箱线图的解决方案,但不是 geom_line() 我怎样才能制作一年的离散标签? 以下解决方案不起作用 g +
我想将离散(标识符)变量转换为一系列逻辑列,以便我可以将该变量用作逻辑回归函数(和其他函数)中的特征,而我无法混合连续值和离散值。 我在数据框中有一个因子列,我想将该列转换为逻辑值的列矩阵(1..“级
我已经阅读了许多关于什么可能导致“离散值提供给连续尺度”错误的 SO 答案,但我仍然无法解决以下问题。就我而言,错误是由使用 annotate() 引起的。 .如果去掉+ annotate(...)一
我有一个名为“merged”的数据集,其中包含 3 个数字列“pauseMedian”和“numTotalPauses”和“diff”。我还有一个 splineHull 数据集,其中还包含数字列“pa
我是一名优秀的程序员,十分优秀!