gpt4 book ai didi

c++ - 以动态方式进行常量初始化

转载 作者:行者123 更新时间:2023-11-30 01:52:30 25 4
gpt4 key购买 nike

我认为声明为 const 的变量仅适用于静态初始化。我写了以下内容:

#include <cstdlib> 
#include <iostream>

struct A{ };

const A *i = new A();

int main(){ }

而且效果很好。

Ideone

但我预计该代码无效,因为 new A() 是一个 new-expression 而它不是一个 constant expression .实际上: 秒。 5.19/2 N3797:

A conditional-expression e is a core constant expression unless the evaluation of e, following the rules of the abstract machine (1.9), would evaluate one of the following expressions:
[...]
— a new-expression (5.3.4);

[...]

A constant expression is either a glvalue core constant expression whose value refers to an object with static storage duration or to a function,

最佳答案

首先,您的意思可能是 A * const i(指向 A 的常量指针)而不是 const A * i(非- 指向 const A 的常量指针。

尽管如此,即使进行了这种修改,用一个不是常量表达式的值(例如在运行时计算的值)初始化一个 const 变量也是完全合法的。但是,不可能在常量表达式中使用这样的变量。如果您尝试这样做,常量表达式定义将启动并且您会收到错误。

关于c++ - 以动态方式进行常量初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24489060/

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