问题标签 [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.
c++ - C++ 正确的新用法?
这是新运算符的正确用法吗?据我所知,前面的代码会将数组中的每个元素初始化为 0。
第二行代码是否只是初始化数组,而不是将值设置为零?
c++ - 如何使用户定义的类型像内置类型一样初始化*精确*?
我想制作一种包装数字类型(并提供附加功能)的类型。
此外,我需要数字和包装器都可以相互隐式转换。
到目前为止,我有:
它几乎很好,但它的行为与内置类型不太一样:
我有什么办法可以设计Wrapper
这样的陈述
初始化value
内部,但不强制声明,如
也这样做?
换句话说,是否有可能创建一个在初始化方面与内置类型完全相同的类型?
spring - 如何使用 Mockito 在 Spring 中模拟自动装配的 @Value 字段?
我正在使用 Spring 3.1.4.RELEASE 和 Mockito 1.9.5。在我的春季课程中,我有:
从我目前这样设置的 JUnit 测试中:
我想模拟我的“defaultUrl”字段的值。请注意,我不想模拟其他字段的值——我想保持原样,只保留“defaultUrl”字段。另请注意,我的班级中没有明确的“setter”方法(例如setDefaultUrl
),我不想仅仅为了测试目的而创建任何方法。
鉴于此,我如何模拟该字段的值?
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
const
T
T
8.5.1 美元
对象或类型引用的列表初始化
T
定义如下:
— 如果初始化器列表没有元素并且T
是具有默认构造函数的类类型,则对象是值初始化的。
— 否则,如果T
是聚合,则执行聚合初始化(8.5.1)。如果列表中的初始化子句少于聚合中的成员,则每个未显式初始化的成员都应从空的初始化器列表(8.5.4)中初始化。[示例:
ss.a
使用、 和形式的表达式的值进行初始化1
,即. —结束示例]ss.b
"asdf"
ss.c
int()
0
c++ - VS2013列表初始化
考虑代码
我认为此代码由 $8.5.4/3 指导
相反,VS2013 编译器发出所有 0xCCCCCCCC 暗示它将 b.member 的所有元素保留为未初始化。因此,它似乎正在执行默认初始化而不是值初始化。
如果我遗漏了什么,请告诉我。
c++ - 为什么值初始化如此命名?
我真的不清楚为什么有人会将特定形式的初始化命名为“值初始化”。听起来好像是通过给它一个值来初始化对象……但这就是初始化通常所做的,并且名称并没有告诉您它将用于初始化的值。
c++ - 为什么 Foo({}) 调用 Foo(0) 而不是 Foo()?
clang 3.5.0 和 gcc 4.9.1 从代码中生成的可执行文件
表现如评论。
来自cppreference:cpp/language/list 初始化:
T 类型对象的列表初始化的效果是:
如果
T
是聚合类型,则执行聚合初始化。否则,如果括号初始化列表为空并且
T
是具有默认构造函数的类类型,则执行值初始化。
我的结论是Foo({})
应该调用默认构造函数。
错误在哪里?
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 有默认初始化,但没有值初始化,两者之间存在一些关键区别。老实说,我在这里解析标准语时遇到了麻烦,我不明白定义之间的区别。
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
那么,这是否意味着如果目标枚举没有一个等于
c++ - 如何在标准 C++ 中创建一个初始化 T * 的临时值
如何创建T*
在标准 C++ 中初始化的临时值?
只是出于好奇。