首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >C++类构造函数能知道它的实例名吗?

C++类构造函数能知道它的实例名吗?
EN

Stack Overflow用户
提问于 2009-11-25 17:51:25
回答 12查看 10K关注 0票数 16

可以从类方法中知道对象实例名/变量名吗?例如:

代码语言:javascript
复制
#include <iostream>

using namespace std;

class Foo {
     public:
          void Print();
};

void Foo::Print() {
     // what should be ????????? below ?
     // cout << "Instance name = " << ?????????;
}

int main() {
    Foo a, b;
    a.Print();
    b.Print();
    return 0;
}
EN

回答 12

Stack Overflow用户

回答已采纳

发布于 2009-11-25 18:16:10

不是使用语言本身,但您可以编写类似这样的代码:

代码语言:javascript
复制
#include <iostream>
#include <string>

class Foo
{
 public:
    Foo(const std::string& name) { m_name = name;}
    void Print() { std::cout << "Instance name = " << m_name << std::endl; }

  private:
    std::string m_name;
};

int main() 
{
    Foo a("a");
    Foo b("b");

    a.Print();
    b.Print();

    return 0;
}
票数 25
EN

Stack Overflow用户

发布于 2009-11-25 17:53:09

不是的。变量名是给程序员的,编译器看到的是地址。

其他提供关于其程序的元数据/反射的语言可能会提供此功能,C++不是这些语言之一。

票数 28
EN

Stack Overflow用户

发布于 2009-11-25 17:54:59

编译后的代码中不存在变量名。

但是,您可以使用一些#define在预处理过程中获取名称,并在编译之前填充名称。

如下所示:

代码语言:javascript
复制
#define SHOW(a) std::cout << #a << ": " << (a) << std::endl
// ...
int i = 2;
SHOW (i);
票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1795816

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档