【发布时间】:2011-10-04 23:14:57
【问题描述】:
我怀疑根据 C++ 标准(假设 C++0x),以下函数链接会导致未指定的序列。只是想要一个确认,如果有人可以提供解释,我将不胜感激。
#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());
}
* 编辑:删除函数的 __fastcall 说明符(不需要/与问题相关)。
【问题讨论】:
-
我并不是要给人吹毛求疵,但从技术上讲,
__fastcall不是 C++ 规范的一部分,所以我认为规范对此没有什么要说的。你有什么理由把它包括在这里吗?或者这个问题具体是关于__fastcall与序列点的交互?
标签: c++ c++11 sequence-points operator-precedence