当口头谈论方法时,我永远不确定是否使用单词参数或参数或其他东西.无论哪种方式,其他人都知道我的意思,但是什么是正确的,这些条款的历史是什么?
我是一名C#程序员,但我也想知道人们是否使用不同语言的不同术语.
根据记录,我是自学成才,没有计算机科学的背景.(请不要告诉我阅读Code Complete,因为我问这个是为了其他没有史蒂夫麦康奈尔精彩书籍的人的利益.)
普遍的共识似乎是在团队环境中交替使用这些术语是可以的.除非您定义精确的术语; 那么你也可以使用" 形式参数/参数"和" 实际参数/参数"来消除歧义.
我有一些pre-C++ 11代码,其中我使用const引用传递大量参数,如vector'很多.一个例子如下:
int hd(const vector<int>& a) {
return a[0];
}
Run Code Online (Sandbox Code Playgroud)
我听说使用新的C++ 11功能,您可以vector按如下方式传递by值而不会出现性能命中.
int hd(vector<int> a) {
return a[0];
}
Run Code Online (Sandbox Code Playgroud)
例如,这个答案说
C++ 11的移动语义使得即使对于复杂对象,传递和返回值也更具吸引力.
上述两个选项在性能方面是否相同?
如果是这样,何时比选项2更好地使用const参考?(也就是为什么我们仍然需要在C++ 11中使用const引用).
我问的一个原因是const引用使模板参数的推导变得复杂,并且如果它与const引用性能相同,则仅使用pass-by-value会容易得多.
可能重复:
如何将对象传递给C++中的函数?
在我的游戏中,我过度使用了数学向量和运算符重载.
class Vector
{
float x, y;
};
Run Code Online (Sandbox Code Playgroud)
这基本上都是关于我的Vector类(排除的方法).
我不是C++的专家,我已经看过并阅读过传递为const并通过引用传递.
那么,下面的代码示例中的性能差异在哪里?
Float RandomCalculation( Vector a, Vector b )
{
return a.x * b.x / b.x - a.x * RANDOM_CONSTANT;
}
// versus..
Float RandomCalculation( Vector& a, Vector& b )
{
return a.x * b.x / b.x - a.x * RANDOM_CONSTANT;
}
// versus..
Float RandomCalculation( const Vector& a, const Vector& b )
{
return a.x * b.x / b.x - a.x * RANDOM_CONSTANT;
}
Run Code Online (Sandbox Code Playgroud)
每个选项对编译器的优化过程有什么好处?
我何时何地都要特别小心?
在编写一个带有传递给它的args的C++函数时,如果可以保证不改变对象,则应始终使用const,如果指针不会被更改,则应始终使用const指针.
这种做法何时建议?
你什么时候使用const引用,比仅通过指针传递它有什么好处?
那么void MyObject::Somefunc(const std::string& mystring) 如果一个字符串实际上已经是一个不可变对象,那么拥有一个const字符串会有什么意义呢?