Thi*_*ruG 3 c++ optimization compilation g++ g++4.8
我有一个函数,true
如果元素从地图中删除,则返回false
.以下是我的函数定义:
template <class Key, class Value>
bool HashMap<Key, Value>::remove(Key k)
{
int result = map.erase(k);
return (result == 1);
}
Run Code Online (Sandbox Code Playgroud)
当我试图检查它是否有效时,我发现了非常奇怪的行为.
当我尝试使用以下语法打印结果时:
cout << boolalpha << students.remove("Sam") << " | " << students.remove("Sam") endl;
Run Code Online (Sandbox Code Playgroud)
这种印刷false | true
应该是true | false
按我的知识.然后我尝试使用另一种方法打印它:
bool b1 = students.remove("Sam");
bool b2 = students.remove("Sam");
cout << boolalpha << b1 << " | " << b2 << endl;
Run Code Online (Sandbox Code Playgroud)
这打印出了预期的结果 - > true | false
.我想这是编译器优化代码的一个技巧.但猜测总是不对的吗?(我正在使用g++ 4.8.5
编译器)
谁能告诉我这里发生了什么?
函数调用期间的参数评估顺序未指定.这适用于std::cout
以及,因为std::cout << a << b;
是简单的速记符号
operator<<(operator<<(std::cout, a), b);
Run Code Online (Sandbox Code Playgroud)