【问题标题】:Is it possible to create new type variable without struct? [closed]是否可以在没有结构的情况下创建新的类型变量? [关闭]
【发布时间】:2017-07-06 09:42:00
【问题描述】:

这是我得到的,但是当我检查类型时它显示“struct MyVarName”

#include <iostream>
#include <typeinfo>
typedef struct { char text[15];} MyVarName;
int  g = 0;
int main(void) {
    MyVarName a = { "super" };
    std::cout << typeid(a).name() << '\n';
    std::cout << typeid(g).name() << '\n';
return 0;
}

是否可以定义自己的变量类型,然后将其用作任何其他变量?

打印,分配新值..等

【问题讨论】:

  • 代码是c++:为什么是c 标签?
  • 不清楚你在问什么。我也觉得分配一个指向数组的指针是错误的。
  • 你能展示你想写的代码吗?就目前而言,这个问题完全不清楚
  • @TatsuyukiIshi 这是从不超过数组大小的字符串文字初始化 char 数组,而不是赋值。它是有效的。
  • struct 的全部意义在于定义您自己的类型。因此,您几乎是在问是否可以定义自己的类型,而无需执行定义自己的类型所需的操作。

标签: c++ c


【解决方案1】:

The result of std::type_info::name() is implementation-defined 可以是任何东西,包括错误的名称、空字符串或千层面的食谱。

例如 GCC gives:

9MyVarName
i

显然你的方法是采用类似 C 的方法并将其称为 struct MyVarName,这是你必须编写以引用 C 中的类型。

只是不要依赖它来做这种事情。 C++ 不假装有有意义的反射

除此之外,您的代码没有任何问题。您确实定义了一个新类型。有一些方法可以引入不需要创建类类型的新类型(即使用structclass),但这些都涉及使用typedefusing 对现有类型进行别名,因此受到限制.它们不允许您创建像 std::string 这样的复杂类型。

【讨论】:

  • 感谢您回答我的问题。在我发布问题后,我注意到 GCC 给出了不同的结果。
  • @AESTHETICS:只需阅读文档就可以提前揭示事实
  • 我问是否可以在不使用 struct 的情况下创建新的类型变量。代码只是打印出变量的类型信息时将其视为结构的示例。
  • @AESTHETICS:很明显,它一个结构(实际上是一个类),所以我不知道你还有什么期望。有一些方法可以引入不需要创建类类型的新类型,但这些都涉及使用typedefusing 为现有类型起别名,因此受到限制。在这一点上,真的不清楚你是在抱怨你创建类型的方式,还是在抱怨 typeinfo 的行为。
【解决方案2】:

在 C 中:

typedef char newtype[20];

void foo(void)
{
    newtype a;
}

【讨论】:

  • 我不知道它应该如何工作。
  • 好的,我想我现在明白了。
  • 当然,请注意这并没有真正引入新类型。它为现有类型 char[20] 引入了一个新名称 newtype
  • @Angew 当然- typedef 创建一个别名。但是没有办法在C中创建像“int”这样的类型(可能除了自己的方言和编译器修改)
  • 这是我开始思考新类型时想到的。必须编写我自己的编译器来完成我真正想到的事情。
猜你喜欢
  • 2019-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-07
  • 1970-01-01
  • 2014-06-16
  • 1970-01-01
相关资源
最近更新 更多