据我所知,当一个对象传递给一个比寄存器大的函数时,最好将它作为(const)引用传递,例如:
void foo(const std::string& bar)
{
...
}
Run Code Online (Sandbox Code Playgroud)
这避免了必须执行可能昂贵的参数副本.
但是,当传递适合寄存器的类型时,将其作为(const)引用传递最多是冗余的,最坏的情况是:
void foo(const int& bar)
{
...
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,当我使用需要传递任何类型的模板化类时,我想知道如何充分利用这两个世界:
template <typename T>
class Foo
{
public:
// Good for complex types, bad for small types
void bar(const T& baz);
// Good for small types, but will needlessly copy complex types
void bar2(T baz);
};
Run Code Online (Sandbox Code Playgroud)
是否有模板决策方法允许我选择正确的类型?可以让我做的事,
void bar(const_nocopy<T>::type baz);
Run Code Online (Sandbox Code Playgroud)
根据类型选择更好的方法?
编辑:
经过大量的定时测试后,两个通话时间之间的差异是不同的,但非常小.对于我的情况,解决方案可能是一个可疑的微优化.尽管如此,TMP仍然是一项有趣的心理锻炼.
是否有任何工具可以提供程序大部分执行时间所用的直方图?
这是在visual studio 2008中使用c ++的项目.
我在visual c ++中有一个Window(win32 API)应用程序.我没有使用MFC.我必须在Windows启动时运行我的应用程序.我正在使用Windows 7和visual studio 2008.任何人都可以帮助我完成上述任务吗?提前致谢.
我已经使用VS2005和VS2008了一段时间,使用C#.没有任何额外的工具,我可以点击ctrl k + d,代码将很好地重新格式化.为什么C++不这样做?毕竟它是相同的Visual Studio.有没有办法启用它?
这个问题的第二部分是相关的,对于那些一直使用C#的resharper的人来说,是否有类似的C++工具?
我的程序(c ++):
#include <iostream>
#include <fstream>
#include <cstdlib>
using namespace std;
float x, y, z;
char d[20];
int main()
{
cin.getline >>d;
x=111;
y=222;
z=333;
ofstream meuarquivo;
meuarquivo.open (d".txt");
meuarquivo << x << "\n";
meuarquivo << y << "\n";
meuarquivo << z << "\n";
meuarquivo.close ();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我想写一些类似"ThatsMyProgram"的东西,我希望程序将此文件保存为"ThatsMyProgram.txt".我怎样才能做到这一点?
有没有办法用"双"init-expression写入循环?
vector<int> v;
//...vector filling...
for (vector<int>::iterator i = v.begin() AND vector<int>::iterator e = v.end(); i != e; ++i){ ...}
Run Code Online (Sandbox Code Playgroud) 我有以下代码:
int *pa;
int a[3] = {1, 2, 3};
Run Code Online (Sandbox Code Playgroud)
为什么pa = a没问题,但a = pa是不允许的?
c++ ×5
arrays ×1
c ×1
formatting ×1
javascript ×1
leaflet ×1
optimization ×1
pointers ×1
profiler ×1
registry ×1
templates ×1
type-traits ×1
visual-c++ ×1
winapi ×1