有沒有辦法強制編譯錯誤?我希望能夠在類方法上設定條件以防止不當使用它。目前我正在使用return;打破該方法,但該程式將編譯并運行,而該函式的用戶并不知道它沒有被正確使用。
下面是一些示例代碼來顯示這種情況:
void method(int x){
if(x<5)
return; //breaks out of method without executing anything below
...
more code
...
}
如果x=4,則程式將執行并運行,但是此方法沒有執行任何操作可能并不明顯。
uj5u.com熱心網友回復:
我懷疑編譯錯誤是你要找的。編譯錯誤意味著 check( x < 5) 可以在編譯時完成。但是,目前這不能用您的代碼完成。
您可以做的是使用運行時例外:
void method(int x)
{
if(x < 5)
{
throw std::invalid_argument("X must not be less than 5!");
}
?
?
}
現在,如果有人method用低于 的東西呼叫5,程式將停止,并列印如下內容:
terminate called after throwing an instance of 'std::invalid_argument'
what(): X must not be less than 5!
并且如果用戶知道他們在做什么,并且知道使用低于的引數5很好,并且只想跳過 的其余部分method,那么他們可以使用 try-catch:
int main()
{
try {
method(4);
}
catch (const std::invalid_argument& e) {
std::cout << e.what(); // manually prints the error message
// something to do instead.
?
?
}
}
uj5u.com熱心網友回復:
當您的程式執行時,除非您可以訪問時間機器,否則您的程式無法編譯為時已晚。看起來您需要一種方法來終止正在運行的程式的執行。有多種方法可以做到這一點。最合適的是使用 C exception(要么使用系統例外,std::runtime_error要么定義你自己的例外)。如果由于各種問題導致例外不可用,您可以使用std::abort()立即終止程式的功能。盡管不建議使用 last 方法,因為不會呼叫現有物件的解構式,并且您的程式可能無法正確終止(例如,將省略在解構式中完成的清理某些資源)。
uj5u.com熱心網友回復:
此評論被@Asphodel應答/糾正我試圖做的事:
強制編譯錯誤?我不確定你的意思,但如果你想讓你的錯誤停止程式并且你想知道什么錯誤,你可以列印到 cerr 并使用 exit() 或 abort(),或者你可以拋出一個例外/沒有抓住它
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/398012.html
