小编Ase*_*ran的帖子

当我调用一个简单的函数时,析构函数会被调用

我做了一个简单的程序制作一个类,它是3个对象.我重载了=,+ =和<<运算符.问题是当我使用=和+ =运算符时,在执行函数后调用析构函数.

据我所知,当对象超出范围或使用"删除"运算符时,将调用析构函数.但是,就我而言,这两者都不是.我查看了一些其他网站,比如官方C++网站,但是,我无法得到答案.这是我写的代码.

#include<iostream>
using namespace std;

class Class
{
    int flag,name;
public:
    Class(int y,int z)
{
    flag=y;
    name=z;
}

    Class& operator=(Class);
    Class operator+=(Class);
    friend ostream& operator<<(ostream&,Class&);    

    ~Class()
{
    cout<<"Destroying "<<flag<<endl;
}
};

int main()
{
    Class C1(1,80),C2(2,90),C3(3,100);
    cout<<C1<<C2<<C3<<endl;
    C1=C2=C3;
    cout<<C1<<C2<<C3<<endl;
    C3=C1+=C2;
    cout<<C1<<C2<<C3<<endl;
    return 0;
}

Class& Class::operator=(Class x)
{
    name=x.name;
    return *this;
}

Class Class::operator+=(Class x)
{
    name+=x.name;
    return *this;
}

ostream& operator<<(ostream& o,Class& c)
{
    o<<c.name;
    return o;
}
Run Code Online (Sandbox Code Playgroud)

我得到的输出是这样的:

8090100 …
Run Code Online (Sandbox Code Playgroud)

c++ c++14

2
推荐指数
1
解决办法
127
查看次数

编译器在打印变量的地址时发出警告

我做了一个非常简单的程序来打印两个变量的地址.

#include<stdio.h>

int main()
{
    int a,b;
    printf("%u\n%u",&a,&b);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但是,Clang-3.7编译器发出警告:

warning:format指定类型'unsigned int'但参数的类型为'int*'[-Wformat]`

但是,当我使用GCC-5.x进行编译时,它没有发出任何警告.哪一项是正确的?

我知道的一件事是做错unsigned int num=&a;会因为地址只能存储在指针中.但是,编译器在打印地址时发出警告是否正确?

我从gcc.godbolt.org编译了我的程序

c printf gcc clang format-specifiers

0
推荐指数
1
解决办法
1553
查看次数

为什么在c99或c90模式下支持_Generic关键字?

我写了一个简单的C程序来测试_Generic关键字的可用性.

int main() {
    int _Generic;
}
Run Code Online (Sandbox Code Playgroud)

我在Ubuntu上用gcc-5.3.1clang-3.8.0编译器运行程序.

显然,当使用最新的c11标准编译时,该程序会产生错误.

但是,当使用-std = c90-std = c99标志进行编译时,它也会生成错误.然而,_Generic关键字仅在c11标准中引入.

这是-std = flags的行为不同吗?有没有办法测试纯c90和c99标准?

编辑:

我确实使用其他标识符运行相同的程序,这些标识符不是c11标准的关键字.喜欢:

int _Hello;
int _Gener;
Run Code Online (Sandbox Code Playgroud)

他们成功编译没有任何错误或警告.这可能是因为7.1.3,它说

如果程序在保留它的上下文中声明或定义标识符(除了7.1.4允许的标识符),或者将保留标识符定义为宏名称,则行为未定义

正如@Art和@Lundin所说.

c c99 c89 c11 ansi-c

0
推荐指数
1
解决办法
196
查看次数

标签 统计

c ×2

ansi-c ×1

c++ ×1

c++14 ×1

c11 ×1

c89 ×1

c99 ×1

clang ×1

format-specifiers ×1

gcc ×1

printf ×1