簡體   English   中英

是否可以將字符串文字傳遞給采用const char *的函數?

[英]Can a string literal be passed to a function that takes const char*?

我需要幫助來了解一些代碼。

我在其他地方讀過,將字符串文字作為const char*傳遞是合法的。 但是,在這段代碼的最后一行中, 來自cppreference的用戶定義的字符串文字表示沒有"two"文字運算符。 為什么這樣,如果可以將字符串文字"two"傳遞給采用const char*的函數呢?

long double operator "" _w(long double);
std::string operator "" _w(const char16_t*, size_t);
unsigned operator "" _w(const char*);


int main() {
    1.2_w; // calls operator "" _w(1.2L)

    u"one"_w; // calls operator "" _w(u"one", 3)

    12_w; // calls operator "" _w("12")

    "two"_w; // error: no applicable literal operator
}

因為處理字符串的用戶定義的文字運算符必須具有兩個參數:指向字符的指針和長度(請參見cppreference鏈接中的3b節)。 您認為應調用的示例運算符缺少此length參數。

為了使其起作用,聲明應為

unsigned operator "" _w(const char*, size_t);

是否可以將字符串文字傳遞給采用const char *的函數?

是。

一個例子:

void foo(const char*);
foo("two"); // works

您已鏈接並引用了用戶定義的字符串文字的文檔。 用戶自定義字符串文字是從字符串文字單獨的事情。

但是在cppeference的這段代碼的最后一行中,對於用戶定義的字符串文字,它說沒有用於“ two”的文字運算符。

更正:在示例中, _w沒有用戶定義的字符串文字。 "two"是字符串文字。 "two"_w是用戶定義的字符串文字,但是由於在示例中沒有T operator "" _w(const char*, size_t)的聲明,因此是錯誤的。

為什么可以將字符串文字“ two”傳遞給采用const char *的函數?

是否可以將"two"傳遞給采用const char*的函數,這與您是否已定義用戶定義的字符串文字完全不同。

暫無
暫無

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

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