以下代码被clang和gcc拒绝,但被msvc接受:
#include <iostream>
int main()
{
std::cout << unsigned long long(10);
}错误是
错误:“无符号”之前的预期主表达式
这应该是汇编的,对吧?
发布于 2020-10-20 16:44:02
不,您所显示的不应该编译。有关详细信息,请参阅显式类型转换 on cppreference.com。
在函数样式的强制转换中,类型名称中不允许空格。对于这类类型,您需要使用C样式或C++样式的强制转换,例如:
std::cout << ((unsigned long long)10);
or
std::cout << static_cast<unsigned long long>(10);否则,使用类型别名代替,例如:
using ull = unsigned long long; // C++11 and later
or
typedef unsigned long long ull; // pre-C++11
std::cout << ull(10);注意,头可能具有可以使用的uint64_t类型,例如:
#include <cstdint>
std::cout << uint64_t(10);
or
std::cout << ((uint64_t)10);
or
std::cout << static_cast<uint64_t>(10);尽管如此,对于整数文本,您可以选择使用后缀 (C++11及更高版本),例如:
std::cout << 10ULL;https://stackoverflow.com/questions/64449616
复制相似问题