Sergei Vladimirov: 是的,我明白你的问题。有一个函数有更合适的签名,但它不能被调用,因为它被保护了。是的,其行为与Studio不同:在MKL中,有更严格的类型控制(在这种情况下)。我不知道这是否应该被认为是一个错误。如果你控制传递给函数的参数的类型,就不会有问题。
控制是相当有选择性的,因此更不一致,这从这里可以看出
class A { public: void f( int ) const {} /*(1)*/ void f( int ) {} /*(2)*/ }; class B : public A { public: void f( int ) const {} /*(3)*/ }; voidOnStart() { B b; //не const B b.f( 0 ); //(*)
class A { public: void f( int ) const {} /*(1)*/ void f( int ) {} /*(2)*/ }; class B : public A { public: void f( int ) const {} /*(3)*/ }; voidOnStart() { B b; //не const B b.f( 0 ); //(*)
我在kodobase中做了一个tick指标。但我无法附加来源--我按下 "附加文件",铭文消失,但选择文件的界面没有出现。
也许安装了广告屏蔽,可以阻止所有的弹出式广告
我没有改变任何东西。之前一切都在工作。
结账时,我按下这个按钮
没有任何东西回来,除了这个。
是的,我明白你的问题。有一个函数有更合适的签名,但它不能被调用,因为它被保护了。是的,其行为与Studio不同:在MKL中,有更严格的类型控制(在这种情况下)。我不知道这是否应该被认为是一个错误。如果你控制传递给函数的参数的类型,就不会有问题。
控制是相当有选择性的,因此更不一致,这从这里可以看出
class A {
}public:
void f( int ) const {} /*(1)*/
void f( int ) {} /*(2)*/
};
class B : public A {
public:
void f( int ) const {} /*(3)*/
};
void OnStart()
{
B b; //не const B
b.f( 0 ); //(*)
但是C++总是不分析基类是否有更合适的方法,如果派生类正好有一个合适的方法。
而MQL--在上一个例子中,它分析了基类中更合适的方法,而在这个例子中,它没有分析(这里和C++一样会调用B::f/*(3)*/),这意味着没有统一的方法
另一个控制不一致的例子:C++发现以下代码
void f( int i ) const {}
void f( uint i ) {}
};
void OnStart()
{
A a;
a.f((int)0 );
}
控制是相当有选择性的,因此更不一致,这从这里可以看出
class A {
}public:
void f( int ) const {} /*(1)*/
void f( int ) {} /*(2)*/
};
class B : public A {
public:
void f( int ) const {} /*(3)*/
};
void OnStart()
{
B b; //не const B
b.f( 0 ); //(*)
但是C++总是不分析基类是否有更合适的方法,如果派生类正好有一个合适的方法。
而MQL--在上一个例子中,它分析了基类中更合适的方法,而在这个例子中,它没有分析(这里和C++一样会调用B::f/*(3)*/),这意味着没有统一的方法
另一个控制不一致的例子:C++发现以下代码
void f( int i ) const {}
void f( uint i ) {}
};
void OnStart()
{
A a;
a.f((int)0 );
}
你用什么C++编译器? 我用gcc,一切都通过了,没有任何错误。
void f( int i ) const {} //1
void f( unsigned int i ) {} //2
};
void OnStart()
{
A a;
a.f((int)0 );
}
(1)或(2)。现在我将插入编译器的信息
这其实是一种严格的控制:一种方法在签名方面更适合,另一种在一致性方面更适合。
这实际上是一种严格的控制:一种方法通过签名更适合,另一种方法通过恒定性更适合。
而且也不清楚你为什么要写这样的东西。
替换f->运算符[],以你最近的例子为例--想想如何让[]既是左边又是右边。添加恒定的味道 - 然后用模板包装,你就有了类似的东西。
如果做出决定--考虑没有如果
如果不能明确,你至少应该发出一个警告
替换f->运算符[],以你最近的例子为例--想想如何让[]既是左边又是右边。加入恒定的味道--然后用模板包装,你就会有类似的东西。
我们谈论的是哪个例子?你能不能不给出来源,而是给出最终的条目,这应该是可行的?
你最终应该得到这样的结果
{
A<int> a;
int b = a[ 0 ];
a[ 0 ] = a[ 1 ];
a[ 1 ] = b;
}
你最终应该得到这样的结果
{
A<int> a;
int b = a[ 0 ];
a[ 0 ] = a[ 1 ];
a[ 1 ] = b;
}