-1
我在閱讀The C++ Programming Language並試圖瞭解Constants
。書上說,這是有效的:如何正確地聲明一個常量表達式?
const int dmv = 17; // dmv is a named constant
constexpr double max1 = 1.4∗square(dmv); // OK if square(17) is a constant expression
但是當我做:
constexpr double square(double x)
{
return x * x;
}
int main()
{
const double x = 40.0;
constexpr double result = 1.2 + square(x);
}
我有兩個錯誤:
- 表達必須有一個恆定的值(在
x
,如果我用的值代替它,如square(12.4)
錯誤消失) - 函數調用必須在一個常量表達式恆定值(以平方方法的調用。)
什麼是這些錯誤的原因?我錯過了什麼?
我想這before.Still我得到的第二個錯誤:'函數調用必須有一個恆定expression' –
一個恆定值@ Selman22不幸的是,編譯器有漏洞和缺失的功能。在你原來的代碼中,你得到的錯誤是正確的。在這段代碼中,你得到的錯誤是不正確的,這段代碼是有效的。你對icepack的回答評論說你使用的是VS2013,但[VS2013並沒有聲稱正確支持'constexpr'](http://msdn.microsoft.com/en-us/library/hh567368.aspx)。 – hvd
@ Selman22根據[本頁](http://blogs.msdn.com/b/vcblog/archive/2013/12/02/c-11-),最新的CTP部分實現了'constexpr', 14芯的語言的功能,在-VS-2013和 - 所述-NOV-2013-ctp.aspx)。你可以看看你是否在這方面取得更好的結果。 – hvd