问题标签 [value-initialization]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
158 浏览

c++ - C++ 正确的新用法?

这是新运算符的正确用法吗?据我所知,前面的代码会将数组中的每个元素初始化为 0。

第二行代码是否只是初始化数组,而不是将值设置为零?

0 投票
4 回答
1069 浏览

c++ - 如何使用户定义的类型像内置类型一样初始化*精确*?

我想制作一种包装数字类型(并提供附加功能)的类型。
此外,我需要数字和包装器都可以相互隐式转换

到目前为止,我有:

几乎很好,但它的行为与内置类型不太一样:

我有什么办法可以设计Wrapper这样的陈述

初始化value内部,强制声明,如

也这样做?

换句话说,是否有可能创建一个在初始化方面与内置类型完全相同的类型?

0 投票
8 回答
208608 浏览

spring - 如何使用 Mockito 在 Spring 中模拟自动装配的 @Value 字段?

我正在使用 Spring 3.1.4.RELEASE 和 Mockito 1.9.5。在我的春季课程中,我有:

从我目前这样设置的 JUnit 测试中:

我想模拟我的“defaultUrl”字段的值。请注意,我不想模拟其他字段的值——我想保持原样,只保留“defaultUrl”字段。另请注意,我的班级中没有明确的“setter”方法(例如setDefaultUrl),我不想仅仅为了测试目的而创建任何方法。

鉴于此,我如何模拟该字段的值?

0 投票
3 回答
4741 浏览

c++ - VS2013 默认初始化 vs 值初始化

考虑下面的代码

VS2013 编译器给出以下警告:

警告 C4351:新行为:数组“B::member”的元素将被默认初始化 1> test.vcxproj -> C:\Users\asaxena2\documents\visual studio 2013\Projects\test\Debug\test.exe

这记录在这里

对于 C++11,并应用“默认初始化”的概念,意味着 B.member 的元素将不会被初始化。

但我认为member{}应该执行值初始化而不是默认初始化。VS2013编译器坏了吗?

$8.5/6

对类型对象进行默认初始化T意味着: — 如果T是(可能是 cv 限定的)类类型(第 9 条),则调用 的默认构造函数(如果没有可访问的默认构造函数T,则初始化是非良构的); — 如果是数组类型,则每个元素都是默认初始化的; — 否则,不执行初始化。 如果程序要求对具有-qualified type的对象进行默认初始化,则应是具有用户提供的默认构造函数的类类型。T
T

constTT

8.5.1 美元

对象或类型引用的列表初始化T定义如下:
— 如果初始化器列表没有元素并且T是具有默认构造函数的类类型,则对象是值初始化的。
— 否则,如果T是聚合,则执行聚合初始化(8.5.1)。

如果列表中的初始化子句少于聚合中的成员,则每个未显式初始化的成员都应从空的初始化器列表(8.5.4)中初始化。[示例:

ss.a使用、 和形式的表达式的值进行初始化1,即. —结束示例] ss.b"asdf"ss.cint()0

0 投票
2 回答
106 浏览

c++ - VS2013列表初始化

考虑代码

我认为此代码由 $8.5.4/3 指导

相反,VS2013 编译器发出所有 0xCCCCCCCC 暗示它将 b.member 的所有元素保留为未初始化。因此,它似乎正在执行默认初始化而不是值初始化。

如果我遗漏了什么,请告诉我。

0 投票
1 回答
143 浏览

c++ - 为什么值初始化如此命名?

我真的不清楚为什么有人会将特定形式的初始化命名为“值初始化”。听起来好像是通过给它一个值来初始化对象……但这就是初始化通常所做的,并且名称并没有告诉您它将用于初始化的值。

0 投票
1 回答
1233 浏览

c++ - 为什么 Foo({}) 调用 Foo(0) 而不是 Foo()?

clang 3.5.0 和 gcc 4.9.1 从代码中生成的可执行文件

表现如评论。

来自cppreference:cpp/language/list 初始化

T 类型对象的列表初始化的效果是:

如果T是聚合类型,则执行聚合初始化。

否则,如果括号初始化列表为空并且T是具有默认构造函数的类类型,则执行值初始化。

我的结论是Foo({})应该调用默认构造函数。

错误在哪里?

0 投票
1 回答
2234 浏览

c++ - 值初始化是 C++98 标准的一部分吗?如果不是,为什么在 C++03 标准中添加它?

干杯和hth。- Alf 在这个答案中评论说,与 C++98 相比,值初始化可以说是 C++03 的一个新特性。我想知道他是什么意思。

值初始化是C++98 的一部分吗?它是否存在于概念中但不在名称中?为什么将它添加到 C++03 标准中?

我有 '03 标准的副本,但没有 '98 标准的副本。这里是默认初始化和值初始化的定义。

默认初始化 T 类型的对象意味着:

— 如果 T 是非 POD 类类型(第 9 条),则调用 T 的默认构造函数(如果 T 没有可访问的默认构造函数,则初始化是非良构的);

— 如果 T 是数组类型,则每个元素都是默认初始化的;

— 否则,对象被零初始化。

对 T 类型的对象进行值初始化意味着:

— 如果 T 是具有用户声明的构造函数 (12.1) 的类类型(第 9 条),则调用 T 的默认构造函数(如果 T 没有可访问的默认构造函数,则初始化是错误的);

— 如果 T 是没有用户声明的构造函数的非联合类类型,则 T 的每个非静态数据成员和基类组件都是值初始化的;

— 如果 T 是一个数组类型,那么每个元素都是值初始化的;

— 否则,对象被零初始化

我的猜测是 '98 有默认初始化,但没有值初始化,两者之间存在一些关键区别。老实说,我在这里解析标准语时遇到了麻烦,我不明白定义之间的区别。

0 投票
2 回答
11335 浏览

c++ - 值初始化枚举的行为

首先,我想说,根据 cppreference.com,对枚举进行值初始化有点不可能。

根据http://en.cppreference.com/w/cpp/language/value_initialization,值初始化枚举实际上执行零初始化。然后,根据http://en.cppreference.com/w/cpp/language/zero_initialization,对枚举进行零初始化的效果是:

如果T是标量类型,则对象的初始值是整数常量零隐式转换为T

但是,整数常量 0 不能隐式转换为枚举。最终,枚举不能进行值初始化。这听起来很奇怪,并且值初始化枚举确实适用于 VC、GCC 和 clang。那么,标准对此有何评论?

其次,根据http://en.cppreference.com/w/cpp/language/static_cast

整数、浮点或枚举类型可以转换为任何完整的枚举类型(结果未指定(C++17 前)未定义行为(C++17 起)如果表达式的值,转换为枚举的基础类型, 不是目标枚举值之一)

0那么,这是否意味着如果目标枚举没有一个等于

0 投票
3 回答
247 浏览

c++ - 如何在标准 C++ 中创建一个初始化 T * 的临时值

如何创建T*在标准 C++ 中初始化的临时值?

只是出于好奇。