- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发一个用于命令行应用程序的小型库。这个库的一个特点是它的主类可以在 ostream 中生成文本,如下所示:
#include <iostream>
class MyClass {
std::string a;
std::string b;
void printToStream(std::ostream& stream = std::cout)
{
stream << "a: " << a << " | b: " << b << std::endl;
}
}
我的问题是关于使用 std::cout 作为默认参数。它的存在只是为了使库更易于使用,因为正如我之前所说,它适用于命令行应用程序,所以大多数时候所需的输出应该是标准输出,但以防用户需要不同的输出流他们可以自己提供一个。
这是我的库中唯一使用 iostream
的地方,所以我想知道这样的默认参数是否会导致任何效率损失。据我所知,iostream
是一个庞然大物,超过 25,000 行代码,如果用户提供自己的输出流,它会被免费包含在内。
此外,我知道编译器可能足够聪明,如果 cout
最终未在此处使用,则不会在最终可执行文件中包含来自 iostream
的任何内容,但我会想知道这个包含在我的库中的全部影响 - 以及是否有更好的方法将 cout 实现为默认参数,而无需用户在不需要时针对 iostream
进行构建。
最佳答案
非常简短的回答:就您的编程工作而言,可能不是您最重要的决定。
更长的答案,实际上并没有比上面告诉你更多,但如果你愿意的话,你可能仍然会觉得很有趣。
这是高度依赖于您的环境敏感程度的问题之一。如果您正在构建一个具有 256KB RAM 的系统,并且您必须将多个应用程序、一个操作系统和一个数据库引擎安装到所有这些系统中,那么显然,每千字节的应用程序空间都是宝贵的。另一方面,在我的笔记本电脑或台式机上,一方面内存的兆字节比手指多,可能根本没有什么可担心的。在具有几兆字节 RAM 的中等系统中,减少代码大小不是您的首要任务。
我使用一个头文件快速编写了两个简单的应用程序:
myclass.h:
#include <iostream>
class MyClass {
public:
std::string a;
std::string b;
void printToStream(std::ostream& stream = std::cout)
{
stream << "a: " << a << " | b: " << b << std::endl;
}
};
然后是“使用”printToStream
的一个:
使用.cpp:
#include "myclass.h"
int main()
{
MyClass m;
m.a = "Hello";
m.b = "World";
m.printToStream();
}
g++ -O1 中的大小:3502 字节,clang++ -O1:4409
还有一个不使用 printToStream
:
nouse.cpp:
#include "myclass.h"
int main()
{
MyClass m;
m.a = "Hello";
m.b = "World";
}
g++ -O1 中的大小:2349 字节,clang++ -O1 中的大小:2923
clang++ -O1 的大小差异约为 1500 字节,g++ -O1 的大小差异约为 1200 字节。总代码大小约为 2.5-4KB,因此在这个小示例中它大约占总大小的 30%。显然,这远非线性 - 一旦您使用 std::cout
,它的所有用途都有初始化。
如果我修改 myclass.h
归档到#include <string>
,并完全删除对流的引用,它进一步从 nouse.cpp
中删除了大约 300 字节的代码。生成的二进制文件。这表明仅包括 <iostream>
将向您的二进制文件添加一些代码。但是,使用 <ostream>
而不是 <iostream>
对生成的二进制文件没有影响。
我还尝试删除 std::cout
默认参数。这根本没有区别(除了代码更改以在 uses.cpp
中具有附加参数),因此大小相同。它对 nouse.cpp
也没有影响- 额外的代码仍然存在以初始化 cout
.
同样,包括<ostream>
然后包括 <iostream>
在主文件中对 uses.cpp
的大小没有影响(不使用默认参数)。
我也尝试了 -O2,它使代码大小发生变化(在 g++ 中更大,在 clang++ 中更小),但相对差异不是很大。
显然,这是针对两个最流行的开源 C++ 编译器的两个实例。其他编译器可能会给出略有不同的结果。如果它非常重要,请使用您的编译器进行测试。
g++ 版本:7.2.0 与 Ubunt 一起提供,clang++:7.0.0(使用 git 版本 clang 16003bcdb4287aab3b87300d9e95f9b49ce52c1c、llvm 45ebd75cc103838da0b3938ac5d044ec8a7ff17b 构建)
关于c++ - 包含一个大标题以将对象用作默认参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49165349/
我附上了一个我尝试使用 html/css 实现的示例(如果您看不到图像:名字和姓氏,然后第二行是职位描述)。我希望所有文本(两行)在一个 div 中强制对齐(左和右),但我不确定这是否可能。我尝试了一
我想使两个 h1 元素成为 div 上的标题/页眉。所以每个都在特定的 div 之上。 Youtube Achievements
我想让每个 EditText 对象都有自己的标题,就像 Pure Android 指南中那样 (screenshot) 这个东西有原生支持吗?我想他们也可能会使用带有部分的 ListView ,但这对
是否可以像 UITableView headerView 一样创建 UICollectionView 标题 View ?我的意思是整个集合 View 的标题 View ,而不是每个部分的重复 View
我一直在遵循有关排版的 Google 官方 Material 设计指南 (http://www.google.com/design/spec/style/typography.html),但我发现它们
我目前正在尝试找到可以帮助我从视频文件中提取元数据或信息的 python 库,例如 [ mp4, Mkv, Avi, WebM, mpg ] 格式为例。 我主要从视频文件中提取的主要数据是 [标题、描
你好, 这是我正在尝试做的: 将每个缩略图的内容(img + 标题)居中。我的 img 必须是 span3,标题必须是 span4。 这是我的问题: 我可以获取内容中心,或者标题 float 在 im
我有一个带有导航栏的应用程序,可以从一个 View Controller 导航到下一个 View Controller 。在某些模拟器和设备上导航到下一个 View Controller 时,后退按钮
我遇到了一些非常酷的 t-sql,可以从一个 t-sql 查询中的选定行生成一个逗号分隔的列值列表: SELECT @MyList = ISNULL(@MyList,'') + Title + ',
请确保将 HTML heading 标签只用于标题。不要仅仅是为了生成粗体或的文本而使用标题。 搜索引擎使用标题为您的网页的结构和内容编制索引。 因为用户可以通过标题来快速浏览您的网页,所以用标
我正在使用 wkhtmltopdf 将 html 转换为 pdf。 我想在每个页面中添加标题,但它只显示在第一页(目录)中。 我使用的命令是 "C:\Program Files\wkhtmltopdf
如何使用 ggplot2 显示观察的方向(标题)?有没有办法调整shape=17 (三角形)以便它“指向”下一次观察? 示例代码 library(ggplot2) dat % pivot_wide
我尝试在 cocoa 应用程序中显示/隐藏标题栏。我使用以下代码: if ([window styleMask]==NSResizableWindowMask) { [wind
我有这样的 HTML 标题 http://s1.postimg.org/4ebyk3qwv/image.png 当我编写这段代码时: document.getElementById("TL85_1_
我叫麦克。谢谢你的帮助。 在Wordpress中,我们已经设计了我们的网站,以便在Facebook调试器中og数据尽可能接近youtube。尽管如此,在Facebook上共享视频的方式还是不同的。尽管
从 web 应用程序的客户端,我点击了服务器端路由,它只是第三方 API 的包装器。使用分派(dispatch),我试图让服务器端请求返回 exact header 和第三方 API 对客户端 AJA
从 web 应用程序的客户端,我点击了服务器端路由,它只是第三方 API 的包装器。使用分派(dispatch),我试图让服务器端请求返回 exact header 和第三方 API 对客户端 AJA
我是 SAPUI5 的新手,在导航、侧边栏和标题方面遇到一些问题。我想开发一个带有标题和侧边栏的应用程序。我为此使用“ToolPage”。每个页面都包含工具页,如下所示:
我最近在为客户做的项目中被介绍给Go。他们已经建立了代码库,需要进行一些更改。 我注意到所有的方法,结构等等都有一些奇怪的类似于标题的注释,如下所示: // SomeType ... type Som
我创建了一个采用整个屏幕布局的标题布局(xml 文件)... 我还创建了一个 listView 并将此 header_layout 添加到 listView 中: LayoutInflater inf
我是一名优秀的程序员,十分优秀!