我目前正在研究如何编写高效的C++代码,在函数调用方面,我想到了一个问题.比较这个伪代码功能:
not-void function-name () {
do-something
return value;
}
int main () {
...
arg = function-name();
...
}
Run Code Online (Sandbox Code Playgroud)
使用其他相同的伪代码功能:
void function-name (not-void& arg) {
do-something
arg = value;
}
int main () {
...
function-name(arg);
...
}
Run Code Online (Sandbox Code Playgroud)
哪个版本更有效,以及在什么方面(时间,内存等)?如果它取决于,那么第一个什么时候会更有效率,什么时候第二个会更高效?
编辑:对于上下文,此问题仅限于与硬件平台无关的差异,并且大多数情况下也是软件.是否有任何与机器无关的性能差异?
编辑:我不知道这是一个重复.另一个问题是将参考传递(上游代码)与传递值(下图)进行比较:
not-void function-name (not-void arg)
Run Code Online (Sandbox Code Playgroud)
这跟我的问题不一样.我的重点不在于将参数传递给函数的更好方法.我关注的是这是更好的方式来传递出一个结果来自外部范围的变量.
在有效的C++(第3版),第2项(身高const,enum和inline对#define),为类特定常量代码段读:
class GamePlayer {
private:
static const int NumTurns = 5; // constant declaration
int scores[NumTurns]; // use of constant
...
};
Run Code Online (Sandbox Code Playgroud)
然后,本书(用我自己的话说)static const int NumTurns = 5;不是一个定义,这通常是C++对类成员所要求的,除非它是一个从不使用地址的静态整数常量.如果上面的常量不是真的,或者编译器因任何原因坚持定义,那么定义应该在实现文件中提供如下:
const int GamePlayer::NumTurns; // definition of NumTurns; see
// below for why no value is given
Run Code Online (Sandbox Code Playgroud)
根据这本书(也用我自己的话说),定义中没有给出任何价值,因为它已在声明中给出.
这让我认为我已经知道的声明和定义的定义令人困惑(我在问这个问题之前在Google上仔细检查过):
static const int NumTurns = 5不是定义?是NumTurns不是初始化为5这里的值,是不是当声明和定义一起出现时,它被称为初始化?static积分常数不需要定义?有可能我现在只是在这里混淆自己,所以有人可以从头开始重新教育我:为什么这两行代码声明和定义而不是另一行,那里有任何初始化实例吗?初始化也是定义吗?
信用:代码片段直接从本书中引用.
编辑:附加参考定义和声明之间的区别是什么? …
我目前正在将旧的HTML表单转换为不使用表格.标签需要固定的宽度,我已经使用本网站的答案实现了这一点.目前的代码如下:
HTML
<div id="form">
<label for="field1">Name </label>
<input type="text" id="field1" value="default name" />
</div>
Run Code Online (Sandbox Code Playgroud)
CSS
label {
float: left;
width: 50px;
white-space: nowrap;
}
input {
display: block;
overflow: hidden;
width: *;
}
#field1 {
width: 150px;
}
Run Code Online (Sandbox Code Playgroud)
目前,标签在顶部垂直对齐.如何将标签和字段垂直对齐到中心?
编辑:我得到了很多答案,基本上通过指定的像素数将标签填充到正确的位置.我不想这样做,因为它基本上是硬编码而不是真正的垂直对齐到中间.
根据我在这里收到的一些建议,我已经清理了一些代码.请参阅以上编辑的代码.
我试过vertical-align: middle;在label,但它不工作.请注意,用户的平台将是IE.
大量编辑此问题以使其更容易理解.
鉴于任意尺寸的环境和任意数量障碍物的任意定位,我有一个探测环境的探测器,视野范围有限(障碍物不会阻挡视线).它可以在NSEW的四个主要方向上移动,一次一个单元格,并且图形未加权(每个步骤的成本为1).下面链接的是一张地图,代表了代理商(黄人)当前对规划时的环境信念.当代理正在计划时,时间不会通过模拟.
http://imagizer.imageshack.us/a/img913/9274/qRsazT.jpg
考虑到允许重新访问单元格,我可以使用哪种探索算法来最大化效用的成本效益?每个单元格都包含实用值.理想情况下,我会寻求最大化SEEN(未访问)所有单元的效用之和除以路径长度,尽管如果对于任何合适的算法来说太复杂,那么看到的单元数就足够了.存在最大路径长度,但通常为数百或更高.(我的代理上使用的实际测试环境至少要大4倍,尽管理论上可以设置的维度没有上限,因此最大路径长度会相应增加)
我认为BFS和DFS是难以处理的,A*由于缺乏合适的启发式而不是最优的,而Dijkstra不适合生成单一的完整路径.有没有你能想到的算法?另外,我需要有关循环检测的帮助,因为我之前从未这样做,因为允许重新访问是我的第一次.
我考虑过的一种方法是将映射缩减为生成树,除了不将其定义为连接所有单元的树,而是将其定义为可以查看所有单元的树.我的方法将产生以下结果:
http://imagizer.imageshack.us/a/img910/3050/HGu40d.jpg
在结果树中,代理可以从节点到达交叉点处0-1转的任何相邻节点.就我现在的想法而言.使用这棵树生成的解决方案可能不是最优的,但它至少应该接近最优,而算法处理的单元更少,所以如果这会使算法更容易处理,那么我想这是可以接受的交易.我仍然在考虑如何为此生成一条路径.
我对引用的理解是,它们是现有变量的别名-它们不能为null。它们在修改原始输入时对于函数调用很有用,因为引用被认为比指针安全。
除上述内容外,在引用是强制性的情况下,是否还有其他原因/用例来使用引用,而不是引用所指向的现有变量?
编辑:请注意,我说除了上述内容。意思是我想知道其他什么时候引用在调用函数之外有用(什么时候不需要)(我已经知道了)。我还特别想知道什么时候引用比原始变量更受青睐,而不是指针(我已经从另一个问题中学到了“在可能的情况下使用引用,在必须时使用指针”在两者之间进行选择时)。
本质上与此问题相同,但对于C++.
最简单的方法是:
if (condition) {
a = f(x);
} else {
b = f(x);
}
Run Code Online (Sandbox Code Playgroud)
虽然这满足了我的需求,但我一直不得不重复键入f(x)两次,更不用说在只有一行执行时将代码扩展到这么多行.如果我有更多的目标变量可供选择怎么办?
switch(condition variable) {
case 1:
var1 = f(x);
break;
case 2:
var2 = f(x);
break;
...
case y:
vary = f(x);
break;
}
Run Code Online (Sandbox Code Playgroud)
这看起来非常不优雅.
C++中有什么东西可以让我做以下几点吗?
do-something-that-returns-a-lvalue = f(x);
Run Code Online (Sandbox Code Playgroud)
请原谅我,如果它不被称为左值,我仍然是相对较新的C++.但是你们知道我的意思 - 为其分配值的目标变量.
我知道更有效的C++是有效C++的扩展,而有效的现代C++则专注于C++ 11和14.作为语言的新手并且刚开始使用这些书籍,我应该在前两个之后阅读Effective Modern吗?此外,有效STL适合哪里?
阅读上述书籍的首选顺序是什么,因为每本书都是基于先前书籍的内容?(假设里面的一切对我来说都是新的?)
另外,Effective Modern C++是否被认为是Effective C++的非官方下一版?
参考CSS并排div的自动相等宽度,我正在寻求解决同样的问题,只是我正在使用flexbox并且不希望对我正在显示的内容使用表格样式。
https://jsfiddle.net/rdh61g7c/
#outer {
width: 1024px;
height: 768px;
display: flex;
justify-content: center;
align-items: center;
}Run Code Online (Sandbox Code Playgroud)
<div id="outer">
<div class="inner">Inner HTML content has larger natural width</div>
<div class="inner">Inner HTML content has smaller natural width</div>
</div>Run Code Online (Sandbox Code Playgroud)
因此,两列的宽度将随着其内容而拉伸,但左列将具有更大的宽度。为了保持两列关于中心对称,我需要将当前宽度比左列短的右列增加到等于左列。我如何在 Flexbox 布局中做到这一点?
编辑:我看到很多答案基本上都为两个容器分配了固定宽度(~50%)。那不是我要找的。左边的容器可以自由拉伸到内容需要的任何宽度,但有最大值,并且不应该被触及。右侧容器需要扩大其宽度以匹配左侧容器。
这可以在不借助 JavaScript 的情况下完成吗?
我对Python模块的用例不是很熟悉__future__,只是我在一些在线文章的演示代码中看到过它。读完之后,我想这与面向未来的现有代码有关?我承认我并不完全理解我正在读的内容。根据官方文档,其功能为:
\n\n\n
\n- 为了避免混淆分析导入语句并期望找到它们\xe2\x80\x99正在导入的模块的现有工具。
\n- 为了确保 future 语句在 2.1 之前的版本下运行至少会产生运行时异常(future的导入将会失败,因为在 2.1 之前没有该名称的模块)。
\n- 记录何时引入不兼容的更改,以及何时将这些更改强制为 \xe2\x80\x94 或 \xe2\x80\x94。这是一种可执行文档的形式,可以通过导入future并检查其内容以编程方式进行检查。
\n
第1点是什么意思?是不是说如果解释器读取导入语句,但没有找到它正在导入的模块,那么拥有import __future__将阻止它抛出错误?
随着 Python 2.7 于 2020 年 1 月 1 日正式终止,如果我无意在我的 Python 3 代码中支持 Python 2 环境,那么我认为第 2 点与我无关。
\n我猜第 3 点是为了……调试?这就是它想表达的吗?
\n我注意到到目前为止我读过的所有文章都至少是五年前的。所有示例都重点关注处理 Python 2 向后兼容性的 Python 3 代码,特别print是//. 但正如我所说,我无意支持 Python 2。
Python 中 __future__ 的用途是什么,如何/何时使用它,以及它是如何工作的
\nimport __future那么,如果不打算向后兼容 Python 2,我什么时候需要在 …
这是我的前端 React 代码:
import * as React from 'react';
import { useEffect, useState } from 'react';
import http from './http-common'; // axios
type Photo = {
filename: string,
caption: string,
tags: string[].
};
const BrowserArticle = ({ filename, caption, tags }: Photo) => {
const [photoFile, setFile] = useState<string>('');
useEffect(() => {
http.get(`/api/getImg/${filename}`)
.then((response) => {
console.log(typeof response.data); // console output is 'string'
console.log(response); // see screenshot below
setFile(data);
});
}, []);
return (
<div>
<img src={photoFile} alt={filename} />
<div>{caption}</div> …Run Code Online (Sandbox Code Playgroud) c++ ×5
css ×2
html ×2
agent ×1
algorithm ×1
fastapi ×1
flexbox ×1
function ×1
javascript ×1
jsx ×1
performance ×1
python ×1
python-3.x ×1
reactjs ×1
reference ×1
return-value ×1
search ×1
typescript ×1