输出表达式中的顺序点问题

来源:互联网 发布:淘宝内裤 怎么卷的 编辑:程序博客网 时间:2024/05/17 06:19
#include"iostream"

using namespace std;

//返回c第一次出现的位置
//引用形参负责统计c出现的次数
string::size_type foo(const string &s, char c,
                      string::size_type &occurs){
    auto ret =s.size();
    occurs =0;
    for(decltype(ret) i = 0; i != s.size(); ++i){
       if (s[i] == c) {
           if (ret == s.size()){
               ret = i;
           }
           ++occurs;
       }
    }
    returnret;
}

//C++中, 各个子表达式中, 运行顺序是不确定的
//因此当需要明确顺序的时候, 不要放在同一行
//属于"顺序点"的知识点,参照http://www.cnblogs.com/dolphin0520/archive/2011/04/20/2022330.html
int main(){
    string str ={"Hello World!"};
   string::size_type num;
   //因为后面的num首先进的stack,然后再被foo()修改
   //所以cout的是foo()修改前的num,而不是修改后的num
    //如果采取注释的形式,num的输出结果就不是2
   //而是初始化时随机分配的值
    //cout<< foo(str, 'o', num) << endl
   //     << num << endl;
    cout<< foo(str, 'o', num) << endl;
    cout<<num << endl;
    return0;
}

0 0
原创粉丝点击