43得票5回答
在常数表达式中除以零

如果在常量表达式中除以零,我的玩具编译器会崩溃:int x = 1 / 0; 这种行为是否符合 C 和/或 C++ 标准?

41得票1回答
在常量表达式中调用的`static constexpr`函数是...一个错误吗?

我有以下的代码:class MyClass { static constexpr bool foo() { return true; } void bar() noexcept(foo()) { } }; 我原以为由于foo()是一个static constexpr函数,并且它...

33得票3回答
为什么常量指针不能是常量表达式?

以下程序可以编译通过:template <const int * P> class Test{}; extern const int var = 42; //extern needed to force external linkage int main() { Tes...

32得票3回答
变量a被赋值为1,is a || 1常量表达式吗?

N4527 5.20[expr.const]p5 常量表达式是指一个值为glvalue类型的核心常量表达式,该值引用的实体是常量表达式(如下所定义)的允许结果之一,或者是一个值为prvalue类型的核心常量表达式,其值是一种对象且满足以下条件: — 每个非静态数据成员都引用一...

26得票3回答
为什么创建静态常量std :: string会导致异常?

我有一些字符串常量,在我的应用程序中多次使用: namespace Common{ static const std::string mystring = "IamAwesum"; } 当发布一个关于其他问题的问题(未在编译期间包含在目标中的.h文件会发生什么?),另一个用户发表...

24得票3回答
将函数参数用作常量表达式的一部分 - gcc vs clang

请看下面的代码片段: template <bool> struct B { }; template <typename T> constexpr bool pred(T t) { return true; } template <typename T&gt...

24得票2回答
C++11中常量表达式中允许使用逗号运算符吗?

在回答有关C++11的此问题时,我意识到在C++03(以及C中),逗号运算符在常量表达式中明确禁止使用。 C++03标准中有关常量表达式的第5.19/1段落如下: [...]特别是,在sizeof表达式中除外,不得使用函数、类对象、指针或引用,并且不得使用赋值、增量、减量、函数调用或逗号运...

23得票3回答
“const”限定符何时保证变量为常量表达式?

据我所知,C++中的const限定符基本上声明内部链接,有时它允许将变量用作常量表达式,以便将其放置在数组边界、switch case等位置。 但显然并非总是如此,我对const和constexpr的正确用法一无所知。 具体来说,当使用const限定的数组元素用于数组边界时,它不被视为常量...

21得票1回答
为什么C++11中移除了常量表达式中逗号运算符的限制?

最近当回答一个问题时,我意识到在C++11中,只要表达式被()包围,逗号运算符就可以在常量表达式中使用,例如: int a[ (1, 2) ] ; Pre C++11禁止在常量表达式中使用逗号运算符,来自于预C++11标准的第5.19节常量表达式,其中写道(重点在于): [...]特...

20得票3回答
三目运算符中的指针转换问题

我知道三元运算符有一些令人惊讶的限制,但是我有点困惑,为什么这段代码对我来说不能通过编译:void foo(bool b) { int* ptr = ((b) ? NULL : NULL); } 显然这只是展示问题所需的最小信息。错误信息如下:[BCC32 Error] Unit11...