簡體   English   中英

用戶定義的文字與uint64_t參數結合使用

[英]user-defined literals combined with an uint64_t argument

我只是偶然發現了以下用戶定義的文字:

#include <cstdint>

constexpr auto operator""_G(uint64_t v) { return v * 1'000'000'000ULL; }

但是,這不能用GNU 7.3.0和-std=c++14編譯。 我收到“有無效參數列表”錯誤。

根據https://en.cppreference.com/w/cpp/language/user_literal ,唯一允許的無符號64位類型是unsigned long long int 但是, stdint.huint64_t typedef映射到GCC內置的define __UINT64_TYPE__

#define __UINT64_TYPE__ long unsigned int;

該定義是通過運行gcc -dM -E an_empty_file.c | grep "__UINT64_TYPE__" gcc -dM -E an_empty_file.c | grep "__UINT64_TYPE__"

當然,用unsigned long long int替換uint64_t可以避免編譯錯誤。 但這兩種類型在LP64數據模型上是相同的。

這不應該默認工作嗎?

這不應該默認工作嗎?

不。 該標准要求用戶定義文字的類型為unsigned long long int [1] long unsigned int不是同一個東西,它是它自己的不同類型。 即使它們具有完全相同的屬性, std::is_same_v<unsigned long long int, long unsigned int>也為false。

如果要為文字取整數,則必須使用unsigned long long int類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM