根据cppreference ,值初始化的语法是: [..] T object {}; (C++11 起) [..] 众所周知,当使用空初始化程序构造 object 时会执行值初始化。 每, [dcl.init]/8 (强调我的) 对 T 类型的 object 进行值初始化意味着: (8.1 ...
根据cppreference ,值初始化的语法是: [..] T object {}; (C++11 起) [..] 众所周知,当使用空初始化程序构造 object 时会执行值初始化。 每, [dcl.init]/8 (强调我的) 对 T 类型的 object 进行值初始化意味着: (8.1 ...
考虑 foo的元素都为零吗? 我认为它们是从 C++11 开始的。 但是想确定一下。 ...
如果我有以下结构 我用 这应该值初始化对象并根据标准执行以下操作: 如果 T 是没有用户提供或删除的默认构造函数的(可能是 cv 限定的)类类型,则该对象被零初始化并检查默认初始化的语义约束,并且如果 T 具有非平凡的默认构造函数, 对象是默认初始化的; struct test有 ...
// Example program #include <iostream> #include <string> class T{ public: int x, y; T(){ std::cout << "T() const ...
给定两个具有不同构造函数的类: 输出是: 为什么default ctor 零初始化int x ? ...
如果当我创建一个新的 object 并且我没有提供任何构造函数 arguments 时,我可以为构造函数 arguments 提供参数包,那么结果将是: new T(); 如果 object 没有用户提供的构造函数,它将对它进行值初始化。 我该如何阻止这种情况发生? ...
简而言之,为什么下面的代码表现得像评论中描述的那样?struct A { A() = delete; //A(const A&) {} // uncommenting this... }; int main() { A a{}; // ... breaks thi ...
根据本页https://en.cppreference.com/w/cpp/language/value_initialization 中描述的值初始化 如果 T 是一个没有默认构造函数但有一个采用 std::initializer_list 的构造函数的类类型,则执行列表初始化。 所以我期 ...
如果我有这样的代码 代码运行后是否保证x->subnodes[0] == nullptr ? 我不是 C++ 方面的专家,我发现 C++ 规格令人生畏。 这在实践中是可行的,但是规范是否保证在这种情况下将 nullptr 放入数组的每个元素中(而不是说,可能是垃圾)? 到目前为止,我还没有通 ...
我已经阅读了很多 C++ 代码,并且遇到了两种初始化变量的方法。 方法一: 方法二: 我知道int score {}; 将分数初始化为 0,因此int score = 0; 这两者有什么区别? 我已经阅读了初始化:括号与等号,但这并没有回答我的问题。 我想知道等号和大括号之间有什么区别, ...
一般来说,括号和大括号是非常不同的。 对于最小的可重现示例: 但是,由于空大括号使用值初始化而不是std::initializer_list构造函数,因此空括号和空大括号用作初始值设定项时有什么不同吗? 更正式地,给定类型T , T()和T{}是否可能不同? (两者都可能是格式错误的。) ...
我发现很多文章解释了“默认初始化和值初始化”之间的区别,但实际上我并不清楚。 这是一个例子: 以上是可以的,但我在这里: 请帮助我理解两种初始化形式之间的主要区别。 ...
在这段代码中: x应该是-5还是-261 ? 在我的理解中,初始化表达式已经signed char类型,并且一旦计算出初始化程序,类型转换应该在以后发生。 因此, v - '0' * (signed char)n应该等于-5因为这是signed char值估值中的-261的等价值 ...
让我们以自定义vector实现为例: 所以我的问题是,如何使myVector进行值初始化,以防万一我将其初始化为: 在这里,它包含5个int值,因此我需要将其全部为零。 与其他类型相同。 我注释掉_buff[i] = 0; 因为它特定于int 。 请给我一些提示。 ...
通过这里的工作 ,我认为std::atomic<T> a{}实际上是零初始化a 。 我一直在这么想,并一直在使用它直到这个 。 在解释我对此的理解之前,我想表明,至少,gcc和clang正在实践中这样做。 gcc和clang上的输出均为0 。 以下是我解释为什么这应 ...
假设我想构造一个std::unordered_map<char, int>来映射字符串中字符的频率。 我会做类似的事情 对我来说,这很危险,因为我怎么知道hashmap[*pch]++会在hashmap条目的值(从0开始)中构造一个整数? 我在哪里可以找到此保证(如果存在 ...
由值初始化规则。 值初始化发生: 1,5)使用由一对空括号或大括号组成的初始化程序创建无名临时对象时(自C ++ 11起); 2,6)当具有动态存储持续时间的对象是由带有以空括号或大括号组成的new表达式的new表达式创建的(自C ++ 11起); 3,7)使用带有一 ...
为什么编译器(clang,gcc)在执行此操作时没有警告缩小转换 我期待一个警告,因为我使用大括号进行显式值初始化。 按照这个答案链接它应该吐出一个错误。 汇编在这里 ...
是否可以将类型A的右值传递给foo()而不进行值初始化? 我们必须使用值初始化还是左值? 你可能会问,当“成本”不超过10纳秒时,避免价值初始化的重点是什么。 这样的情况怎么样:我们正在寻找遗留应用程序中由于使用valgrind进行未初始化的内存访问而导致的错误,并且零不被视为应用程 ...
我尝试将@bolov的第一个接受的答案理解为Deleted默认构造函数。 仍然可以创建对象...有时 [1] 好像我发现了一个错误,所以它弄乱了整个解释。 @bolov解释了为什么这个代码成功在c ++ 11中编译: 情景A. 为什么这个代码FAILS要用c ++ 1 ...