错误、漏洞、问题 - 页 1119

 

译错误: 编译器认为我在通过引用传递一个指针

class A {
};

void f1( A*  a ) {}
void f2( int a ) {}

void OnStart()
{
        A* const a1 = new A();
        f1( a1 ); // ошибка компиляции: constant variable cannot be as reference
        const int a2 = 1;
        f2( a2 ); //все нормально
}

如果我写f1( A* const a ),一切都编译得很好,但我不写f2( const int a ),在f2( int a )的情况下,编译器会得到正确的结果


по сути
f1( A*  a ) отличается от f1( A* const  a )
тем же, чем
f2( int a ) отличается от f2( const int a )
那么f2( a2 )中也应该有一个错误。
 
Lone_Irbis:

我不想在这里发布整个代码和.集,但我可以把它发送到某个地方。

谢谢你!让我们试着重现它。该代码可以被发送到servicedesk(在所有检查之后,它将被保证删除)。
 

不能删除一个恒定的A*指针

class A {
};

void OnStart()
{
        const A *a = new A;
        delete( a ); //ошибка компиляции: constant cannot be modified
}

乍一看,这似乎是合乎逻辑的--删除调用析构函数~A(),而且它不可能是常量(***)

但这样一来,原则上就不可能删除以下例子中的对象了

void f()
{
    const A a;
}

因为在退出f()时,不能是常量的析构器仍然被调用,因此(***)原则不起作用。

此外,C++编译器不会阻止delete( a ),即使参数被声明为const A *(析构器不能被声明为const,因为它对任何对象,包括非const,都会被调用)。

[删除]  
不再算作帖子(
 
GriFFon4ik:
不再算作帖子(
是的,不再是了...
 
GriFFon4ik:
不再算作帖子(
不管怎么样。
[删除]  
barabashkakvn:
哦,好吧。
悲伤 :-(
 

我检查了帖子,它没有增加。也许有一些巧妙的改进配方......

关于交易、自动交易系统和测试交易策略的论坛

有趣和幽默

newdigital, 2014.04.09 14:23

应该禁止思考--这很有攻击性!

这些线条被编织成一首诗。
海水舔舐着干涸的土地。
孩子们在便盆里拉屎。
? 成年人在他们的灵魂中拉屎 ?

无论评级发生了什么变化。
[删除]  
newdigital:

我检查了我在这里的帖子--它没有增加。也许有一些巧妙的改进配方......

无论评级发生了什么变化。
它正在工作),但没有(
[删除]  
停止计算论坛帖子的评分 (
Bugs , website mql5.com , closed , initiative: 2014.04.09 14:07 , # 993171

停止计算论坛帖子的评分 (



支持小组2014.04.09 15:27
你为什么会这样想?
GriFFon4ik2014.04.09 17:38
嗯,以前是书面评论,评级立即+1,但现在没有 "立即+1 "了。
支持小组2014.04.09 17:38

现在,评级将定期分配,有一个延迟