我在我的代码中发布了一个问题,其唯一的#include
指令如下:
#include <bits/stdc++.h>
Run Code Online (Sandbox Code Playgroud)
我的老师告诉我这样做,但在评论部分,我被告知我不应该这样做.
为什么?
c++ portability c++-faq turbo-c++ implementation-defined-behavior
我怎么运行这个main.cpp
:
#include <iostream>
#include <typeinfo>
using namespace std;
struct Blah {};
int main() {
cout << typeid(Blah).name() << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
通过使用GCC 4.4.4版进行编译:
g++ main.cpp
Run Code Online (Sandbox Code Playgroud)
我明白了:
4Blah
Run Code Online (Sandbox Code Playgroud)
在Visual C++ 2008上,我会得到:
struct Blah
Run Code Online (Sandbox Code Playgroud)
有没有办法让它只是打印Blah
或struct Blah
?
我正在制作一个C ++库,该库在很大程度上依赖于RTTI(到另一种语言的可自定义桥接),并且对字符串文字类型非常困惑。
这是我做的一个简单测试,用于显示问题:
std::cout << typeid(const char*).name() << std::endl; // PKc
std::cout << std::any("").type().name() << std::endl; // PKc
std::cout << typeid("").name() << std::endl; // A1_c
Run Code Online (Sandbox Code Playgroud)
对我来说,它看起来像前两个打印出的类型const char*
,但最后一个是数组。
为什么对结果std::any("").type()
和typeid("")
不同?有没有办法获得第一个行为,即使字符串文字的结果一致(我使用类型标识来调用不同的类型处理程序)?
PS:在Ubuntu 19.04上使用Clang版本8.0.0-3(标签/ RELEASE_800 / final)进行测试。
c++ ×3
rtti ×2
c++-faq ×1
c++17 ×1
g++ ×1
gcc ×1
implementation-defined-behavior ×1
portability ×1
turbo-c++ ×1