我正在使用fstream并遇到一些错误.
这是我有的:
class CLog
{
void printOn(std::ostream& dbg) const;
}
void operator>>(const CLog& s, std::ofstream& dbg)
{
s.printOn(dbg);
}
Run Code Online (Sandbox Code Playgroud)
但是当我编译时,我收到以下错误:
error C2664: 'printOn' : cannot convert parameter 1 from
'class std::basic_ofstream<char,struct std::char_traits<char> >' to
'class std::basic_ostream<char,struct std::char_traits<char> > &'
A reference that is not to 'const' cannot be bound to a non-lvalue
Run Code Online (Sandbox Code Playgroud)
我认为ofstream继承自ostream所以为什么不可能呢?
谢谢
我在Haskell中遇到以下问题.
我尝试压缩列表和数字以编号列表即zip [1..] mylist.
但是,这种类型是[(Integer, [String])].
有没有办法得到Int而不是Integer在这种情况下?
一个简单的问题,但我不确定它在C++中做了什么.
当我有一个具有_bstr_t成员的类.我想知道删除对象时是否释放成员:
class A {
_bstr_t foo("Testing");
}
Run Code Online (Sandbox Code Playgroud)
这A堂课没有dtor.那个默认的dtor是否会调用该类成员的dtor A?
特别是对于_bstr_t,因为它通过SysAllocString分配一个字符串.
谢谢
我可以自己回答这个问题,写一个虚拟测试,但我想知道人们对这个问题的看法.这里是:
当我们同时重载和覆盖时,将调用哪种方法?我只考虑类型重载而不是arity重载和类型重载是相关的.
让我举个例子:
class AA {}
class BB : AA {}
class A {
public virtual void methodA(AA anAA) { Console.Write("A:methodA(AA) called"); }
public virtual void methodA(BB aBB) { Console.Write("A:methodA(BB) called"); }
}
class B : A {
public override void methodA(AA anAA) { Console.Write("B:methodA(AA) called"); }
}
new B().methodA(new BB()); // Case 1
new B().methodA(new AA()); // Case 2
new B().methodA((AA)new BB()); // Case 3
Run Code Online (Sandbox Code Playgroud)
你能说出案例1,2和3会发生什么吗?
我个人认为过载是邪恶的,并且没有一致的想法可以导致可预测的答案.这完全基于编译器+ vm中实现的约定.
编辑:如果您对过载是邪恶的原因有疑问,可以阅读Gilad Brach的博客文章
谢谢