std::stof, std::stod, std::stold

投稿日:

ここにコメント (コメントの仕方がわからずこっちに書きます)

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に入れるのが面倒なので使ってないです。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です