Noa*_*rth 14 c++ variables naming naming-conventions
我正在使用下划线命名样式(与camel case相反)编写C++,这也是STL和boost使用的.但是,由于类型和变量/函数都被命名为全小写,因此如下的成员变量声明将导致编译器错误(或至少是麻烦):
position position;
Run Code Online (Sandbox Code Playgroud)
名为position的成员变量,其类型为position.我不知道如何命名它:它通常是一个位置,但它也是对象的位置.在驼峰的情况下,这对编译器来说没问题:
Position position;
Run Code Online (Sandbox Code Playgroud)
但在C++中它会导致问题.我不想切换到驼峰的情况下,使用匈牙利表示法或添加一个尾随下划线因此,所以我想知道:将类似的成员命名为一个好的做法是不是很好?
在C中,为此使用神秘的单字母变量是很常见的:
int i;
Run Code Online (Sandbox Code Playgroud)
但我发现有点,嗯,神秘:
position p;
Run Code Online (Sandbox Code Playgroud)
我可以用来避免这种变量命名的经验法则吗?
如果您需要处理以下内容,我的代码中会有更多示例:
mouse_over(entity entity) // Returns true if the mouse is over the entity
manager &manager; // A reference to the framework's manager
audio audio; // The audio subsystem
Run Code Online (Sandbox Code Playgroud)
编辑:
我很想知道Bjarne Stroustrup本人在这个问题上是否有话要说.显然,他没有,但他提出了可以解决我的编译器问题的编码约定:
例如,大写非标准库用户定义类型并使用小写字母启动非类型
这与STL和提升是一致的,所以我可能会使用它.但是,大多数人都同意,无论是否编译,都应避免使用此命名.Stroustrup也是如此:
选择仅以大小写不同的名称是不明智的.
Ben*_*igt 10
本地意义很少是该类型的唯一全局描述:
cartesian_point_2d position; // rectangular, not polar coordinates
mouse_over(ui_entity entity); // not a business layer entity
xyz_manager& manager; // what's a manager without something to manage?
audio_system audio;
Run Code Online (Sandbox Code Playgroud)
赋予变量与其类型相同的名称几乎总是一个坏主意,因为它很难分辨哪些代码引用了类型以及哪些代码引用了变量.例如,请考虑以下类:
struct position
{
void operator()() { }
};
// later on, somewhere:
position position;
Run Code Online (Sandbox Code Playgroud)
现在,如果我们看到一行代码使用:
position()
Run Code Online (Sandbox Code Playgroud)
我们不能轻易判断是构造position
对象还是调用position::operator()()
.我们必须返回并查看是否存在position
当前在范围内命名的对象.
命名约定是一个非常敏感,主观和争论的事情.我建议选择一种以某种方式区分类型和变量的方法.就个人而言,我选择将我的类型大写,并将我的变量保留为以小写字母开头.
它并不真正的问题是如何你区分它们(您使用大写或结尾下划线的建议都是常见的),只是,只要您的使用情况是一致的.
归档时间: |
|
查看次数: |
4918 次 |
最近记录: |