Sma*_*acL 23 c++ refactoring this
我正在处理一个大型代码库,它始终使用以下构造
class MyClass
{
public:
void f(int x);
private:
int x;
};
void MyClass::f(int x)
{
'
'
this->x = x;
'
'
}
Run Code Online (Sandbox Code Playgroud)
就个人而言,我总是使用,因此更喜欢这种形式
class MyClass
{
public:
void f(int x);
private:
int _x;
};
void MyClass::f(int x)
{
'
'
_x = x;
'
'
}
Run Code Online (Sandbox Code Playgroud)
我更喜欢后者的原因是它更简洁(更少的代码=更少的潜在错误),并且我不喜欢在范围内同时拥有多个同名的变量,我可以避免它.也就是说,我现在越来越多地看到以前的用法.我不知道第二种方法有什么好处吗?(例如,对编译时的影响,使用模板化代码等等)两种方法的优点是否足够重要,另一方面是否重构?我要问的原因是,虽然我不喜欢代码中存在的第二种方法,但是引入更多错误的工作量和相关风险并不值得重构.
blt*_*txd 27
你的版本有点清洁,但是当你在它的时候,我会:
通过使用显式this->(使用g ++ 3.4.3测试)修复的名称解析的一个小例子:
#include <iostream>
#include <ostream>
class A
{
public:
int g_;
A() : g_(1) {}
const char* f() { return __FUNCTION__; }
};
const char* f() { return __FUNCTION__; }
int g_ = -1;
template < typename Base >
struct Derived : public Base
{
void print_conflicts()
{
std::cout << f() << std::endl; // Calls ::f()
std::cout << this->f() << std::endl; // Calls A::f()
std::cout << g_ << std::endl; // Prints global g_
std::cout << this->g_ << std::endl; // Prints A::g_
}
};
int main(int argc, char* argv[])
{
Derived< A >().print_conflicts();
return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)
Microsoft C# 编码标准鼓励使用“this”。它提供了良好的代码清晰度,并且旨在成为成员变量中使用 m_ 或 _ 或任何其他内容的标准。
老实说,无论如何,我真的不喜欢名称中的下划线,我曾经在所有成员前面加上一个“m”前缀。
归档时间: |
|
查看次数: |
11721 次 |
最近记录: |