C++ 未签名的long long(10)无法在clang和gcc上编译

C++ 未签名的long long(10)无法在clang和gcc上编译,c++,C++,以下代码被clang和gcc拒绝,但被msvc接受: #include <iostream> int main() { std::cout << unsigned long long(10); } 错误是 错误:应在“unsigned”之前使用主表达式 这应该可以编译,对吗?不,您显示的内容不应该编译。有关详细信息,请参见cppreference.com 在函数样式转换中,类型名称中不允许使用空格。对于此类类型,您需要使用C样式或C++样式转换,例如: st

以下代码被clang和gcc拒绝,但被msvc接受:

#include <iostream>

int main() 
{
    std::cout << unsigned long long(10);
}
错误是

错误:应在“unsigned”之前使用主表达式


这应该可以编译,对吗?

不,您显示的内容不应该编译。有关详细信息,请参见cppreference.com

在函数样式转换中,类型名称中不允许使用空格。对于此类类型,您需要使用C样式或C++样式转换,例如:


std::cout否,您显示的内容不应编译。有关详细信息,请参见cppreference.com

在函数样式转换中,类型名称中不允许使用空格。对于此类类型,您需要使用C样式或C++样式转换,例如:


std::cout我很确定你必须在c风格的演员阵容中使用括号,就像在std::cout@nikhillchatterjee中一样,我试过在整个表达式中使用parens,但这不起作用,所以我认为它不可能是parens,lol@Timo在类型周围需要括号,而不是整个表达式,这也不是个坏主意,当使用C型演员时。@RemyLebeau是的,我已经阅读了你的答案,谢谢:我非常确定你必须在C型演员周围使用括号,就像在std::cout@nikhillchatterjee中一样,我尝试了整个表达式的parens,但没有用,所以我认为它不可能是parens,lol@Timo类型周围需要括号,虽然不是整个表达式,但在使用C样式转换时,这也不是一个坏主意。@RemyLebeau是的,我已经阅读了你的答案,谢谢:DHmm,但是变量声明是可以的。无符号长x;。为什么铸造不同?是否存在解析问题,或者这仅仅是因为?@Timo在变量声明中是无符号长x;被视为与无符号长x相同;,变量名周围的所有括号都被忽略,因此即使是无符号长x;是x的有效声明。请参见Hmm,但变量声明是可以的。无符号长x;。为什么铸造不同?是否存在解析问题,或者这仅仅是因为?@Timo在变量声明中是无符号长x;被视为与无符号长x相同;,变量名周围的所有括号都被忽略,因此即使是无符号长x;是x的有效声明。看见