1

我有一个类,它有一个构造函数,它接受一个const char*. 这是:

c::c(const char* str) {
    a = 32;
    f = 0;
    data = new char[strlen(str)];
    memcpy(data, str, strlen(str));
}

以及一个采用其中之一的函数:

int foo(c& cinst);

你可以通过传递一个 a 的实例来调用这个函数c

c cinst("asdf");
foo(cinst);

或者,因为我们有明确的初始化,你可以这样做:

foo("asdf");

这将c通过传递构造函数“asdf”来生成 a,然后将生成的对象传递给foo.

但是,这似乎比仅重载foo获取const char*. 是否值得为速度超载,或者性能影响如此之小以至于超载浪费空间?我试图让我的程序尽可能快,所以速度是一个重要因素,大小也是一个重要因素,但不是那么多。

4

4 回答 4

1

foo用它做什么const char*?如果它只是让它成为自己的c对象,那么没有意义。

如果它要char*直接使用(并且现有的foo只是从对象中拉出char*c,那么最好写一个重载。

于 2010-08-24T16:54:07.837 回答
0

它不会花费零时间,因此这是您必须采取的权衡之一,速度与 api 清晰度。当然,这取决于您在使用 const char* 的函数中所做的事情,您是否在构造 ac 对象?在这种情况下,只需提供具有 c 类接口的功能。

于 2010-08-24T16:56:56.243 回答
0

这类问题最好用探查器来回答。查看它的汇编代码也可能提供线索。

于 2010-08-24T17:06:20.977 回答
0

这是情景。这实际上取决于在给定情况下构造函数内部实际发生了多少,以及代码实际执行了多少次。

在您给出的示例中,这些是该构造函数中非常微不足道的操作。在任何合理的现代处理器上,这些操作都将非常非常快。因此,除非该代码每秒执行大量或更多次,否则我什至不会担心。(当然,“巨大”的值取决于您希望在哪种机器上运行它。对于这个构造函数,在典型的桌面处理器上,我什至不会开始担心,直到它达到至少每秒数十万次。)

如果这个构造代码确实运行了很多次,那么你仍然应该对其进行分析,并确定它与程序中发生的其他所有事情相比是否具有明显的影响。优化是一件棘手的事情。有时,您的直觉认为效率低下实际上对最终结果几乎没有影响。测量总是用来确定你应该把时间花在哪里来最有效地让你的程序运行得更快。

于 2010-08-24T17:10:37.957 回答