- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
也许我遗漏了什么,但 IMO iso §12.1 p5 中的第 4 个要点是错误的:
X is a union and all of its variant members are of const-qualified type (or array thereof),
仅仅是因为在一个 union 中不能有超过一个 const 合格成员。
从 §9.1 我们有:
In a union, at most one of the non-static data members can be active at any time, that is, the value of at most one of the non-static data members can be stored in a union at any time.
编辑:
此代码段未在 Ideone 中编译
union U
{
const int i;
const char c;
float x;
U(int j, char a) : i(j), c(a) {}
};
编辑1:
以下代码在 Coliru 和 Ideone 中编译.但是根据 12.1 p5 第 4 个要点,它不应该作为默认构造函数删除。
#include <iostream>
union T
{
const int y;
const int x;
const float z;
T(int j) : y(j) {}
T() = default;
};
int main()
{
T t;
}
编辑2:
我也不明白为什么标准不允许这种代码(参见 9.5 p2 中的注释)
struct S
{
int i;
S() : i(1) {}
};
union T
{
S s;
char c;
};
int main()
{
T t;
}
但允许这样做。有什么区别?
struct S
{
int i;
S() : i(1) {}
};
union T
{
S s;
char c;
T() {}
};
int main()
{
T t;
}
最佳答案
§12.1/5 完全有效:它只是说如果所有成员都是 const
,则不可能生成默认构造函数,因为那样就没有成员可以保留未初始化。
§9.1 没有提到限制const
ness。这是一段关于访问 union 成员的值的限制,这是完全不相关的。
这里只有一个成员“活跃”意味着只能以任意顺序写入和读取一个成员。一旦您写信给另一个成员,您就只能从那个成员那里读到。
这是一个示例,以及一个演示示例的 union
声明是有效的†:
union T
{
int x;
const int y;
const int z;
};
int main()
{
T a{4};
a.x = 5;
a.y = 6;
a.z = 7;
}
// $ g++-4.8 -std=c++11 -Wall -pedantic -pthread main.cpp && ./a.out
// main.cpp: In function 'int main()':
// main.cpp:14:9: error: assignment of read-only member 'T::y'
// a.y = 6;
// ^
// main.cpp:15:9: error: assignment of read-only member 'T::z'
// a.z = 7;
// ^
† 因为编译成功直到尝试分配 T::y
。
编辑:您现在粘贴的代码,以及您提示的错误消息,与 const
无关>.
initializations for multiple members of ‘U’
那是你的问题。就在那儿这么说!尝试初始化 union 的两个成员是没有意义的,因为在任何给定时间只有一个可能是“事件的”:
[C++11: 12.6.2/8]:
[..] An attempt to initialize more than one non-static data member of a union renders the program ill-formed. [..]
但这与const
ness 完全无关。
关于c++ - iso 12.1 p5 中的第 4 个要点对我来说没有意义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20806185/
我正在使用 Gunicorn 为 Django 应用程序提供服务,它工作正常,直到我将其超时时间从 30 秒更改为 900000 秒,我不得不这样做,因为我有一个用例需要上传和处理一个巨大的文件(过程
我有一个带有非常基本的管道的Jenkinsfile,它可以旋转docker容器: pipeline { agent { dockerfile { args '-u root' } } stag
在学习 MEAN 堆栈的过程中,我遇到了一个问题。每当我尝试使用 Passport 验证方法时,它都不会返回任何响应。我总是收到“localhost没有发送任何数据。ERR_EMPTY_RESPONS
在当今的大多数企业堆栈中,数据库是我们存储所有秘密的地方。它是安全屋,是待命室,也是用于存储可能非常私密或极具价值的物品的集散地。对于依赖它的数据库管理员、程序员和DevOps团队来说,保护它免受所
是否可以创建像图片上那样的边框?只需使用 css 边框属性。最终结果将是没 Angular 盒子。我不想添加额外的 html 元素。我只想为每个 li 元素添加 css 边框信息。 假设这是一个 ul
我是一名优秀的程序员,十分优秀!