language-lawyer相关内容
..
..
在 C 中,register 存储限定符是一个提示,表明应尽可能快地访问此类标识符(例如,存储在 CPU 寄存器中). §6.7.1具有存储类说明符寄存器的对象标识符声明表明对对象的访问尽可能快.此类建议的有效程度由实施定义. 和 §6.7.3 限制限定符的预期用途(如寄存器存储class) 是为了促进优化 [...] 但是,我听说过实现(特别是在嵌入式系统中发现),其中
..
使用不匹配的 std::allocator 特化(当然,除了 void 的特化)作为 STL 容器的模板参数(不是全部)在技术上是否有效,但在下面列举加上 unordered_(multi)map/set)?以下代码编译正常. #include #include #include #include #include 主函数(){str
..
这个代码是 UB 吗? 结构 A{无效非常量(){}};常量 A&a = A{};const_cast(a).nonconst(); 换句话说,(临时)对象最初是const吗?我浏览了标准,但找不到答案,因此希望能引用相关部分的内容. 编辑: 对于那些说 A{} 不是 const 的人,那么你能做到 A{}.nonconst() ? 解决方案 引用a的初始化由[dcl.i
..
我有一个声明 const 和非常量成员函数的抽象类.为了便于讨论,假设它看起来像这样: 类记录接口{上市:虚拟 ~record_interface() = 默认值;虚拟 void set_foo(BoundedFloat) = 0;虚拟 BoundedFloat get_foo() const = 0;}; 这用作记录的高级表示,当保存到磁盘并通过线路传输时,该记录具有不同的表示.所以大多数实
..
考虑以下示例: #include int main() {常量 int m = 42;[] {米;}();//行常量 int n = std::rand();[] { n;}();//错误:'n' 未被捕获} 为什么我需要在第二个 lambda 中捕获 n 而不是在第一个 lambda 中捕获 m?我检查了 C++14 标准中的第 5.1.2 节(Lambda 表达式),但找
..
假设我有这个 C 函数(以及头文件中的相应原型) void clearstring(const char *data) {字符 *dst = (字符 *) 数据;*dst = 0;} 上述代码中是否存在未定义行为,将 const 丢弃,还是只是一种非常糟糕的编程习惯? 假设没有使用 const 限定的对象 字符名[] = "pmg";清除字符串(名称); 解决方案 尝试写入 *ds
..
..
g++ --version 产生: g++.exe (x86_64-posix-seh-rev0, 由 MinGW-W64 项目构建) 4.9.1版权所有 (C) 2014 Free Software Foundation, Inc.这是免费软件;查看复制条件的来源.没有保修单;甚至不考虑适销性或特定用途的适用性. 程序: #include #include
..
如果某个函数 f 带有参数 p_1, ..., p_n 类型为 T_1, ..., T_n 分别用参数 a_1, ..., a_n 调用,其主体以什么顺序抛出异常、完成或返回论据被破坏了吗?为什么?如果可能,请提供对标准的参考. 编辑:我实际上想问一下函数“参数",但作为 T.C.Columbo 设法消除了我的困惑,我将把这个问题留给论点,并问 一个关于参数的新问题.请参阅对此问题的评论以了
..
来自 python 维基 多元素元组 在 Python 中,多元素元组如下所示: 1,2,3 ... 但同样,定义元组的是逗号,而不是括号. 哦,真的吗?! 那为什么: >>>tuple(((((((1, 2, 3)))))) # 创建一个有效的元组# (1, 2, 3)>>>tuple(1, 2, 3, ) # 但不是这里# TypeError: tu
..
对于元组的伪成员的布局和内存对齐是否有任何正式的规范? 有没有办法修改元组中类型的内存对齐方式?是否受#pragma pack() 指令影响? 例如: typedef std::tuple;我的元组; 是否有任何规范说明这将在内存中与以下内容相同: #pragma pack()//默认打包结构我的结构{uint8_t 优先;uint32_t 秒;} 抱歉,如果这是一个愚蠢的问题
..
#include void IsTrue(const bool value) {如果(值){std::cout
..
我戴上了它&也试图在 SO 上找到类似的问题,但没有发现任何有用的东西.所以,在这里发布我的问题. 考虑这个程序: #include void foo(const std::string &) {}主函数(){富(假);} [警告] 将 'false' 转换为 'std::basic_string::basic_string(const _CharT*, const
..
C++ 规范是否定义: 布尔参数是否存在“小于"运算符,如果存在, 4 个参数排列的结果? 换句话说,规范定义了以下操作的结果吗? 假
..
我试图编写一些宏以安全地使用 _Bool,然后对我的代码进行压力测试.为了邪恶的测试目的,我想出了这个肮脏的黑客: _Bool b=0;*(无符号字符*)&b = 42; 鉴于 _Bool 在实现 sizeof(_Bool)==1) 上是 1 个字节,我看不出这种 hack 是如何违反 C 标准的.这不应该是严格的别名违规. 然而,当通过各种编译器运行这个程序时,我遇到了问题: #in
..
..
我有以下成员函数: Person ClassB::DoSomethingAndReturnPerson(){RAIIMutex myLock(&m_mutex);返回 m_person;} RAIIMutex 是一个辅助类,它接收互斥体并将其锁定在构造函数中并在析构函数中释放. m_person 属于 Person 类型(尺寸非常小).其他线程中的其他函数可能会更改此成员. 我想按
..
以下代码被 Clang 和 GCC(主干版本): #include 结构基础{Base() = 默认值;Base(Base const&) = 删除;Base(Base&&) = 默认值;};结构派生:基础{派生()=默认;Derived(Derived const&) = 删除;派生(派生&&)=默认;};自动 foo()->根据{导出d;返回 d;//这里有错误} 导致以下
..