【发布时间】:2021-04-08 13:01:26
【问题描述】:
根据 6.6.10
10 一个实现可以接受其他形式的常量表达式。
实现可以考虑将const(或者甚至不考虑const,因为答案都集中在它上面——但这不是问题的核心)变量作为常量表达式。
我的逻辑正确吗?如果不是为什么?
一些例子:
//file scope
int a = 5;
const int b = 10;
int c[a];
int d[b];
IMO 均符合要求。它们可以评估编译时间。该值是已知的,静态数组的大小已知编译时间。
volatile int x = 5; //cannot be considered as known compile time. ????
void foo(int a)
{
static int b[a];
}
在此示例中,a 无法计算编译时间 - 因此它不能用作常量表达式
【问题讨论】:
-
@ryyker:问题不在于使用
const变量是否一定是C 中的常量,而是C 实现可能 是否接受const变量作为给定问题中引用的许可证的常量。 -
@ryyker 它没有回答我的问题,而是离题
-
stackoverflow.com/questions/54135942/… 那里的答案会回答你的问题吗? :p 结论是“GCC 显然实现了一个扩展”,这意味着:
Is my logic correct?是的,甚至存在这样的实现。 -
@ryyker 如果很明显,我不会在这里问这个问题。您的引文(或更确切地说是答案之一)是 CE 的一种可能形式。但根据第 10 点,它不限于此,因为实施可能具有其他形式。这个答案没有回答我的问题。
-
@ryyker:关于“仅限于表示只读,不符合将其视为“其他形式”之一的资格”:这是一个不合逻辑的。某些东西是只读的这一事实并不意味着它被取消成为其他形式的资格。显然
const变量不在必须支持的核心常量表达式集中,所以它是另一种形式。
标签: c constants language-lawyer constant-expression