作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
C++03 3.2.2
...如果对象或非重载函数的名称出现在可能求值的表达式中,则使用该对象或非重载函数。如果不是纯的就用虚成员函数...
随后在 3.2.3
中我们有:每个程序都应包含该程序中使用的每个非内联函数或对象的一个定义;无需诊断。该定义可以显式出现在程序中,可以在标准或用户定义的库中找到,或者(适当时)隐式定义(参见 12.1、12.4 和 12.8)。内联函数应在使用它的每个翻译单元中定义。
按照我正在阅读的内容:未使用纯虚函数。 ODR 仅适用于使用的函数。这是否意味着以下内容是合法的?我猜答案是否定的,它没有,但后来我不明白为什么。
//x.h
struct A
{
virtual void f() = 0;
};
//y.cpp
#include "x.h"
void A::f()
{
}
//z.cpp
#include "x.h"
#include <iostream>
void A::f()
{
std::cout << "Hello" << std::endl;
}
//main.cpp
#include "x.h"
struct B:A
{
virtual void f()
{
A::f();
}
};
int main()
{
A* p = new B;
p->f();
}
最佳答案
这两个条款并不相互排斥。如果虚函数不是纯函数,则使用它并不意味着反之亦然。如果一个虚函数是纯的,并不意味着它一定不会被使用。 “如果它的名称出现在可能评估的表达式中”,它可能仍会被使用,例如在您的示例中:A::f();
。
关于c++ - 不纯就用虚成员函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4145915/
我有一个特别的问题想要解决,我不确定是否可行,因为我找不到任何信息或正在完成的示例。基本上,我有: class ParentObject {}; class DerivedObject : publi
在我们的项目中,我们配置了虚 URL,以便用户可以在地址栏中输入虚 URL,这会将他们重定向到原始 URL。 例如: 如果用户输入'http://www.abc.com/partner ',它会将它们
我是一名优秀的程序员,十分优秀!