我可以使用 `distance` 作为我的类成员变量名吗?

克里斯

定义一个这样的类是可以的(忽略它的实现):

class MyEngine {
private:
    int*  params;
    int   param_len;
public:
    void  set_params(int* _params, int _len);
    float  get_result(); // relies on `distance` member
    float  distance;   // people can modify this
};

但是,如果使用vector,假设它隐式包含<iterator>which contains std::distance编译器如何区分std::distancedistance成员?(还是会在运行时导致意外崩溃?)比如说,该函数get_result()依赖于distance成员值。

#include <vector>
using namespace std;

class MyEngine {
private:
    vector<int> params;
public:
    void  set_params(int* _params, int _len);
    float  get_result(); // relies on `distance` member
    float  distance;   // people can modify this
};

更新

正如人们所提到的,这using namespace std是不好的做法;但是,仍然有人用 编写代码using namespace std,如果我们与他们合作,使用他们的代码,是否有任何 concreate 示例可以证明 的using namespace std严重性,特别是严重的运行错误?这,才是我真正的目的。

有一个答案,说distance按类型区分两者让我们试试这个片段:

#include <stdio.h>
#include <stdlib.h>
#include <vector>
#include <iterator>
using namespace std;

class MyEngine {
private:
    vector<int> params;
    float* distance;   // people can modify this
    int len;
public:
    void setup();
};

void MyEngine::setup()
{
    len = 100;
    distance = (float*)malloc(sizeof(float)*len);
    for(int i=0; i<len; i++) {
        distance[0] = len - i;
        params.push_back(len-i);
    }

    int num = distance(params.begin(), params.end());
    printf("distance is: %d\n", num);
}

int main(){

    MyEngine engine;
    int len = 10;
    engine.setup();

    return 0;
}

其中,会导致编译错误说:

main.cpp:25:23: error: called object type 'float *' is not a function or function pointer
    int num = distance(params.begin(), params.end());
              ~~~~~~~~^
1 error generated.

表明它不能distance从它们的类型中区分这两者

带翅膀的小行星

嗯,一个是MyEngine::distance,另一个是std::distance他们是不同的名字。这就是scopes 的重点

如果您使用不合格的名称distance并让编译器自行解决,那只会有问题,但如果这不起作用,那将是因为所选名称的类型与您的用法不匹配,因此您的程序获胜不编译。

如果你曾经把东西放进去,std那么名称可能会以潜在的无法诊断的方式发生冲突,这可能会导致崩溃,并且根据标准具有未定义的行为。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

我可以使用“ using”代替“ typedef”作为指向类成员变量的指针吗?

我可以使用成员变量实例化成员类模板吗?

我可以在 JavaScript 中使用变量作为变量名吗?

我可以使用成员元素作为类方法的默认参数吗?

我可以在VB.Net中使用TypeName的camelCase作为变量名吗?

我可以在冒号中使用冒号作为变量名吗?

我们可以使用类作为标题吗

C ++:我可以使用成员变量的迭代器并将其设为类之一吗?

我可以使用self访问类变量吗?

我可以使用类来更改 CSS 变量吗?

我可以使用applymap更改数据框的变量名称吗

我可以使用在类构造函数中初始化的ofstream类型的成员变量吗?

我应该避免在Python中使用“ str”作为变量名吗?

我可以使用通配符替换吗

骨骼可以使用我的插件吗?

我可以使用多个“ with”吗?

我可以使用RTF格式吗?

我可以使用迭代器吗?

我可以使用javascript表单吗?

我可以使用不推荐使用的类吗?

我可以使用成员函数作为EnumWindows的第一个参数吗

我可以使用HTML元素作为对象键吗?

我可以使用集合类型作为数组索引吗?

我可以使用Mypy存根作为接口吗?

我可以使用枚举作为结构名称吗?

我可以使用cd ../ ..作为别名吗?

我可以使用张量作为列表索引吗?

我可以使用相同的dbcontext作为ASP身份吗

我可以使用 IEnumerator 作为更新函数吗?