這個問題在這里已經有了答案: 在 C 11 中使用帶有兩個宣告的 auto 會發生什么? (1 個回答) 22 小時前關閉。
我知道我會寫
if (int a = 1; /* whatever */) {}
乃至
if (int a = 1, b{3}; /* whatever */) {}
但是我怎樣才能宣告a
typeint
和b
type std::string
?
這樣的事情不起作用:
if (auto a = 1, b{"ciaos"s}; /* whatever */) {}
我沒有包括一個標準,因為我對一般的答案感興趣,即使實際上我會在背景關系中使用答案C 17.
而且,如果這樣的事情是不可能的,是否有任何確切的原因(因此語言律師)?
uj5u.com熱心網友回復:
if 陳述句中只允許有一個變數宣告陳述句,并且每個變數宣告陳述句只能宣告一個型別。這在[stmt.if]/3中進行了轉換,其中顯示了您嘗試使用的 if 陳述句的語法是
if constexpr(opt) ( init-statement condition ) statement
andinit-statement
可以是一個simple-declaration
and ,它包含一個init-declarator-list
只允許一個declarator
. 通常這意味著只有一個型別,但指標 (*) 和參考 (&) 被應用于變數名,而不是型別名,因此您可以在單個中宣告T
,T*
和/或變數,即T&
init-declarator-list
int a = 42, *b = &a, &c = a;
作為一種解決方法,您可以結合使用結構化系結和CTAD(以減少冗長)std::tuple
來獲得類似的語法
int main()
{
using namespace std::string_literals;
if (auto [a, b] = std::tuple{42, "string"s}; a)
{
std::cout << b;
}
}
哪個輸出
string
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/468973.html
上一篇:如果資料庫中不存在值,則運行回圈