gpt4 book ai didi

c++ - 评估 cout 是否具有 constexpr 值?

转载 作者:太空狗 更新时间:2023-10-29 20:57:22 24 4
gpt4 key购买 nike

#include <iostream>

class dummy{
public:
constexpr
dummy(int one, int two) noexcept
:x(one),y(two){
}


constexpr int getX() noexcept{
return x;
}

constexpr int gety() noexcept{
return y;
}

constexpr int operator+(const dummy& asd){
return (this->getX() + asd.getX() + this->gety() + asd.gety()) ;
}

private:
int x;
int y;
};


int main(){
constexpr dummy d1(2,4);
constexpr dummy d2(2,4);

int rand = 10;
std::cout<<d1+d2<<std::endl;

return 0;
}

根据我的理解,如果函数声明为 constexpr,则可以在编译时对其求值。如果采取 constexpr值。

问题:

从这一行,std::cout<<d1+d2<<std::endl;d1 + d2是一个 constexpr 而 cout 运算符不是。是d1+d2将在编译时进行评估? cout 会发生什么周围?我很担心里面发生的事情。

最佳答案

constexpr 是在编译时计算的,而不是像您在问题中提到的那样在运行时计算。

因此在您的示例中,以下语句在编译时进行评估并初始化 d1 和 d2。

constexpr dummy d1(2,4);
constexpr dummy d2(2,4);

并且在编译时,会使用运算符重载函数的constexpr求和,对d1d2求和

所以在运行时下面的语句打印在编译时已经计算的表达式 d1+d2 的结果。

std::cout<<d1+d2<<std::endl;

关于c++ - 评估 cout 是否具有 constexpr 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30958880/

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