Tôi nghi ngờ chuỗi các hàm sau sẽ dẫn đến chuỗi không xác định theo tiêu chuẩn C++ (giả sử C++ 0x). Chỉ muốn có một xác nhận và nếu bất cứ ai có thể cung cấp một lời giải thích, tôi sẽ đánh giá cao nó.Mã này có được xác định rõ không?
#include <iostream>
struct TFoo
{
TFoo(int)
{
std::cout<<"TFoo"<<std::endl;
};
TFoo foobar1(int)
{
std::cout<<"foobar1"<<std::endl;
return *this;
};
TFoo foobar2(int)
{
std::cout<<"foobar2"<<std::endl;
return *this;
};
static int bar1()
{
std::cout<<"bar1"<<std::endl;
return 0;
};
static int bar2()
{
std::cout<<"bar2"<<std::endl;
return 0;
};
static int bar3()
{
std::cout<<"bar3"<<std::endl;
return 0;
}
};
int main(int argc, char *argv[])
{
// is the sequence well defined for bar1, bar2 and bar3?
TFoo(TFoo::bar1()).foobar1(TFoo::bar2()).foobar2(TFoo::bar3());
}
* chỉnh sửa: bị gỡ bỏ __fastcall specifier cho các chức năng (không cần thiết/liên quan đến câu hỏi).
Tôi không có nghĩa là để đi qua như nitpicky, nhưng về mặt kỹ thuật nói '__fastcall' không phải là một phần của spec C++, vì vậy tôi không nghĩ rằng spec có bất cứ điều gì để nói về điều này. Có lý do gì bạn đưa vào đây không? Hay là câu hỏi cụ thể về sự tương tác của '__fastcall' với các điểm chuỗi? – templatetypedef