Hai dòng sau có thể được cô đặc thành một không?Biến có thể được khởi tạo với một dòng istream trên cùng một dòng được khai báo không?
int foo;
std::cin >> foo;
Hai dòng sau có thể được cô đặc thành một không?Biến có thể được khởi tạo với một dòng istream trên cùng một dòng được khai báo không?
int foo;
std::cin >> foo;
Câu trả lời thông minh-mông:
int old; std::cin >> old;
Câu trả lời khủng khiếp:
int old, dummy = (std::cin >> old, 0);
Câu trả lời đúng: old
phải được định nghĩa với một tuyên bố trước khi nó có thể được thông qua đến operator>>
làm đối số. Cách duy nhất để nhận cuộc gọi hàm trong khai báo biến là đặt nó trong biểu thức khởi tạo như trên. Cách chấp nhận để khai báo một biến và đọc đầu vào nó là như bạn đã viết:
int old;
std::cin >> old;
Đẹp và thích hợp. +1. –
Tại sao một biến khác? – 6502
câu trả lời thông minh-ass, lol. cảm ơn, đó là thông tin –
Bạn có thể ... với
int old = (std::cin >> old, old);
nhưng bạn thực sự không nên làm điều này
Ah, điểm tốt! Tài giỏi. –
@ 6502 lý do tại sao chúng ta không nên làm những gì bạn nói? – Mohammasd
Sử dụng một chức năng:
int inputdata()
{
int data;
std::cin >> data;
return data;
}
Sau đó:
int a=inputdata();
Đối với dữ liệu riêng của mình:
int inputdata()
{
static bool isDataDeclared=false;
if (isDataDeclared==true)
{
goto read_data;
}
else
{
isDataDeclared=true;
}
static int data=inputdata();
return data;
read_data:
std::cin >> data;
return data;
}
Nhưng bây giờ làm điều đó để 'dữ liệu' quá! –
@JosephMansfield Tôi nghĩ, trong câu hỏi ban đầu, đôi khi bạn chỉ muốn khởi tạo biến cho giá trị người dùng-đầu vào thay vì mặc định hệ thống, giá trị không xác định hoặc giá trị của riêng bạn mà bạn từ chối xác định. Vì mục đích của 'dữ liệu', tôi cảm thấy không cần phải" làm như vậy "với nó, vì nó sẽ chỉ tồn tại trong phạm vi địa phương của hàm cho tất cả ba dòng thời gian thực hiện, và có lẽ nếu hàm được đánh dấu như nội tuyến nó thậm chí có thể được tối ưu hóa hoàn toàn đi. 'int old = inputdata();' có thể kết thúc tương đương với 'int old; std :: cin >> cũ, 'nếu điều đó xảy ra. – thegreatjedi
Có lẽ không cho int
, nhưng với nhiều loại riêng bạn:
class MyType {
int value;
public:
MyType(istream& is) {
is >> *this;
}
friend istream& operator>>(istream& is, MyType& object);
};
istream& operator>>(istream& is, MyType& object) {
return is >> object.value;
}
Sau đó, bạn có thể tạo kiểu với istream
truyền cho constructor:
int main() {
istringstream iss("42");
MyType object(iss);
}
Có thể 'int cũ; std :: cin >> cũ; '? –
Không, vẫn là một bản sao. http://stackoverflow.com/questions/12279601/are-there-any-tricks-to-use-stdcin-to-initialize-a-const-variable – djechlin
Tôi đã đặt tên lại câu hỏi cũ và đáng xấu hổ này vì nó đã nhận được một rất nhiều sự chú ý gần đây. –