Tag: 评估顺序

方法链接中的C ++执行顺序

这个程序的输出: #include <iostream> class c1 { public: c1& meth1(int* ar) { std::cout << "method 1" << std::endl; *ar = 1; return *this; } void meth2(int ar) { std::cout << "method 2:"<< ar << std::endl; } }; int main() { c1 c; int nu = 0; c.meth1(&nu).meth2(nu); } 方法是: method 1 method 2:0 为什么在meth2()启动时nu不是1?

列表初始化中元素的评估顺序

在另一个话题中 ,@Dietmar给出了这个解决scheme: template <typename… T> std::tuple<T…> parse(std::istream& in) { return std::tuple<T…>{ T(in)… }; } 说明, 使用大括号初始化工作是因为大括号初始化符列表中的参数的评估 顺序是它们出现的顺序 。 (强调我的) C ++标准(n3485)的相关文本是, 在braced-init-list的初始化程序列表中,初始化程序子句(包括从程序包扩展(14.5.3)产生的任何子程序子句)按其出现的顺序进行评估。 也就是说,与给定初始化子句相关联的每个值计算和副作用在与初始值设定项列表的逗号分隔列表中的任何初始化子句相关联的每个值计算和副作用之前被sorting。 [注意:不pipe初始化的语义如何,这个评估顺序都是成立的。 例如,当初始化列表的元素被解释为构造函数调用的参数时,即使通常对调用的参数没有sorting约束,也适用。 – 注意] 所以我试图用下面的代码来testing它: template<int N> struct A { std::string data; A(std::istream & stream) { stream >> data; } friend std::ostream& operator<<(std::ostream & out, A<N> const & a) { return out […]

构造函数初始化列表中的执行顺序

构造函数初始化列表中的执行顺序是否可确定? 我知道,在一个class级的成员顺序是这些成员将被初始化的顺序,但如果我有这样的情景: class X() { X_Implementation* impl_; }; and then providing that allocator is available: X::X():impl_(Allocate(sizeof(X_Implementation)))//HERE I'M ALLOCATING <–1 ,impl_(Construct<X_Implementation>(impl_))//AND HERE I'M CONSTRUCTING <–2 { } 但为了这是可靠的,这个顺序必须是从左到右。 是否由std ::的伟大的书保证? 如果不是,我总是可以将第二行移入正文。

为什么“++ x ||” ++ y && ++ z“首先计算”++ x“,即使运算符”&&“的优先级高于”||“

为什么++x || ++y && ++z ++x || ++y && ++z首先计算++x ,即使运算符&&的优先级高于|| ?

在一个语句中输出多个post和pre增量

我是新来的C语言,所以plz sum1帮助我。 AC代码写入 int i=3; printf("%d",++i + ++i); Complier gvs O / P = 9。 怎么样? 提前感谢

对C ++中的variables进行多次预增量操作(C?)

为什么在C ++中编译? int phew = 53; ++++++++++phew ; 在C中相同的代码失败,为什么?

编译器和C ++中的评估顺序

好的,我知道标准规定C ++实现可以选择函数的哪个顺序参数进行评估,但是在实际上会影响程序的情况下,是否有实际的“利用”这个实现呢? 经典示例: int i = 0; foo(i++, i++); 注意:我不想找人来告诉我,评估顺序是不可靠的,我很清楚这一点。 我只关心编译器是否确实按照从左到右的顺序进行评估,因为我的猜测是如果他们做了很多写得不好的代码就会中断(正确的,但他们仍然可能会抱怨)。