gpt4 book ai didi

c++ - 不纯就用虚成员函数?

转载 作者:可可西里 更新时间:2023-11-01 17:24:15 24 4
gpt4 key购买 nike

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com