const引用绑定到一个右值

工作在这个问题上,我发现了一个不一致的行为。

为什么要参考不同的行为在构造函数中的一个常用功能的结合?

struct A { }; struct B : public A { B(){} private: B(const B&); }; void f( const B& b ) {} int main() { A a( B() ); // works A const & a2 = B(); // C++0x: works, C++03: fails f( B() ); // C++0x: works, C++03: fails }

我已经测试了它与G ++ C ++ 03 - 4.1和科莫4.2.45.2严格C ++ 03模式,并以C ++ 0x的扩展禁用。 我得到了相同的结果。

对于C ++ 0x中进行了测试使用g ++ - 4.4和科莫4.3.9在轻松模式,并启用的C ++ 0x扩展。 我得到了相同的结果。

--------------解决方案-------------

A a(B());

是函数的声明命名为返回一个A和采取指针函数没有参数返回B.在这里看到。 加入括号,你会得到你所期望的错误:

A a((B()));

分类:C# 时间:2012-01-01 人气:0
分享到:

相关文章

  • Chrome的11错误在解析CSS规则 2013-03-27

    我有这个滑块: 它的工作原理是在几乎所有的浏览器(Firefox,歌剧,Safari,甚至是设计师杀手浏览器,IE)魅力. 但在Chrome 11(我要支持这个版本的Chrome浏览器)和较低的版本右键落下. 我被跟踪,看看它为什么如此行为,和我遇到一些非常有趣的来了,但在同一时间烦人. 对于我的左右按键,我有一个非常简单的CSS规则: #rightBtn { background: url(/images/rightBtn.png) 0 0 no-repeat; width: 56px; he

  • 我该如何解决在DirectX 11的节目“解析的外部符号”的错误? 2013-04-12

    我工作的学校支持DirectX 11的项目,我这样做的时候完全遵循了这本书. 我一直在想,也许什么标错了,但我仔细检查了我的所有文件,我所有的类名都很好(我相信他们是罚款)和双重检查我的头文件是如何设置,一切都应该没问题,我仍然得到这个错误输出: 1> BlankDemo.obj:错误LNK2019:​​无法解析的外部符号"公用:__thiscall DemoBase :: DemoBase(无效)"(?? 0DemoBase @@ QAE @ XZ)函数引用"公众:_

  • 最让人头疼的解析:为什么不是A A(()); 工作? 2013-04-04

    其中有很多方面堆栈溢出教给我的是被称为"最棘手的解析",这是经典的证明用线等 A a(B()); //declares a function 而这一点,对于大部分,直观似乎是一个对象的声明a类A ,采取临时B对象作为构造函数的参数,它实际上是一个函数的声明a回的A ,同时指向一个函数返回B和它本身不带任何参数. 同样的线路 A a(); //declares a function 也落入同一类别中,由于代替一个对象,它声明的功能. 现在,在第一种情况下,通常的解决此问题是添加一个额外的

  • 有两个参数向量的构造解析为函数声明 2013-05-15

    考虑下面这个例子: #include <iostream> #include <string> #include <vector> #include <iterator> int main() { std::string sen = "abc def ghi jkl"; std::istringstream iss(sen); std::vector<std::string> // declaration in questio

  • 解析数字列表的最佳方法 2012-09-18

    我有我需要处理数字的名单,这将是一个英语句子的一个问题. 它可能是以下格式: 件1,2和3 项2至5 项目1至20 项目4或8 我最初的本能是写一个简单的状态机来分析它,但我想知道是否有更好的(简单)的方式,比如也许有些正则表达式. 任何建议? --------------解决方案------------- 如果你有C ++ 11,下列解析器(AXE)将解析所有的格式(我没有测试): unsigned i; auto num = axe::r_unsigned(i); auto space =

  • SimpleXML的帮助我该如何解析呢? 2013-12-30

    我没有做任何XML的项目,所以我不太确定如何处理这些数据做... 我使用卷曲,使到Salesforce的请求,他们给我回来,我需要解析的响应. 我想使用的SimpleXML. 下面是响应的一部分: <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns="urn:partner.soap.sforce.com" xmlns:xsi="http:

  • 是否有一个良好的日期解析器的Java? 2014-01-17

    有谁知道一个良好的日期解析器不同的语言/区域设置. 爪哇(SimpleDateFormat的)的内置解析器是非常严格的. 它应该完成缺少的部分为当前日期. 例如 如果我不输入年份(仅日和月),则当年应使用. 如果年份是08年那么它不应该解析0008,因为本年度模式有4位数字. 编辑:我想从分析用户输入. 例如,如果用户的语言环境日期格式为"DD.MM.YYYY"和用户类型唯一的"12.11". 那么解析器应该接受这是一个有效的日期,其值为"二○○八年十二月

  • 强制不当枚举值? 2013-06-06

    我碰到一些不寻常的(至少对我来说...)用C ++的枚举行为. 我试着在Visual Studio 2008和g ++ 4.4.3版本以下 #include <iostream> using namespace std; enum testEnum { // no zero enum one = 1, two = 2, three = 3 }; int main(int argc, char *argv[]) { testEnum e; // undefined value (may be z

  • C ++ - 这是什么做的,如果构造函数是私有的? 2014-03-11

    在下面的代码,为什么编译器不抱怨的mClass2? class CMyClass{ private: CMyClass(){} }; void TestMethod(){ CMyClass mClass1; //Fails. CMyClass mClass2(); //Works. } --------------解决方案------------- 因为你刚刚声明的函数mClass2 0参数返回一个CMyClass . 这是一个有效的选择,因为有可能是,比如说,一个static CMyClass

  • (简单构造概念)为什么不富(); 做任何事情? 2012-02-03

    这是我遇到的麻烦一个简单的C ++构造函数的概念. 鉴于此代码段: #include <iostream> using namespace std; class Foo { public: Foo () { cout << "Foo()" << endl; } ~Foo () { cout << "~Foo()" << endl; } }; int main() { Foo f1; Foo f2(); }

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.285 (s). 10 q(s)