爲什麼通過const引用傳遞參數總是意味着該對象是ODR使用?我明白,因爲Standard以這種方式定義它,但爲什麼它沒有至少爲整型常量做例外?ODR使用行爲的基本原理
例如(從幾個小時前在回答我自己的例子):
struct T {
static constexpr int i = 42;
};
void check(const int& z);
int main() {
check(T::i); // <- 1
check(42); // <- 2
}
線(1)
將通過靶向鏈接時錯誤 - 標準考慮它的T::i
ODR-使用是,並沒有定義在望。但是,示例(2)
的標準沒有問題。而且由於(2)
已經工作,爲什麼不能(1)
工作constexpr
內?我意識到,通常你需要把對象的地址通過引用傳遞給它,但肯定不是在數字文字的情況下。爲什麼標準不會爲某些constexpr
類型制定例外規定?
僅僅是爲了避免標準中出現太多例外情況?但我看到允許使用如上所述非常有益!還有什麼我看不到的?
如果您告訴我們「x」是什麼以及「檢查」是幹什麼的,您寫的內容會更有意義,正如您在此處所做的:http://stackoverflow.com/a/37259949/3758484 – johnbakers
簡單回答:是不是× – NathanOliver
我想知道爲什麼人們低估了這個問題。我也想知道爲什麼它'主要基於意見' - 沒有任何意見基礎,@巴里解釋得很好。 – SergeyA