C++ Builder 報錯 Statement missing,代碼中出現 2s,編譯器將其識別為單一標識符而非「2 乘以 s」。C++ 中數字字面量與變量相乘必須顯式寫乘號 *,不支援數學習慣的隱式乘法。
int result = 2s + 3t; // 編譯器視為標識符 "2s" 和 "3t" → Statement missing
int result = 2 * s + 3 * t; // 顯式乘法運算符
// 定義字面量後綴
constexpr long double operator"" _m(long double v) { return v; } // 米
constexpr long double operator"" _km(long double v) { return v * 1000; } // 公里
// 使用
auto dist = 2.5_km + 300_m; // 合法:2.5_km 是調用 operator"" _km(2.5)
但這需要預先定義後綴運算符,且後綴必須以下劃線開頭(_xxx),標準庫 std::chrono 已定義 h、min、s、ms、us、ns 等時間字面量。若代碼包含 using namespace std::chrono_literals;,則 2s 合法表示 2 秒(std::chrono::seconds),但這屬於特定領域庫功能,非通用算術語法。
結論:通用 C++ 代碼中乘法必須寫 *,2s 只有在引入 chrono_literals 且意圖表示時間間隔時才合法,否則為語法錯誤。