アカウント名:
パスワード:
C++11がでて7年も経つのにCとC++はどうして一緒にされてしまうのか。
C++もCと同じように書けるから一纏め。
でも、JavaからC++への乗り換えはまだ容易だが、JavaからCへの乗り換えは、C++からCへの乗り換えのように絶望的なので、ここでは一緒くたにするべきではないよな。
JavaとC++にあってCにないものはクラスと例外くらいで、それ以外はJavaとC++とCでそれぞれ大きく異なるが、C++はやはりCのほうにずっと近いクラスをCでエミュレートするのは面倒なだけで考えるようなことはなにもないJavaの例外を見た目でC++に移植するのは困難で、適切なライブラリさえあればC++の例外をCでエミュレートするほうが易しい(ただしポータブルなライブラリにはならないだろう)これは主にGCの有無に起因する
いやこの手の議論で「できること」を議論してはダメでしょう。極論、あらゆるプログラミング言語の機能は面倒なだけで考えるようなことはなにもなく機械語で実現できますよ。
そしていわゆるGCとは区別すべきですが、C++11以降ではスマートポインタを使います。
乗り換えの話に限定しているのですがね
#3493184はどういう条件(観点)で何と何を比較してどういう結論に至っているのかさっぱり読み取れない。何か言いたいことがあるなら、まずは推敲してからだ。
移植と書いてあるのに理解できないのなら口を挟まないでほしい新規のプロジェクトをJava以外の言語で始める話ではないそれは面倒な話ではあるが、絶望的というならそいつの頭が絶望的なだけだ
まあ長々書いてあるがCからC++への移植は拡張子変えるだけってことを言いたかったんだろ?
C->C++って、そんな簡単にいかんだろ。C が最近のものなら、それぐらいでも動くけど、2000年ぐらいまでの古いものは結構な頻度でコンパイルもできんし、動かすのに結構手間かかる。C ではキーワードじゃないから、new とか変数名に使っちゃうこと多かったし、for 内で宣言した変数のスコープも今と昔じゃ違う。auto キーワードの意味も違う。
え?拡張子を *.c から *.cpp にリネームすればいいだけじゃないの?
そんなわけない。もちろんそのままでコンパイルできることも多いが、少し古いものになるとコンパイル出来ないほうが多くなる。
コンパイルで失敗したのならコード修正すればいいのでは。
そうですね、拡張子を*.javaから*.cppにリネームするとコンパイルで失敗するのでコード修正すれば解決ですね。
Javaで書かれたソースをC++コンパイラでコンパイルする手間に比べたら、C言語のソースをC++コンパイラでコンパイルする手間なんて誤差の範囲でしょ。エラーはコンパイラが教えてくれるんだし。
なんでこんなに反発するやつがいるのかわからないが、自分に理解できない高度な話をされてムカつくということ?Exceptional C++に書いてある話でみんな知ってることなのだがJavaではオブジェクトがGCで回収されるときにファイナライザーが呼ばれるが(近頃ではファイナライザーはよくない慣習だとされている)、C++ではスタック上のオブジェクトはスコープを抜けるときに(例外で一気に抜けるときを含む)デストラクタが呼ばれ、この違いが移植・乗り換えの大きな障害にになるということなんだけど例外的な事象の扱いはExceptional C++にも書かれている通り最初に設計するべきことで、JavaもC++もメソッドが例外を投げる見た目が似ているからといって考えなしに考えなしに移植するとロクなことにはならない
考えなしに移植するとロクなことにはならないのはC++に限った話ではないし、この投票においてC/C++を別候補に分けるべきであったかに関して何の示唆も含まない。
# そもそもJavaの例外は欠陥品なので自分ならそのまま移植しようと思わない。
広義ではそういう話でしょ。> クラスをCでエミュレートするのは面倒なだけで考えるようなことはなにもない仮にこれが真実であろうと、こんな論理展開が通ってしまうなら議論にならない。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
普通のやつらの下を行け -- バッドノウハウ専門家
C/C++ (スコア:0)
C++11がでて7年も経つのに
CとC++はどうして一緒にされてしまうのか。
Re: (スコア:0)
C++もCと同じように書けるから一纏め。
でも、JavaからC++への乗り換えはまだ容易だが、JavaからCへの乗り換えは、C++からCへの乗り換えのように絶望的なので、ここでは一緒くたにするべきではないよな。
Re: (スコア:0)
JavaとC++にあってCにないものはクラスと例外くらいで、それ以外はJavaとC++とCでそれぞれ大きく異なるが、C++はやはりCのほうにずっと近い
クラスをCでエミュレートするのは面倒なだけで考えるようなことはなにもない
Javaの例外を見た目でC++に移植するのは困難で、適切なライブラリさえあればC++の例外をCでエミュレートするほうが易しい(ただしポータブルなライブラリにはならないだろう)
これは主にGCの有無に起因する
Re:C/C++ (スコア:0)
いやこの手の議論で「できること」を議論してはダメでしょう。
極論、あらゆるプログラミング言語の機能は
面倒なだけで考えるようなことはなにもなく機械語で実現できますよ。
そしていわゆるGCとは区別すべきですが、C++11以降ではスマートポインタを使います。
Re: (スコア:0)
乗り換えの話に限定しているのですがね
Re: (スコア:0)
#3493184はどういう条件(観点)で何と何を比較して
どういう結論に至っているのかさっぱり読み取れない。
何か言いたいことがあるなら、まずは推敲してからだ。
Re: (スコア:0)
移植と書いてあるのに理解できないのなら口を挟まないでほしい
新規のプロジェクトをJava以外の言語で始める話ではない
それは面倒な話ではあるが、絶望的というならそいつの頭が絶望的なだけだ
Re: (スコア:0)
まあ長々書いてあるがCからC++への移植は拡張子変えるだけってことを言いたかったんだろ?
Re: (スコア:0)
C->C++って、そんな簡単にいかんだろ。
C が最近のものなら、それぐらいでも動くけど、2000年ぐらいまでの古いものは結構な頻度でコンパイルもできんし、動かすのに結構手間かかる。
C ではキーワードじゃないから、new とか変数名に使っちゃうこと多かったし、for 内で宣言した変数のスコープも今と昔じゃ違う。auto キーワードの意味も違う。
Re: (スコア:0)
え?拡張子を *.c から *.cpp にリネームすればいいだけじゃないの?
Re: (スコア:0)
そんなわけない。
もちろんそのままでコンパイルできることも多いが、少し古いものになるとコンパイル出来ないほうが多くなる。
Re: (スコア:0)
コンパイルで失敗したのならコード修正すればいいのでは。
Re: (スコア:0)
そうですね、拡張子を*.javaから*.cppにリネームするとコンパイルで失敗するので
コード修正すれば解決ですね。
Re: (スコア:0)
Javaで書かれたソースをC++コンパイラでコンパイルする手間に比べたら、C言語のソースをC++コンパイラでコンパイルする手間なんて誤差の範囲でしょ。
エラーはコンパイラが教えてくれるんだし。
Re: (スコア:0)
なんでこんなに反発するやつがいるのかわからないが、自分に理解できない高度な話をされてムカつくということ?Exceptional C++に書いてある話でみんな知ってることなのだが
JavaではオブジェクトがGCで回収されるときにファイナライザーが呼ばれるが(近頃ではファイナライザーはよくない慣習だとされている)、C++ではスタック上のオブジェクトはスコープを抜けるときに(例外で一気に抜けるときを含む)デストラクタが呼ばれ、この違いが移植・乗り換えの大きな障害にになるということなんだけど
例外的な事象の扱いはExceptional C++にも書かれている通り最初に設計するべきことで、JavaもC++もメソッドが例外を投げる見た目が似ているからといって考えなしに考えなしに移植するとロクなことにはならない
Re: (スコア:0)
考えなしに移植するとロクなことにはならないのはC++に限った話ではないし、
この投票においてC/C++を別候補に分けるべきであったかに関して何の示唆も含まない。
# そもそもJavaの例外は欠陥品なので自分ならそのまま移植しようと思わない。
Re: (スコア:0)
そりゃJavaのランタイムを機械語で書けばJava同等のことができるけどそういう話はしてないでしょ
Re: (スコア:0)
広義ではそういう話でしょ。
> クラスをCでエミュレートするのは面倒なだけで考えるようなことはなにもない
仮にこれが真実であろうと、こんな論理展開が通ってしまうなら議論にならない。