簡體   English   中英

非字符串文字是prvalues?

[英]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.

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