C++ 如何在c++;?

C++ 如何在c++;?,c++,class,identifier,C++,Class,Identifier,从这里:,我发现如果存在名称冲突(例如,如果类名与函数名相同),我需要class标识符: 这里的主要表达式是什么?如何识别类而不是函数?我希望它打印类,而不是函数。如何做到这一点?可能的解决方案之一: using bar = class foo; p = bar(); intmain() { 字符常量*p; 结构foo f; p=静态铸件(f); CUT< P>我发现两个解决方案都被代码< G++> 和 CLAN所接受,但是我不知道它们是否是标准C++。 统一初始化 cout <&l

从这里:,我发现如果存在名称冲突(例如,如果类名与函数名相同),我需要
class
标识符:


这里的主要表达式是什么?如何识别类而不是函数?我希望它打印
,而不是
函数
。如何做到这一点?

可能的解决方案之一:

using bar = class foo;
p = bar();
intmain()
{
字符常量*p;
结构foo f;
p=静态铸件(f);

CUT< P>我发现两个解决方案都被代码< G++> <代码>和<代码> CLAN<代码>所接受,但是我不知道它们是否是标准C++。
  • 统一初始化

     cout << (class foo){} << "\n";
    

    <代码> CUT@ ThomasSablik,这是重点。当然,这不是好的实践——但是C和As C++是兼容C的,你也可以做。参见我提出的链接似乎接受了<代码>类型名称::
调用构造函数,但clang没有。我想这不是标准的。使用
的语义是什么?@milanHrabos它创建了一个类型别名,就像
typedef
一样,但语法更合理。请参阅
using bar = class foo;
p = bar();
int main()
{
    char const *p;
    struct foo f;
    p = static_cast<char const*>(f);
    cout << p << '\n';
    return 0;
}
 cout << (class foo){} << "\n";
template <typename T, typename ...Args>
T ctor(Args&& ...args) {
    return T{ std::forward<Args>(args) ... };
}


// ...

cout << ctor<class foo>() << "\n";