草庐IT

constexpr-ness

全部标签

c++ - 在 C++11 中,sqrt 定义为 constexpr?

在C++11中,std::sqrt被定义为constexpr,即它可以合法地从其他constexpr函数中使用,或者在像数组大小或模板参数这样的编译时上下文?g++似乎允许它(使用-std=c++0x),但鉴于c++0x/c++11支持仍然不完整,我不确定我是否可以将其视为权威.我似乎无法在Internet上找到任何东西这一事实让我不确定。似乎这应该是使用Google可以轻松找到的内容,但我已经尝试过(现在已经40分钟......)但找不到任何东西。我可以找到一些将constexpr添加到标准库的各个部分的建议(例如thisone),但没有关于sqrt或其他数学函数的内容。

c++ - GCC 接受 `constexpr struct {} s;` 但 Clang 拒绝它。谁是正确的?

以下代码可以使用GCC正常编译:constexprstruct{}s;但Clang拒绝它并出现以下错误:error:defaultinitializationofanobjectofconsttype'conststruct(anonymousstructat…)'withoutauser-provideddefaultconstructor我已经测试了我在https://gcc.godbolt.org/找到的所有GCC和Clang版本。.GCC的每个版本都接受该代码,而Clang的每个版本都拒绝它。不知道在这种情况下哪个编译器是正确的?标准对此有何规定?

c++ - GCC 接受 `constexpr struct {} s;` 但 Clang 拒绝它。谁是正确的?

以下代码可以使用GCC正常编译:constexprstruct{}s;但Clang拒绝它并出现以下错误:error:defaultinitializationofanobjectofconsttype'conststruct(anonymousstructat…)'withoutauser-provideddefaultconstructor我已经测试了我在https://gcc.godbolt.org/找到的所有GCC和Clang版本。.GCC的每个版本都接受该代码,而Clang的每个版本都拒绝它。不知道在这种情况下哪个编译器是正确的?标准对此有何规定?

c++ - "constexpr if"vs "if"优化 - 为什么需要 "constexpr"?

C++1z将引入“constexprif”——一个if将根据条件删除其中一个分支。似乎合理且有用。但是,是不是不能没有constexpr关键字呢?我认为在编译期间,编译器应该知道在编译期间是否知道条件。如果是,即使是最基本的优化级别也应该删除不必要的分支。例如(见神bolt:https://godbolt.org/g/IpY5y5):inttest(){constboolcondition=true;if(condition){return0;}else{//optimizedoutevenwithout"constexprif"return1;}}Godboltexplorer显示,

c++ - "constexpr if"vs "if"优化 - 为什么需要 "constexpr"?

C++1z将引入“constexprif”——一个if将根据条件删除其中一个分支。似乎合理且有用。但是,是不是不能没有constexpr关键字呢?我认为在编译期间,编译器应该知道在编译期间是否知道条件。如果是,即使是最基本的优化级别也应该删除不必要的分支。例如(见神bolt:https://godbolt.org/g/IpY5y5):inttest(){constboolcondition=true;if(condition){return0;}else{//optimizedoutevenwithout"constexprif"return1;}}Godboltexplorer显示,

c++ - 一个类不能有自己的静态 constexpr 成员实例吗?

这段代码给了我incompletetype错误。问题是什么?一个类是否不允许有自己的静态成员实例?有没有办法达到同样的效果?structSize{constunsignedintwidth;constunsignedintheight;staticconstexprSizebig={480,240};staticconstexprSizesmall={210,170};private:Size()=default;}; 最佳答案 一个类被允许有一个相同类型的静态成员。但是,一个类在其定义结束之前是不完整的,并且不能定义具有不完整类型

c++ - 一个类不能有自己的静态 constexpr 成员实例吗?

这段代码给了我incompletetype错误。问题是什么?一个类是否不允许有自己的静态成员实例?有没有办法达到同样的效果?structSize{constunsignedintwidth;constunsignedintheight;staticconstexprSizebig={480,240};staticconstexprSizesmall={210,170};private:Size()=default;}; 最佳答案 一个类被允许有一个相同类型的静态成员。但是,一个类在其定义结束之前是不完整的,并且不能定义具有不完整类型

c++ - C++ 17中的静态constexpr和静态内联变量有什么区别?

在C++17中,我们得到内联变量。它们的用途之一是在类中定义常量字段。那么这两个常量定义有什么区别:classMyClass{staticconstexprintmyFirstVar=10;staticconstinlineintmySecondVar=100;};当然constexpr使myFirstVar隐式内联。这里有什么更好的选择,使用constexpr或inline?注意:当你不需要constness时,inline会更容易。使用constexpr你没有那个选择。 最佳答案 您不必在声明时为mySecondVar指定初始化

c++ - C++ 17中的静态constexpr和静态内联变量有什么区别?

在C++17中,我们得到内联变量。它们的用途之一是在类中定义常量字段。那么这两个常量定义有什么区别:classMyClass{staticconstexprintmyFirstVar=10;staticconstinlineintmySecondVar=100;};当然constexpr使myFirstVar隐式内联。这里有什么更好的选择,使用constexpr或inline?注意:当你不需要constness时,inline会更容易。使用constexpr你没有那个选择。 最佳答案 您不必在声明时为mySecondVar指定初始化

c++ - lambda 函数/表达式是否支持 constexpr?

structTest{staticconstintvalue=[]()->int{return0;}();};使用gcc-4.6我得到类似error:functionneedtobeconstexpr的东西。我尝试了多种组合将constexpr放在不同的地方,但没有运气。constexpr是否也支持lambda函数(无论是否指定了return类型)?正确的语法是什么?任何可能的解决方法? 最佳答案 更新:从C++17开始,常量表达式中允许使用lambda。根据[expr.const]/(2.6),目前(C++14)不允许在常量表达式