language-lawyer

    5热度

    3回答

    说我有一个2字段的结构和C的实现,我在这些字段之间也有一些填充。 如果我创建了结构的两个变量并将一个赋值给另一个,那么填充是否会保证相等?我知道对于大多数编译器来说它会是这样的(因为他们只是调用memcpy),但我想知道标准中的填充是什么指定的? 这个问题的意图是,我可以使用memcmp来检查结构的相等性。 说我有一个编译器发出的代码只是分配结构的所有成员,而不是做memcpy,它会是一个有效的结

    3热度

    2回答

    以下C++代码使编译器GCC(6.3.0)和Clang(3.8.0)变得疯狂。 for (auto v : vectors2d) for_each (begin(ret), end(ret), [v[3]] (int &n) { n+= v[3];}); 虽然下面是细 for (auto v : vectors2d) { auto val = v[3]; for_

    4热度

    1回答

    我已经在这里写了一个答案:https://stackoverflow.com/a/44481507/2642059它使用accumulate。 函子必须是二进制,如签名:Ret op(const auto& a, const auto& b)但: 签名并不需要有const & 在二元仿函数的要求是: 不得使任何迭代器无效,包括结束迭代器,或修改涉及范围的任何元素 当对象累积到本身就是一个容器时,我

    9热度

    3回答

    class A{ public: A(){}; }; class B : public A{ public: using A::A; B(const B&) = default; B( B&&) = default; }; B b; 编译器(克++(5.4.0-6ubuntu1)/ C++ 11)显示“呼叫到B :: B没有匹

    6热度

    1回答

    [expr.ref]/1: 后缀表达式后面跟着一个点.或箭头->,任选接着进行关键字template(17.2), 然后接着是ID-表达,是一个后缀表达式。评估点或箭头 之前的后缀表达式; 该评价的结果,与ID-表达一起,确定了整个 后缀表达式的结果。 67)如果类成员访问表达式,子表达式评估发生即使结果不需要 确定整个后缀表达式的值,例如如果ID-表达表示静态成员。

    1热度

    2回答

    我观察到,当我尝试获取指向成员函数的指针时,不同的GCC版本的行为有所不同。 class Foo { public: void bar() { } }; int main() { void (Foo::*func1)(void) = Foo::bar; // Error with gcc 4.3.2 and gcc 7.1.0 return 0; }

    4热度

    1回答

    假设我实现了一个与动态数组相当的恒定长度的数据结构。即,我在构造函数中给出了数据结构长度l。那么,该数据结构的实例将永远不能容纳比l更多的元素。我希望该数据结构具有尽可能接近STL的接口。 我该如何实现这个类的max_size方法?它应该是构造函数中给出的容量l?或者应该是std::numeric_limits<size_type>::max()? 此方法的文档说: 返回容器可以容纳 由于系统或库

    2热度

    3回答

    在C++中,静态存储持续时间对象以未指定的顺序初始化(除了在同一个编译单元中)。 有了这样的代码: #include <iostream> struct Foo { Foo() { std::cout << "Hello, world.\n"; } } foo_instance; int main(int argc, const char *argv[])

    1热度

    1回答

    在传统for循环的初始化表达式中使用let时,它的作用域为for循环的块。 细则中指出: let和const声明定义被限定在 运行变量执行上下文的LexicalEnvironment。 是否意味着的i声明的一点是(甚至在ES5是(?))词法(语义我知道使用var将它悬挂)内块包括主体for循环(因为它天真地看起来好像它是外面它)。 或者这是否意味着这是let和/或for循环的新特性,使其具有词法上

    7热度

    1回答

    [conv]/4: 某些语言结构需要一个表达式被转换为 一个布尔值。出现在这样的背景下的表达式e据说 是上下文转换为bool并且结构良好的,当且仅 如果是公形成的声明bool t(e);,对于一些发明 临时变量t(11.6)。 现在考虑下面的代码片段。它不会在​​,GCC或VS中编译。 struct A{ bool operator!() { return true; } }; int main