2011-07-28 35 views
5
void test(int && val) 
{ 
    val=4; 
} 

void main() 
{ 
    test(1); 
    std::cin.ignore();  
} 

là một int được tạo ra khi test được gọi hoặc theo mặc định trong C++ literals là int loại?đen và rvalue tham khảo

+0

Đó có phải là 'kiểm tra (int & val)'? –

+0

Mã không biên dịch ... – Gob00st

+0

trong MSV10 ở chế độ gỡ lỗi ít nhất là biên dịch mã – Guillaume07

Trả lời

7

Lưu ý rằng mã của bạn sẽ biên dịch chỉ bằng trình biên dịch C++ 11.

Khi bạn vượt qua một nghĩa đen không thể thiếu, đó là theo mặc định của int loại, trừ khi bạn viết 1L, tạm thời đối tượng loại int được tạo ra đó là ràng buộc để các tham số của hàm. Nó giống như số trước tiên từ các lần khởi tạo sau:

int &&  x = 1; //ok. valid in C++11 only. 
int &  y = 1; //error, both in C++03, and C++11 
const int & z = 1; //ok, both in C++03, and C++11 
0

Một int có giá trị 1 được tạo khi kiểm tra được gọi. Literals được gõ theo hình thức của chúng. Ví dụ, 1 là một int, 1.0 là một đôi, "1" là một chuỗi.

+5

'" 1 "' là một 'char const [2]'. –

+1

Đó là một chuỗi. :-) –

+4

Điều đó rất gây hiểu nhầm. Loại '" 1 "' không phải là "chuỗi" và không có loại "chuỗi" cơ bản; nếu có, thì có lẽ '" 1 "' và '" 11 "' sẽ có cùng kiểu nhưng chúng không có. –

Các vấn đề liên quan