Shi*_*rik 19 c++ visual-c++ diamond-problem
我是其中一个必须使用0警告编译代码的人之一.通常我尊重编译器,如果它发出警告,我会把它作为一个标志,我应该稍微修改我的代码.如果我必须告诉编译器忽略给定的警告,我会抽搐一下.
但是这个我似乎无法绕过,从我可以告诉我没有做任何"坏事".有人认为这是一个糟糕的设计吗?我看不出任何特别讨厌的东西(除了"邪恶的钻石"),但它是完全有效和有用的代码.但它会产生(在MSVC中)2级警告!
class IFoo
{
public:
virtual void foo() = 0;
};
class Bar : public virtual IFoo
{
public:
virtual void foo() { std::cout << "Hello, world!"; }
};
class Baz : public virtual IFoo
{
};
class Quux : public Bar, public Baz
{
};
Run Code Online (Sandbox Code Playgroud)
现在,如果我创建一个Quux对象,应该期望调用Bar :: foo实现.MSVC非常有帮助:它警告我不够模棱两可?
警告C4250:'Quux':通过优势继承'Bar :: Bar :: foo'
现在我知道我可以用一个pragma来关闭这个警告,但这不是我在这里问的问题.我是否应该在这里听编译器,或者这只是一个非常过分热心的警告?
Pup*_*ppy 11
执行虚拟继承时,不显式覆盖最派生类中的每个成员是一个坏主意.否则,当有人更改从虚拟基础继承的一个基类时,您要求您的代码死于可怕的死亡.没有什么积极错,你的程序将不会崩溃或anysuch,但它是一个维护坏主意.如果你想调用该Bar::foo版本,那么你应该委托给它Quux::foo.
| 归档时间: |
|
| 查看次数: |
4563 次 |
| 最近记录: |