我试图初始化一个< code>constexpr引用,但没有成功。我试过了
#include <iostream>
constexpr int& f(int& x) // can define functions returning constexpr references
{
return x;
}
int main()
{
constexpr int x{20};
constexpr const int& z = x; // error here
}
但我收到了编译时错误
错误:constexpr变量“z”必须由常量表达式初始化
删除< code>const会导致
错误:将对类型“int”的引用绑定到类型“const int”的值会删除限定符
尽管我感觉< code>constexpr自动暗示变量声明的< code>const。
所以我的问题是:
PS:我看到了一些与我相关的问题,例如哪些值可以分配给“constexpr”引用,但我认为他们没有回答我的问题。
正如T.C.所说,初始值设定项需要是一个具有静态存储持续时间的对象。
N4140/§5.19/4 常量表达式是 glvalue 核心常量表达式,其值是指具有静态存储持续时间的对象 [...]
N4140/§7.1.5/9在对象声明中使用的const
说明符将对象声明为const。这样的对象应具有文字类型并应进行初始化。[…]否则,或者如果在引用声明中使用了constexr
说明符,则出现在其初始化器中的每个完整表达式都应是常量表达式。
N3337中的措辞不同。
所以问题是constexpr引用需要绑定到一个具有静态存储持续时间的对象,这在C 11标准草案:n 3337 section < code > 5.19 [expr . const](强调我的)中有所涉及:
引用常量表达式是一个左值核心常量表达式,用于指定具有静态存储持续时间或函数的对象
C 14标准草案:N3936更改了措辞:
常量表达式要么是 glvalue 核心常量表达式,其值是指具有静态存储持续时间的对象或函数,要么是 prvalue 核心常量表达式,其值是一个对象,其中,对于该对象及其子对象:
因此,像这样更改< code>x的声明是可行的:
constexpr static int x{20};
它们保证在程序启动之前初始化,而const的引用可以在程序开始运行之后的动态初始化期间初始化。
constexpr
引用必须绑定到全局变量,而不是局部变量(或者更正式地说,它必须绑定到具有静态存储持续时间的东西)。
引用在概念上等同于获取变量的地址,并且局部变量的地址不是常量(即使在main
中也只能调用一次,因此其局部变量只能初始化一次)。
当云联壹云的First Node部署成功后,用户可根据使用场景快速引导配置云联壹云平台。 设置管理员用户 当First Node节点部署完成后,用户在浏览器中输入First Node节点的IP地址,如提示“您的连接不是私密连接”,请单击 “高级” 按钮,并单击“继续前往x.x.x.x(不安全)”,打开云管平台控制台。 在管理员注册页面,设置管理员账号、密码,单击 “注册” 按钮,创建管理员用户。
在Java中,可以用null初始化引用变量,例如,字符串变量可以像下面这样初始化:
我有一个非常基本的问题。我需要如何为ArrayList键入parrameters才能在BlueJ中使用代码?我有一个方法如下。
问题内容: 错误 码 问题答案: 您需要初始化 ,如错误消息所示,您仅对其进行了声明。 您需要初始化数组,以便可以 在 开始设置索引 之前 为元素分配正确的内存存储。 __ 如果 仅 声明数组(如您所做的那样),则不会为元素分配内存,而只会分配给的引用句柄,并且尝试在任何索引处初始化变量时都会引发错误。 另外,您也可以在花括号内初始化数组,这样, 相当于
我正在尝试初始化,但它不允许我。我已经能够初始化。
我有个问题. 如何使用我在前面的 StackOverflow 问题中找到的方法初始化 JavaFX 工具包?可以在此处找到该主题:JavaFX 2.1:工具包未初始化 我正在尝试从该线程使用类似于此解决方案的解决方案: 问题:非平凡的Swing GUI应用程序需要运行JavaFX组件。应用程序的启动过程在启动依赖服务层后初始化GUI。 解决方案子类JavaFX应用程序类,并在单独的线程中运行,例如