代码如下:
#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;
}
什么是&#39;基础:&#39;手段?它是c ++中的标准关键词吗?
平台:win10 + vs2015 update3;
项目类型:win32控制台项目;
答案 0 :(得分:6)
一种有些已知的习语会涉及类似
的内容<div>@Model.someProperty</div>
你在那里看到的表面看起来很相似,但事实并非如此。在您的情况下,struct B : public A {
typedef A base;
void foo() override { base::foo(); }
};
只是一个标签,它什么都不影响。除非您提供的代码是故意的谜题/笑话,否则实际上可能是尝试重现我上面发布的内容,而这些内容并不是因为没有重新理解所有细节。
在任何情况下,base:
都不是C ++中的关键字(也不是VS2015中的关键字)。
答案 1 :(得分:2)
VistaDBConnectionStringBuilder connStringBuilder = new VistaDBConnectionStringBuilder();
connStringBuilder.Password = "***";
connStringBuilder.DataSource = pathandFilenameTovdb5DB;
connStringBuilder.Pooling = false;
connStringBuilder.OpenMode = VistaDB.VistaDBDatabaseOpenMode.NonexclusiveReadWrite;
DatabaseTarget dbt = new DatabaseTarget();
dbt.Name = "NLog Database";
dbt.DBProvider = "VistaDB.Provider.VistaDBConnection, VistaDB.5.NET40, Version=5.0.0.0, Culture=neutral, PublicKeyToken=dfc935afe2125461";
dbt.ConnectionString = connStringBuilder.ConnectionString;
不是C ++中的关键字。它只是一个没有特殊含义的普通标识符。
如果代码正是您向我们展示的内容,则base
是一个转到标签 - 并且完全没有意义,因为没有引用它。您可以在base:
之后(暂时)添加goto base;
来自行演示。 (我只是自己尝试过,并没有得到任何额外的诊断。当然这将是一个无限循环。)
代码的作者可能并不打算将其作为goto标签,并且可能认为base:foo();
会引用父类。也许base
是base:
的拼写错误(这可能是一个错误 - 也许base::
是某种其他语言的关键字)?
无法确定作者的意图。使用base
,这在C ++中是非法的(它需要void main()
)表明作者并不能很好地了解C ++。他或她可能试图做一些引用父类的东西,写得不正确,偶然发现了编写的东西。