Rozważmy:C++ 11 operator "" o podwójnym parametrem
struct str {};
str operator"" _X(long double d) {
return str();
}
to kompiluje zg ++ 4.7.2 Tablica std = C++ 11
ale jeśli dam podwójny:
str operator"" _X(double d) {
return str();
}
pojawia się następujący komunikat o błędzie: main.cpp | 3 | błędzie: 'operator str "" _X (podwójne)' ma liście Invalid argument
Na czym polega problem? Czy ma to coś wspólnego z "Nie można ponownie zdefiniować znaczenia wbudowanego dosłownego sufiksu" (Stroustrup FAQ)? Czy możesz wymyślić obejście?
Ok dzięki. Ale dlaczego ? Mam na myśli, czy było coś w składni, która uniemożliwiała podwójne podwojenie? –
@ BérengerBerthoul: Dlaczego używałbyś 'double', gdy' long double' ma tyle lub więcej zasięgu i precyzji? Prawdopodobnie ze względu na szybkość lub użycie pamięci, prawda? Cóż, nie są to uwagi dotyczące operacji wykonywanych podczas kompilacji. Jeśli chcesz wykonywać operacje z podwójną precyzją, zawsze możesz użyć rzutowania wewnątrz funkcji. –
@Ben Voigt Ok, w porządku dla mnie. Po prostu myślę, że to trochę kludge, ale w rzeczywistości nie ma dużego pb. Dzięki –