我知道這是一個簡單的問題,但我期待讓我的C++槽。我會想象某種abort
函數可以使用。但我不認爲這會返回任何文字,如die('hello');
會。有沒有C++等價於PHP的var_dump和死亡?
回答
在C或C++中沒有「打印消息,然後退出」。你可以很容易地編寫自己的功能die
(或panic
,因爲我更喜歡稱呼它),這樣的:
void die(const std::string& msg)
{
std::cerr << msg << std::endl;
exit(1);
}
或者,如果你想避免的問題創建一個字符串,它可以在失敗低存儲器conditons:
void die(const char *msg)
...
(其餘應該是與上述相同)。這裏的缺點是你不能簡單地連接字符串,例如die(std::string("Could not open file ") + filename);
將不適用於const char *
。
函數var_dump
要難得多,因爲沒有直接的方法來實際獲取C++中任意類型或數組的變量的內容。你也許可以這樣做:
template<typename T>
void var_dump(const T& var)
{
std::cout << var << endl;
}
template<typename T, size_t N>
void var_dump(const T (&var)[N])
{
for(i : var)
{
std::cout << i << endl;
}
}
後者有點像這樣的PHP代碼:foreach($var as $i) echo $i . "\n";
。我可能會有語法錯誤,不確定。
我不會在這裏使用'std :: string',在失敗的情況下,它很可能會失敗。 –
@ BenVoigt:如果「失敗」是內存不足,可能是的。對於大多數其他失敗,可能不會......我已經將它改爲「const」引用,這應該避免必須複製。 –
此外,任何與堆損壞相關的失敗。對於錯誤記錄來說,假設一個具有定義良好的行爲的程序並不明智。 –
我不建議撥std::abort
,std::exit
或類似的東西。
它是蠻力的,正確清理的語義非常複雜。你基本上離開(至少部分)你的程序處於非常混亂的狀態。
一個更好的在C++的方式是拋出一個異常,你再搭上在main
:
#include <stdexcept>
struct fatal_error : std::logic_error {
fatal_error(char const* message) : std::logic_error(message) { }
};
int main() try {
… the normal program flow starts here
} catch (fatal_error const& e) {
std::cerr << e.what() << '\n';
return EXIT_FAILURE;
}
然後,而不是die
,你會簡單地說throw fatal_error("Something went wrong.");
。
+1 PHP不爲人知的好設計巔峯...... – GManNickG
*「拋出一個異常,然後你在'main'中捕獲」* - 呃,不。爲什麼無條件地發現異常,你不知道如何處理?不,只要讓它通過,如果你不知道該怎麼做。順便提一下,這與OP所要求的更接近。C++中未捕獲的異常的語義現在已經很好地被指定了。 – IInspectable
@IInspectable當寫這個答案時,未捕獲的異常導致未指定或未定義(不記得哪些)行爲和泄露的資源。但是,除此之外,沒有最終用戶希望看到來自未捕獲異常的輸出。更好地控制格式。 –
- 1. 有沒有C#等價於Ruby的`respond_to?`?
- 2. 有沒有C#等價於Java的AbstractList?
- 3. 有沒有C#等價於IsDebuggerPresent()?
- 4. 是否有C#等價於PHP的array_key_exists?
- 5. 有沒有C#等價於PHP函數`parse_str`?
- 6. 什麼是PHP var_dump的.NET等價物?
- 7. r中的var_dump()等價於什麼?
- 8. C#:有沒有JTable的等價物?
- 9. 有沒有C++的Cocoa等價物?
- 10. 有沒有一個C++等價的WaitforSingleObject?
- 11. php var_dump沒有完成XML
- 12. PHP的preg_match()等價於C++?
- 13. 查詢死亡,但沒有工作
- 14. delayed_job死亡失敗 - 沒有嘗試
- 15. Delphi有沒有和C的volatile變量等價的東西?
- 16. C#等價於file_get_contents(PHP)
- 17. Linux:等待PID死亡
- 18. VB.NET相當於Var_dump($ myVar);死();
- 19. C#進程死亡
- 20. 有沒有C#等同於Python的unhexlify?
- 21. getchar()等價於scanf(「%c」)和putchar()等價於printf(「%c」)?
- 22. PHP等價於send和getattr?
- 23. PHP:關於會話死亡更改DB
- 24. 有沒有解決「解析死亡錯誤」的方法?
- 25. C++等價於NSOperation和NSOperationQueue
- 26. C#等價於imbue和numpunct
- 27. 是否有一個C#等價於m_nCmdShow?
- 28. PHP MySQL的功能死亡
- 29. PHP的死亡白屏
- 30. R:+ =(加上等於)和++(加上)等價於C++/c#/ java等等?
因此,打印文本和*然後*退出? – Ryan
好的,那將是一條路。只是想知道是否有一個命令來做到這一點,並打印 – Shamoon