当前位置:  开发笔记 > 编程语言 > 正文

类方法和具有相同名称的变量,C++中的编译错误不在Java中?

如何解决《类方法和具有相同名称的变量,C++中的编译错误不在Java中?》经验,为你挑选了4个好方法。

因为C++不是Java.您可以获取会员的地址:

&Test::isVal

所以你不能让两个成员具有相同的名称,除了你可以重载成员函数.即使你可以通过某种演员来消除歧义,下一个问题也会出现在其他地方.

在C++中,包括我在内的很多人通常都会专门调用数据成员,比如m在他们的名字前面加上一个.这避免了这个问题:

class Test {
public:
    bool IsVal() const { return mIsVal; }
private:
    bool mIsVal;
};

在C++中,我们通常会特别调用成员变量,就像把am放在他们的名字之前???? 我们的确是?这是语言规范吗?这是一个完美的答案,直到那句话和它后面的例子. (24认同)

joe_mucchiello,出去统计所有流行的名称,例如"data_","_ data","mData","m_data"等等.我认为这证明我使用"通常"是合理的. (9认同)

@jmu"我不认为" - "因此它[名称重整]与问题无关".我不知道你的个人事务(你的意见)对我答案中任何事情的相关性有何客观影响?*我认为他们(我们!)因为姓名冲突的问题而做错了*我*把它放到我的问题中并认为它是相关的.您尚未提供相反声明的证据. (3认同)

...而且,在幕后,这些函数实际上并没有真正使用相同的名称,因为它们通过类和参数签名来区分。 (2认同)


小智.. 13

C++将名称修改应用于函数名称和全局变量.局部变量不会受损.问题出现了,因为在C中你可以访问变量或函数的地址(因此在C++中也是如此),例如:

struct noob{
    bool noobvar;
    void noobvar(){};
};

可以说,为什么不将名称修改应用于局部变量,然后有一个内部本地表示,如

bool __noobvar_avar;
void __noobvar_void_fun;

并假设它们分别在执行0x000A和0x00C0期间接收地址.

但是,如果我们在代码中的某处写:

&noob::noobvar

该计划应该做什么?

    返回变量noobvar的地址,即0x000A

    返回noobvar函数的地址,即0x00C0

您可以看到,因为在C中,因此在C++中,您可以发出"地址",在相同的分辨率范围内使用具有相同名称的变量和函数是不合法的.



1> Johannes Sch..:

因为C++不是Java.您可以获取会员的地址:

&Test::isVal

所以你不能让两个成员具有相同的名称,除了你可以重载成员函数.即使你可以通过某种演员来消除歧义,下一个问题也会出现在其他地方.

在C++中,包括我在内的很多人通常都会专门调用数据成员,比如m在他们的名字前面加上一个.这避免了这个问题:

class Test {
public:
    bool IsVal() const { return mIsVal; }
private:
    bool mIsVal;
};


在C++中,我们通常会特别调用成员变量,就像把am放在他们的名字之前???? 我们的确是?这是语言规范吗?这是一个完美的答案,直到那句话和它后面的例子.
joe_mucchiello,出去统计所有流行的名称,例如"data_","_ data","mData","m_data"等等.我认为这证明我使用"通常"是合理的.
@jmu"我不认为" - "因此它[名称重整]与问题无关".我不知道你的个人事务(你的意见)对我答案中任何事情的相关性有何客观影响?*我认为他们(我们!)因为姓名冲突的问题而做错了*我*把它放到我的问题中并认为它是相关的.您尚未提供相反声明的证据.
...而且,在幕后,这些函数实际上并没有真正使用相同的名称,因为它们通过类和参数签名来区分。

2> 小智..:

C++将名称修改应用于函数名称和全局变量.局部变量不会受损.问题出现了,因为在C中你可以访问变量或函数的地址(因此在C++中也是如此),例如:

struct noob{
    bool noobvar;
    void noobvar(){};
};

可以说,为什么不将名称修改应用于局部变量,然后有一个内部本地表示,如

bool __noobvar_avar;
void __noobvar_void_fun;

并假设它们分别在执行0x000A和0x00C0期间接收地址.

但是,如果我们在代码中的某处写:

&noob::noobvar

该计划应该做什么?

    返回变量noobvar的地址,即0x000A

    返回noobvar函数的地址,即0x00C0

您可以看到,因为在C中,因此在C++中,您可以发出"地址",在相同的分辨率范围内使用具有相同名称的变量和函数是不合法的.



3> Kevin Loney..:

c/c ++中的函数只是指向代码所在的内存中的位置的指针,isVal(作为布尔值)和isVal(作为函数)因此是不明确的.



4> Charlie Mart..:

快速的答案是“因为这就是C ++的工作方式”。C ++没有用于成员变量和成员函数(即“方法”)的单独名称空间,而Java(显然,我还没有尝试过)可以这样做。

在任何情况下,请记住是谁去看医生,说那家伙老故事“医生,我这样做时,它会伤害这个。” 医生回答说“好吧,不要那样!” 这是成为哑巴程序员技巧的一种语言特性。

推荐阅读
U友50081205_653
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有