代码之家  ›  专栏  ›  技术社区  ›  Prabhu

g++编译器中带引用参数的构造函数

c++
  •  0
  • Prabhu  · 技术社区  · 14 年前

    请看下面的代码

    头文件:

    class CxUser
    { 
    public:
        CxUser(string& guid) {} 
    };
    

    CxUser(string("xxx-xxx-x-xxxx")) . 但此语句无法在g++中编译,出现错误“ 而它是用VC++编译的。令人惊讶的是,下面的代码实例化了这个类。

    string guid("xxx-x-xxxx-xxx-xx"); CxUser user(guid);
    

    任何帮助都将不胜感激。。。。

    3 回复  |  直到 14 年前
        1
  •  12
  •   Evan Teran    14 年前

    您需要:

    class CxUser{ public: CxUser(const string& guid) {} }
    

    当你说:

    CxUser c( "foobar" );   // or whatever
    

    从characterv数组创建临时字符串对象。在C++中,不能将非const引用绑定到临时变量。

        2
  •  2
  •   James Curran    14 年前

    当您使用一个非常量引用作为参数时,意味着您将要更改该引用,它是不存在的,因此您不能更改它。当您使用const引用时,编译器知道您不能更改它,因此它可以做一些魔术,使匿名临时引用参数工作。

        3
  •  1
  •   graham.reeds    14 年前

    我想如果你让构造器接受 const std::string& CxUser(string("xxx-xxx-x-xxxx")) 应该有用。