相关疑难解决方法(0)

默认变量值

如果我在声明它时没有为变量赋值,它是默认为零还是只是以前在内存中的任何内容?

例如

float x;
Run Code Online (Sandbox Code Playgroud)

c++

51
推荐指数
5
解决办法
6万
查看次数

下面显示的片段在Coliru和Ideone中编译,但根据iso§8.5p6它不应该,或者我错过了什么?

从C++ 11标准§8.5p6我们得到:

如果程序要求对const限定类型T的对象进行默认初始化,则T应为具有用户提供的默认构造函数的类类型.

下面的代码应该不会编译.但它确实在Coliru和Ideone都有.

class A{};

int main() {
    const A a;
}
Run Code Online (Sandbox Code Playgroud)

编辑:

在尝试理解这里发生了什么时,我最终得到了以下代码,它编译(至少它符合标准,与A用户提供的构造函数一样).但后来出现了以下问题:哪个标准子句确保a.b.j用0初始化(参见Ideone中的代码),下面是什么?

#include <iostream>
struct B { int j; B(){ std::cout << "B()" << '\n'; } };
struct A
{
    struct B b;
    int i;

    public:
    A(): i(1) { std::cout << "A()" << '\n'; }

};  

int main() {
    const A a;
    std::cout << a.b.j << '\n';
    std::cout << a.i << '\n';
}
Run Code Online (Sandbox Code Playgroud)

EDIT1:

很抱歉上面的编辑,但我还没有使用Unix.上周, …

c++ default-constructor language-lawyer c++11

9
推荐指数
1
解决办法
300
查看次数

标签 统计

c++ ×2

c++11 ×1

default-constructor ×1

language-lawyer ×1