c++ - 类成员在类定义中是否需要以 `class::`为前缀?

标签 c++ class namespaces

定义类时cls , 是否有必要(或良好做法)在类名前加上前缀 cls::cls 中使用它们时给成员自己的定义,还是隐式完成的?例如

class cls {
    int x;
    void foo();
    void bar();
}
void cls::foo() {
    x++;    // or use cls::x?
    bar();  // or cls::bar()?
}

如果是这样,那么创建一个类 cls自动意味着它也是一个命名空间(因为我认为 :: 运算符仅用于命名空间)?

编辑(跟进): 如果我们不使用 cls::this-> ,那么如果我的源也有一个变量 x 怎么办?课外?怎么会cls::foo()知道是哪一个x++指的是什么?

最佳答案

用类名显式限定成员变量的使用是个坏主意。最好的情况下,它是不必要的(或者在有必要的地方,this->member 更好)并且会抑制重构(如果重命名该类,可以更改更多地方),最坏的情况是它会引入错误,因为对虚函数的合格调用不会分派(dispatch)到重写版本.

关于c++ - 类成员在类定义中是否需要以 `class::`为前缀?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16483041/

相关文章:

c++ - 如何使用 c/c++ 在 OpenLDAP 中提取用户的组成员身份

Javascript 命名空间。它会提高 JS/浏览器性能吗?

c# - 一个关于 LINQ to XML 的简单问题

asp.net - 在 ASP.Net 回发之间保留客户端类更改吗?

xml - 如何修复 : Attribute xmlns:gco redefined

c++ - strstr 是否有反向功能

c++ - 使用仿函数调用 find_if 的编译错误

c++ - 如果字符串表示负数,则使用错误处理将字符串解析为无符号整数

java - java默认构造函数抛出异常

c# - 列表中的多个参数。如何在没有类的情况下创建?