gpt4 book ai didi

c++ - 为什么 b.isEm() 在不同的行打印不同的东西?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:12:32 25 4
gpt4 key购买 nike

为什么 b.isEm() 在上次调用 b.isEm() 后我没有做任何更改,却在不同的行打印不同的内容?

#include <iostream>
#include <string>

template <class T>
class Box
{
bool m_i;
T m_c;

public:
bool isEm() const;
void put(const T& c);
T get();
};


template <class T>
bool Box<T>::isEm() const
{
return m_i;
}

template <class T>
void Box<T>::put(const T& c)
{
m_i = false;
m_c = c;
}

template <class T>
T Box<T>::get()
{
m_i = true;
return T();
}


int main()
{
Box<int> b;
b.put(10);

std::cout << b.get() << " " << b.isEm() << std::endl;
std::cout << b.isEm() << std::endl;
}

最佳答案

order of evaluation C++ 中函数参数的数目是未指定的。

std::cout << b.get() << " " << b.isEm() << std::endl; 
std::cout << b.isEm() << std::endl;

b.get()有副作用,建议大家单独调用...

auto g = b.get();
std::cout << g << " " << b.isEm() << std::endl;
std::cout << b.isEm() << std::endl;

注意:std::cout << .... << ... <<是带有参数 ... 的函数调用

关于c++ - 为什么 b.isEm() 在不同的行打印不同的东西?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38740338/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com