ここにコメント (コメントの仕方がわからずこっちに書きます)
std::stof, std::stod, std::stoldなんてのがC++11にできてたんですね。知りませんでした。これまで、C++で文字列から数値型へ変換するときはboost::lexical_castを使うかstringstreamを使ってました。
試しにVC++2010 (Windows SDK 7.1)で試したらこの関数が使えました。これは便利。
Setting SDK environment relative to C:\Program Files\Microsoft SDKs\Windows\v7.1\. Targeting Windows 7 x64 Release C:\work\test>type test_stod.cpp #include <stdio.h> #include <string> int main(int argc, char *argv[]) { if (argc > 1) { printf("%.16f\n", std::stod(std::string(argv[1]))); } return 0; } C:\work\test>cl /EHsc test_stod.cpp Microsoft (R) C/C++ Optimizing Compiler Version 16.00.40219.01 for x64 Copyright (C) Microsoft Corporation. All rights reserved. test_stod.cpp Microsoft (R) Incremental Linker Version 10.00.40219.01 Copyright (C) Microsoft Corporation. All rights reserved. /out:test_stod.exe test_stod.obj C:\work\test>test_stod 1.234567890123456789 1.2345678901234567
ところで、Windowsで標準C++ライブラリを使ったコードをコンパイルするときgcc(g++)を使うとlibstdc++のリンクが厄介じゃないですかね?
CとかC++を使うのは、大抵、コンパイルしたEXEファイルを他のPC (スタンドアローンが多い) に移して実行するときなので、ネイティブなコードを作れるVC++かMinGWを使うことになりますが、MinGWのg++はスタティックにリンクすると巨大なexeファイルが出来るし、かといってダイナミックリンクにするとdllを一緒に持ち運ばなければいけないしで、どちらにせよイマイチなので、最近はC++で書いたコードをコンパイルするのはVC++と決めてます。
(Cならgccでも変なバイナリにはならないので、ちょっとしたプログラムはgccを使うこともあります)
Cygwinだとインストーラと一緒に入るからあんまり気にしなくていいのかな。CygwinはWindowsのパス表記とCygwin環境のパス表記の違いが嫌だったり、スタンドアローンなPCに入れるのが面倒なので使ってないです。