[英]Non-string literals are prvalues?
我不確定我是否遺漏了某些東西,但是,用戶定義的文字調用可以返回任何東西的用戶定義函數,也是一種文字。
標准說文字總是一個prvalue,除非它是一個字符串文字, 但是 :
#include <iostream>
#include <typeinfo>
int& operator""_a(unsigned long long c);
int main()
{
std::cout << std::is_same<decltype(5_a), int&>::value;
}
在GCC和Clang中打印1,證明文字5_a
(不是字符串文字)被視為左值而不是右值:
[expr.prim.literal] / 1 文字是主要表達。 它的類型取決於它的形式。 字符串文字是左值; 所有其他文字都是prvalues。
用戶定義的文字也是文字 。
我錯過了什么?
是的,這是標准中的一個小的措辭缺陷。 您可以在N1905中找到該句子(幾乎)不變:
文字是主要表達方式。 它的類型取決於它的形式(2.13)。 字符串文字是左值; 所有其他文字都是右值。
這個標准早於用戶定義的文字幾年( N2765是從2008年中期開始),這個特殊的措辭沒有改變,以反映“所有其他文字是[p] rvalues”部分不應該包括用戶定義文字。
但是,很明顯,因為用戶定義的文字只是函數調用的語法糖,所以它的值類別也應該從函數調用中派生出來。 這就是語言功能的重點。 沒有混淆,你的例子中5_a
的值類別是左值而不是prvalue(所有編譯器都同意),因此這個措辭的缺陷報告將獲得相當低的優先級,如果有的話。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.