相关疑难解决方法(0)

何时应该在字符数组上使用std :: string?

当我设计类接口时,我坐在那里思考是否应该使用const char*const std::string&经常使用它,当它归结为它时,我常常觉得一只手中有6只,另一只手拿着半打.

采用以下两个函数原型:

void foo(const char* str);
void foo(std::string str);
Run Code Online (Sandbox Code Playgroud)

如果foo函数是存储字符串,我会说第二个是更好的选择,因为能够传递字符串并尽可能利用移动语义.但是,如果foo只需要读取字符串,const char*解决方案会更好吗?

从性能角度来看,std::string不需要创建临时的.但是,使用已经存在的字符串作为参数调用该函数看起来很突出:foo(mystr.c_str()).更糟糕的是,如果需要在未来的某个时刻对阵列进行更高级的操作,或者如果应该存储副本,则接口必须进行更改.

所以我的问题是:

是否有明确的定义,无论是个人的还是其他的,约定何时std::string或是const char*更好的选择?此外,在开始一个新项目时,最好是与使用保持一致,还是只考虑最适合当前代码块的哪一个?

c++ string character-arrays

33
推荐指数
3
解决办法
3411
查看次数

通过值与引用或指针传递的性能成本?

让我们考虑一个对象foo(可能是一个int,一个double,一个习惯struct,一个class,等等).我的理解是,通过foo引用函数(或只是传递指针foo)来传递更高的性能,因为我们避免制作本地副本(如果foo很大则可能很昂贵).

但是,从这里的答案来看,似乎64位系统上的指针实际上可以预期大小为8字节,无论指向什么.在我的系统上,a float是4个字节.这是否意味着如果foo是类型float,那么仅通过值传递而不是给它指向它是更有效的foo(假设没有其他约束可以使得使用一个比函数内的另一个更有效)?

c++ pointers pass-by-reference pass-by-value pass-by-pointer

26
推荐指数
4
解决办法
2万
查看次数

通过引用传递比通过值更昂贵

是否存在传递引用比C++中的传值更昂贵的情况?如果是这样,那会是什么情况?

c++ pass-by-reference pass-by-value

9
推荐指数
3
解决办法
3724
查看次数

当您不修改变量时,通过引用传递的角色是什么?

这些引用(&)只是一个保存内存或习语的问题,还是有理由为什么这些语句在复制时使用引用会完成同样的事情.

template <class T>
bool testGreater (const T& one, const T& two);
Run Code Online (Sandbox Code Playgroud)

或者像这样的对象声明:

Cars BMW (const Engine&); //where engine is a class
Run Code Online (Sandbox Code Playgroud)

当您不需要修改传递的项目时,通过引用传递的功能是什么?

c++ memory const reference

4
推荐指数
1
解决办法
141
查看次数

传递const引用:性能提升?

这之间是否有任何有价值的性能差异:

int myFunction(const int &a) { return 2 + a; }
Run Code Online (Sandbox Code Playgroud)

还有这个:

int myFunction(int a) { return 2 + a; }
Run Code Online (Sandbox Code Playgroud)

据我所知,第二种方法将变量的副本作为参数传递给新寄存器,这在asm代码中需要更多的指令.在这种情况下,这个函数被称为千次,性能至关重要,传递const引用而不是变量更好吗?

c++ performance const reference function

0
推荐指数
1
解决办法
881
查看次数