C++ 我应该更改函数参数的值吗?
我知道这在C中是允许的,但我习惯于不更新通过value传递的变量的值 在我的“编码风格”中,通过值传递的参数不会更改。 我的意思是我更喜欢这个:C++ 我应该更改函数参数的值吗?,c++,c,function,parameters,C++,C,Function,Parameters,我知道这在C中是允许的,但我习惯于不更新通过value传递的变量的值 在我的“编码风格”中,通过值传递的参数不会更改。 我的意思是我更喜欢这个: void func(int var) { int locVar = var; if(something) { locVar = locVar/2; } // [some stuff using locVar] } 在这方面: void func(int var) { if(somet
void func(int var)
{
int locVar = var;
if(something)
{
locVar = locVar/2;
}
// [some stuff using locVar]
}
在这方面:
void func(int var)
{
if(something)
{
var = var/2;
}
// [some stuff using var]
}
我假设如果启用寄存器优化,编译器将不会生成不同的程序集,但是,是否有充分的理由选择这两个代码段中的一个?通常,引入的变量越多,代码的可读性越差,代码越复杂 有时甚至很难为一个实体创造两个语义相同的名称 例如,一个函数列表可以占用多个屏幕。在这种情况下,如果遇到类似
locVar
的名称,则需要向后滚动函数列表以确定该名称的含义
此外,一个函数可以有多个参数。是否要为每个参数引入新别名
对于代码的读者来说,不清楚您是否仅仅为了支持您的编码风格而引入了新的局部变量。例如,他们可能认为您更改了函数,忘记删除不再需要的变量。:)
例如,考虑一个递归函数,它计算一个数字的位数之和
unsigned int sum( unsigned int x )
{
const unsigned int Base = 10;
unsigned int digit = x % Base;
return digit + ( ( x /= Base ) == 0 ? 0 : sum( x ) );
^^^^^^^^^^^^^
}
或者可以这样写
unsigned int sum( unsigned int x )
{
const unsigned int Base = 10;
return x % Base + ( x / Base == 0 ? 0 : sum( x / Base ) );
}
在此函数中引入新局部变量作为x
别名的目的是什么
unsigned int sum( unsigned int x )
{
const unsigned int Base = 10;
unsigned int y = x;
unsigned int digit = y % Base;
return digit + ( ( y /= Base ) == 0 ? 0 : sum( y ) );
}
对于我来说,没有中间变量y
的第一个函数实现更清晰。当使用相同的变量x
时,函数的递归性质更为明显
如果要指出函数中的参数未更改,可以使用具有限定符const的参数声明或定义函数
比如说
unsigned int sum( const unsigned int x )
{
const unsigned int Base = 10;
return x % Base + ( x / Base == 0 ? 0 : sum( x / Base ) );
}
< C++函数调用>看起来像
#include <iostream>
constexpr unsigned int sum( const unsigned int x )
{
const unsigned int Base = 10;
return x % Base + ( x / Base == 0 ? 0 : sum( x / Base ) );
}
int main()
{
std::cout << sum( 123456789 ) << std::endl;
int a[sum( 123456789 )];
std::cout << sizeof( a ) << std::endl;
}
一般来说,引入的变量越多,代码的可读性就越差,也越复杂 有时甚至很难为一个实体创造两个语义相同的名称 例如,一个函数列表可以占用多个屏幕。在这种情况下,如果遇到类似
locVar
的名称,则需要向后滚动函数列表以确定该名称的含义
此外,一个函数可以有多个参数。是否要为每个参数引入新别名
对于代码的读者来说,不清楚您是否仅仅为了支持您的编码风格而引入了新的局部变量。例如,他们可能认为您更改了函数,忘记删除不再需要的变量。:)
例如,考虑一个递归函数,它计算一个数字的位数之和
unsigned int sum( unsigned int x )
{
const unsigned int Base = 10;
unsigned int digit = x % Base;
return digit + ( ( x /= Base ) == 0 ? 0 : sum( x ) );
^^^^^^^^^^^^^
}
或者可以这样写
unsigned int sum( unsigned int x )
{
const unsigned int Base = 10;
return x % Base + ( x / Base == 0 ? 0 : sum( x / Base ) );
}
在此函数中引入新局部变量作为x
别名的目的是什么
unsigned int sum( unsigned int x )
{
const unsigned int Base = 10;
unsigned int y = x;
unsigned int digit = y % Base;
return digit + ( ( y /= Base ) == 0 ? 0 : sum( y ) );
}
对于我来说,没有中间变量y
的第一个函数实现更清晰。当使用相同的变量x
时,函数的递归性质更为明显
如果要指出函数中的参数未更改,可以使用具有限定符const的参数声明或定义函数
比如说
unsigned int sum( const unsigned int x )
{
const unsigned int Base = 10;
return x % Base + ( x / Base == 0 ? 0 : sum( x / Base ) );
}
< C++函数调用>看起来像
#include <iostream>
constexpr unsigned int sum( const unsigned int x )
{
const unsigned int Base = 10;
return x % Base + ( x / Base == 0 ? 0 : sum( x / Base ) );
}
int main()
{
std::cout << sum( 123456789 ) << std::endl;
int a[sum( 123456789 )];
std::cout << sizeof( a ) << std::endl;
}
没有
- 从计算机的角度来看——没有区别。优化将完成这项工作
- 从个人角度来看,这是一个品味问题
- 从元视图-不要设置陷阱
- 从计算机的角度来看——没有区别。优化将完成这项工作
- 从个人角度来看,这是一个品味问题
- 从元视图-不要设置陷阱
int locVar=var代码>是需要理解和维护的更多代码和更多变量。通常这是没有帮助的
3) 这两个代码段都生成有效代码。所以这也是一个风格问题。如果您的编码小组对此有编码指南,那么最好遵循该指南,而不是因为琐碎的原因而有所不同
选择一个优于另一个的原因:是。强有力的理由:一般情况下没有。当对哪种方式有疑问时