value-initialization相关内容
我发现 g++ 和 msvc 在初始化不可复制对象的值方面有一些不同的行为.考虑一个不可复制的类: class noncopyable_base{上市:noncopyable_base() {}私人的:noncopyable_base(const noncopyable_base &);noncopyable_base &operator=(const noncopyable_base &);}
..
一个小时前我发布了一个答案 这里 根据我的说法是正确的.但是我的回答被 Martin B 否决了.他说 你很幸运并且得到了零,因为我放入的内存恰好是零初始化的.标准不保证这一点. 但是在阅读 Michael Burr 的回答这里并尝试以下示例代码后> 1) #include 结构 B { ~B();国际米;};int main(){B * b = 新 B();断言(b-> m ==
..
我正在刷新我对值初始化与默认初始化的理解,并且遇到了这个: struct C {整数 x;输入 y;C () { }};int主(){Cc = C();} 显然这是 UB 因为 在 C() 的情况下,有一个构造函数能够初始化 x 和 y 成员,因此不会发生初始化.因此,尝试将 C() 复制到 c 会导致未定义的行为. 我想我明白为什么,但我不确定.有人能详细说明一下吗? 这是
..
我想创建一个包装数字类型的类型(并提供其他功能). 此外,我需要数字和包装器之间可以相互隐式转换. 到目前为止,我有: template struct Wrapper { T value; Wrapper() { } Wrapper(T const &value) : value(value) { } // ... operators
..
Ben Voigt 指出了 零初始化是静态初始化的步骤之一.但是您是对的,您不能盲目地替换后者(标签),因为对于值初始化也执行零初始化.但是,在C ++的上下文中,不需要进行零初始化(标记为零),因为静态初始化和值初始化都已经存在标记,并且它们更相关. 我认为在某些情况下,“零初始化" 而不是“静态初始化" 或还是“零初始化"永远不会在野外发生,并且我应该使用更具体的术语,例如:“静态初始
..
干杯和健康. -Alf在答案中发表了评论,与C ++相比,值初始化可以说是C ++ 03的新功能. 98.我想知道他是什么意思. C ++ 98的值初始化的一部分吗?它在概念上存在但在名称上不存在吗?为什么将它添加到C ++ 03标准? 我有'03标准的副本,但没有'98标准的副本.这是默认初始化和值初始化的定义. 默认初始化T类型的对象的意思是: -如果T是非POD类类型
..
首先,我想说,根据cppreference.com,有点不可能重新初始化枚举。 根据 http://en.cppreference.com/w/cpp/language/value_initialization ,值初始化枚举实际上执行零初始化。然后,根据 http://en.cppreference.com/w/cpp/语言/零初始化,零初始化枚举的效果是: 如果 T 是一个标量类型
..
可能重复: 非可复制对象和值初始化:g ++ vs msvc 值初始化自动对象? 请考虑以下语句: 这不是真正可能的值初始化一个自动对象。 这句话是真的吗?我看到没有问题这样做: int main() { int i = int ); } 解决方案 c> value-initialization 定义在8.5 [dcl.init]段落1
..
此问题仅指前C ++ 11 。考虑下面看似破碎的代码: struct X { X用户提供的构造函数 private: X(const X&){} }; int main() { X x = X(); } Live on Coliru 根据 cppreference.com 在C ++ 11之前的默认ctor将被调用:
..
请考虑下面的代码 struct B { B():member {} { }; int member [10]; } int main() { B b; } VS2013编译器提供以下警告: 警告C4351:新行为:数组'B :: member'的元素将是 默认初始化1> test.vcxproj - > C: \\Use
..
首先,我想说,根据cppreference.com,它是有点不可能的值初始化枚举。 根据 http://en.cppreference.com/w/cpp/language/value_initialization ,值初始化枚举实际上执行零初始化。然后,根据 http://en.cppreference.com/w/cpp/language/zero_initialization,零初始化
..
可能重复: 如果我有一个类,例如: class Info { int x; int y; }; 我用来创建一个对象, Info * p = new Info(); 信息旁边的括号是否意味着值初始化?与此不同的是, Info * p = new Info; ? 我知道有一个问题值初始化意味着将某些东西初始化为零?
..
我看到g ++和msvc之间的一些不同的行为围绕值初始化不可复制对象。考虑一个不可复制的类: class noncopyable_base { public: noncopyable_base(){} private: noncopyable_base(const noncopyable_base&); noncopyable_base& operator =(con
..
要初始化类型 T 的对象的值,将按照以下之一的行处理: T x = T(); T x((T()));我的问题是关于通过简单类型说明符组合指定的类型,例如 unsigned int : unsigned int x = unsigned int(); unsigned int x((unsigned int())); Visual C ++ 2008和英特尔®C ++编
..
一小时前我发布了一个答案这里根据我是正确的。但是我的回答被 Martin B 拒绝。他说 你只是幸运,并且得到零,因为我被置于的内存碰巧是零初始化。 但是在阅读Michael Burr的回答后,此处并尝试下面的示例代码 1) #include struct B {〜B(); int m; }; int main() { B * b
..
阅读此文章后,我指出 int()产生0,因为临时 int 是初始化的值,而不是因为 int()调用 int 。 (根据我的理解,这篇文章有缺陷。) 我也说过原始(内置)类型没有构造函数。原作者要求我检查Section $ 10.4.2(TC ++ PL),它说 内置类型也有默认构造函数但是我仍然认为语句“C ++允许甚至内置类型(原始类型)有默认的构造函数“。 我认为Bjarne
..