Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;通过指针/引用使用静态常量整型变量?_C++_Static_Constants_Standards - Fatal编程技术网

C++ C++;通过指针/引用使用静态常量整型变量?

C++ C++;通过指针/引用使用静态常量整型变量?,c++,static,constants,standards,C++,Static,Constants,Standards,当声明和使用静态常量积分时,我发现使用我正在使用的对象引用访问变量,而不是使用类名完全限定它,既方便又自然。我想知道这是否有负面影响?例如: class MyLongClassNameIdRatherNotHaveEverywhere { public: static const int Len = 6; //... void otherInterestingThings(); void someWorkToDo(); }; int main() { M

当声明和使用静态常量积分时,我发现使用我正在使用的对象引用访问变量,而不是使用类名完全限定它,既方便又自然。我想知道这是否有负面影响?例如:

class MyLongClassNameIdRatherNotHaveEverywhere {
public:
    static const int Len = 6;
    //...
    void otherInterestingThings();
    void someWorkToDo();
};

int main() {
    MyLongClassNameIdRatherNotHaveEverywhere *lcn = new MyLongClassNameIdRatherNotHaveEverywhere;
    lcn->someWorkToDo();
    cout << "the length is: " << lcn->Len << endl;
    delete lcn;
    return 0;
}
class MyLongClassNameIdRatherNotHaveEverywhere{
公众:
静态常数int Len=6;
//...
使其他有趣的东西无效();
作废一些工作待办事项();
};
int main(){
MyLongClassNameIdRatherNotHaveEverywhere*lcn=新MyLongClassNameIdRatherNotHaveEverywhere;
lcn->someWorkToDo();

cout除了奇怪之外,我可以看到操作符->过载的情况下的一个缺点。。。
作用域解析运算符::顺便说一句,不能重载。

“事实上,如果lcn为null,它仍然可以正常编译和运行。”这并不意味着它是合法的。这样做是未定义的行为。@jrok:不,不是。你不是在访问对象,只是在使用对象类型访问类的静态成员。指针没有取消引用,也没有涉及未定义的行为。@jrok:在查看标准中的措辞后,我认为你是对的。而mber不是对象的一部分,标准要求对表达式求值,在这种情况下(我理解)意味着取消对指针的引用(即使从未访问过对象)这要么是未定义的行为,要么是足够接近而不想这样做:)@DavidRodríguez dribeas从我在n3337的5.2.5中读到的,表达式
E1->E2
被转换为
(*(E1)).E2
,并且两个子表达式都被求值,即使结果不需要确定整个表达式的结果(参见同一页上的子文本64)。这肯定意味着
nullptr
被取消引用了吗?编辑:ninja'd:)@mark可能。这是一种在实践中起作用的UB。