Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.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++ - Fatal编程技术网

C++ 这个基数是什么意思?它是标准的c++;关键词

C++ 这个基数是什么意思?它是标准的c++;关键词,c++,C++,守则如下: #include <iostream> struct A { virtual void foo() { std::cout << "hello world!" << std::endl; } }; struct B : public A { void foo() override { base:foo(); } }; void main() { A* p = new B(); p->foo();

守则如下:

#include <iostream>

struct A {
    virtual void foo() { std::cout << "hello world!" << std::endl; }
};

struct B : public A {
    void foo() override { base:foo(); }
};

void main() {
    A* p = new B();
    p->foo();

    delete p;
}
#包括
结构A{

virtualvoidfoo(){std::cout一个稍有知名度的习惯用法可能涉及如下内容

struct B : public A {
    typedef A base;
    void foo() override { base::foo(); }
};
你所拥有的东西表面上看起来很相似,但事实并非如此。在你的例子中,
base:
只是一个标签,没有任何影响。除非你展示的代码是一个故意的谜题/笑话,否则它实际上可能是一个不记得所有细节的人试图复制我上面发布的内容br


无论如何,<代码> Base<代码>不是C++中的关键字(也不是VS2015中的关键字)。

struct B : public A {
    typedef A base;
    void foo() override { base::foo(); }
};
你所拥有的东西表面上看起来很相似,但事实并非如此。在你的例子中,
base:
只是一个标签,没有任何影响。除非你展示的代码是一个故意的谜题/笑话,否则它实际上可能是一个不记得所有细节的人试图复制我上面发布的内容br


<> >无论如何,<代码> BASE>代码>不是C++中的关键字(也不是VS2015中的关键字)。

<代码>代码> BASE/COM>不是C++中的关键字。它只是一个没有特殊含义的普通标识符。 如果代码正是您展示给我们的,那么
base:
是一个goto标签——而且完全没有意义,因为没有对它的引用。您可以(暂时)通过在
base:foo();
之后添加
goto base;
来证明这一点。(我只是自己尝试了一下,没有得到任何额外的诊断。当然,那将是一个无限循环。)

很可能代码的作者并不打算将其作为一个goto标签,并且可能认为
base
将引用父类。也许
base:
base::
的一个打字错误(这可能是一个错误——也许
base
是其他语言中的一个关键字)


不可能确定作者的意图。使用<代码>无效的主()/<代码>,这在C++中是非法的(它需要是代码> int())/>代码>作者认为,C++不太好,他或她可能尝试做一些引用父类的事情,写得不正确,偶然碰巧写出了编译中的东西。

<代码> BASE> /Cuff>不是C++中的关键字。它只是一个没有特殊含义的普通标识符。 如果代码正是您展示给我们的,那么
base:
是一个goto标签——而且完全没有意义,因为没有对它的引用。您可以(暂时)通过在
base:foo();
之后添加
goto base;
来证明这一点。(我只是自己尝试了一下,没有得到任何额外的诊断。当然,那将是一个无限循环。)

很可能代码的作者并不打算将其作为一个goto标签,并且可能认为
base
将引用父类。也许
base:
base::
的一个打字错误(这可能是一个错误——也许
base
是其他语言中的一个关键字)


不可能确定作者的意图。使用<代码>无效的主()/<代码>,这在C++中是非法的(它需要是代码> int())/>代码>建议作者不太熟悉C++,他或她可能尝试做一些引用父类的事情,写错了,偶然碰巧写出了编译的东西。

如果代码如图所示,<>代码> Base:< /C> >是一个可以被代码> Goto < /Cord>语句引用的标签。那将是一个毫无意义的标签,所以有些东西告诉我你没有向我们展示真正的代码。
base:
仅仅是一个标签;不妨写
xyz:foo()
。如前所述,
B::foo
进入无限递归。如果这是你所希望的,它不会调用
A::foo
。你所有的
基:
都是属于我们的。为了(;伟大的正义;){Move(z->ig())}把所有的
z->ig()去掉
。伙计们,我只是好奇这个问题-was评论员解决方案标签(即goto标签)从代码块中删除,或者我完全忘记了cpp?我只是不能理解前两个comments@code_farmer如果没有跳转到该标签的
goto
,则该标签是多余的。您只需删除
标签:
部分,该语句仍将以相同的方式执行。如果代码如图所示,则
base:
将是多余的一个可以被
goto
语句引用的标签。但是,这是一个毫无意义的标签,所以有些东西告诉我你没有向我们展示真正的代码。
base:
仅仅是一个标签;也可以写
xyz:foo()
。如前所述,
B::foo
进入无限递归。如果这是你所希望的,它不会调用
A::foo
。你所有的
基:
都是属于我们的。为了(;伟大的正义;){Move(z->ig())}把所有的
z->ig()去掉
。伙计们,我只是好奇这个问题-was评论员解决方案标签(即goto标签)从代码块中删除,或者我完全忘记了cpp?我只是不能理解前两个comments@code_farmer如果没有跳转到标签的
goto
,则该标签是多余的。您只需删除
标签:
部分,该语句仍将以相同的方式执行。我同意您的答案,但这是否意味着问题在提问代码块中,或者其他什么东西?我在C++中没有编码很久,尽管有疑问,比如这样的(即你的建议没有补丁应用到源代码)。被介绍给standard@RobertColumbia我只是好奇比较发问者代码块和建议的解决方案之间的差异。为什么这是一个问题?没有提到“跳过几行”之类的东西,我在C/C++中不是那么笨,我不理解这个问题或答案背后的逻辑,但它似乎更容易理解