首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未签名的long(10)不能在clang和gcc上编译

未签名的long(10)不能在clang和gcc上编译
EN

Stack Overflow用户
提问于 2020-10-20 16:38:27
回答 1查看 230关注 0票数 1

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

代码语言:javascript
复制
#include <iostream>

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

错误是

错误:“无符号”之前的预期主表达式

哥德波特

这应该是汇编的,对吧?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-20 16:44:02

不,您所显示的不应该编译。有关详细信息,请参阅显式类型转换 on cppreference.com。

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

代码语言:javascript
复制
std::cout << ((unsigned long long)10);
or
std::cout << static_cast<unsigned long long>(10);

否则,使用类型别名代替,例如:

代码语言:javascript
复制
using ull = unsigned long long; // C++11 and later
or
typedef unsigned long long ull; // pre-C++11

std::cout << ull(10);

注意,头可能具有可以使用的uint64_t类型,例如:

代码语言:javascript
复制
#include <cstdint>

std::cout << uint64_t(10);
or
std::cout << ((uint64_t)10);
or
std::cout << static_cast<uint64_t>(10);

尽管如此,对于整数文本,您可以选择使用后缀 (C++11及更高版本),例如:

代码语言:javascript
复制
std::cout << 10ULL;
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64449616

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档