WEB开发网
开发学院软件开发VC VC10中的C++0x特性 Part 2 (1):右值引用 阅读

VC10中的C++0x特性 Part 2 (1):右值引用

 2009-06-10 20:07:44 来源:WEB开发网   
核心提示: · const rvalue 引用( const Type&& ) 能够绑定到任何东西上,这些规则听起来可能有些神秘,VC10中的C++0x特性 Part 2 (1):右值引用(10),但是他们来源于两条简单的规则:· 遵守 const 正确性,所以你不能把非常

· const rvalue 引用( const Type&& ) 能够绑定到任何东西上。

这些规则听起来可能有些神秘,但是他们来源于两条简单的规则:

· 遵守 const 正确性,所以你不能把非常量引用绑定到常量上。

· 避免意外修改临时对象,所以你不能把非常量 lvalue 引用绑定到非常量 rvalue 上来。

如果你更喜欢阅读编译器错误信息,而不是阅读文字描述,下面是一个示例:

C:Temp>type initialization.cpp
#include <string>
using namespace std;

string modifiable_rvalue() {
    return "cute";
}

const string const_rvalue() {
    return "fluffy";
}

int main() {
    string modifiable_lvalue("kittens");
    const string const_lvalue("hungry hungry zombies");

    string& a = modifiable_lvalue;          // Line 16
    string& b = const_lvalue;               // Line 17 - ERROR
    string& c = modifiable_rvalue();        // Line 18 - ERROR
    string& d = const_rvalue();             // Line 19 - ERROR

    const string& e = modifiable_lvalue;    // Line 21
    const string& f = const_lvalue;         // Line 22
    const string& g = modifiable_rvalue();  // Line 23
    const string& h = const_rvalue();       // Line 24

    string&& i = modifiable_lvalue;         // Line 26
    string&& j = const_lvalue;              // Line 27 - ERROR
    string&& k = modifiable_rvalue();       // Line 28
    string&& l = const_rvalue();            // Line 29 - ERROR

    const string&& m = modifiable_lvalue;   // Line 31
    const string&& n = const_lvalue;        // Line 32
    const string&& o = modifiable_rvalue(); // Line 33
    const string&& p = const_rvalue();      // Line 34
}

C:Temp>cl /EHsc /nologo /W4 /WX initialization.cpp
initialization.cpp
initialization.cpp(17) : error C2440: 'initializing' : cannot convert from 'const std::string' to 'std::string &'
        Conversion loses qualifiers
initialization.cpp(18) : warning C4239: nonstandard extension used : 'initializing' : conversion from 'std::string' to 'std::string &'
        A non-const reference may only be bound to an lvalue
initialization.cpp(19) : error C2440: 'initializing' : cannot convert from 'const std::string' to 'std::string &'
        Conversion loses qualifiers
initialization.cpp(27) : error C2440: 'initializing' : cannot convert from 'const std::string' to 'std::string &&'
        Conversion loses qualifiers
initialization.cpp(29) : error C2440: 'initializing' : cannot convert from 'const std::string' to 'std::string &&'
        Conversion loses qualifiers

上一页  5 6 7 8 9 10 

Tags:VC 特性 Part

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接