【初心者歓迎】C/C++室 Ver.103【環境依存OK】

レス数が950を超えています。1000を超えると書き込みができなくなります。
1デフォルトの名無しさん2018/07/01(日) 03:44:53.53ID:4MMF8cDN
エスケープシーケンスやWin32APIなどの環境依存なものもOK
そのような質問は必ず環境を書きましょう
半角空白やタブでのインデントはスレに貼ると無くなります

コードを貼れる所
http://codepad.org/
https://ideone.com/

前スレ
【初心者歓迎】C/C++室 Ver.102【環境依存OK】
http://mevius.5ch.net/test/read.cgi/tech/1509780815/

934デフォルトの名無しさん2018/11/29(木) 21:00:05.47ID:wegp6ebJ
全くの素人なんだがスタックサイズ以上の巨大なクラスをローカル変数として宣言したら即オバーフロー起こす?

935デフォルトの名無しさん2018/11/29(木) 21:05:46.12ID:SUocVvLK
まともなOSなら。
でもOSのない環境もあるし未定義。

936デフォルトの名無しさん2018/11/29(木) 21:10:05.86ID:wegp6ebJ
成程

937デフォルトの名無しさん2018/11/30(金) 08:17:26.96ID:J8op9N/7
スタックサイズのオーバーフローって普通、いちいちサイズ確認しながらエラー判断じゃなくて、
割り込み処理でやってるんだろ

938デフォルトの名無しさん2018/11/30(金) 12:27:47.34ID:lE6q+nZQ
環境依存
個々の話をしたいなら
> そのような質問は必ず環境を書きましょう

939デフォルトの名無しさん2018/11/30(金) 14:20:25.90ID:fQi4U1HQ
宣言しただけでアクセスもせず関数も呼ばないなら、
エラーにならないのがほとんどかもな。

940はちみつ餃子 ◆8X2XSCHEME 2018/11/30(金) 17:07:30.48ID:R1lF+QB2
自動変数を宣言しただけで使わないなら
最適化で消えちゃうこともあるかもな。

941デフォルトの名無しさん2018/12/01(土) 21:44:40.50ID:FAoigf3s
ああ、C++の標準ライブラリにLISPインタプリタが入らぬかのう……

942デフォルトの名無しさん2018/12/01(土) 21:49:38.80ID:FAoigf3s
TinySchemeのカスタムインタプリタ作った時、例外の扱いやら引数チェックやら面倒で面倒で。
どうせみんなやってるんだから、標準のAPIがあれば車輪の再発明をせずにすむのに。

943デフォルトの名無しさん2018/12/01(土) 21:54:14.62ID:o8nGgYR0
#include "stdafx.h"
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
int main(void)
{
string str;
getline(cin, str);
//cin >> str;
transform(str.begin(), str.end(), str.begin(), toupper);
cout << str << endl;
return 0;
}
このコードの「getline(cin, str);」と「cin >> str;」と「cout <<」
の部分にエラーが出るのですが何が原因かわかりますか?
別個にstd::を付けてもだめでした。解かる方いましたらよろしくお願いします。

944はちみつ餃子 ◆8X2XSCHEME 2018/12/01(土) 21:54:23.84ID:OSJOUMnn
GNU の公式なアプリケーション拡張用言語は Guile

945デフォルトの名無しさん2018/12/01(土) 22:04:56.03ID:JxP9GMs8
>>943
#include <string.h>
→#include <string>

946はちみつ餃子 ◆8X2XSCHEME 2018/12/01(土) 22:08:39.24ID:OSJOUMnn
>>943
toupper は <locale> にある関数テンプレートと、 <cctype> に普通の関数がある。
どれだかわかんなくて混乱している。

toupper を [](char ch){return std::toupper(ch);} という風にラムダ式でくるむのが一番楽な方法だと思う。

947デフォルトの名無しさん2018/12/01(土) 22:24:03.10ID:FAoigf3s
> Guile
Cygwinの中じゃなきゃ動かないじゃないですかw
WindowsのGUIアプリのカスタマイズに入用だったんですよ。

948はちみつ餃子 ◆8X2XSCHEME 2018/12/01(土) 22:59:29.94ID:OSJOUMnn
>>947
Windows だけでいいなら、
言語処理系を組込んでしまうよりはインターフェイスを COM にしておいて
適当な (OLE オートメーションに対応した) 言語を使ってもらう方が簡単かも。

949デフォルトの名無しさん2018/12/01(土) 23:02:01.99ID:o8nGgYR0
>>945
コンパイル通りましたありがとうございます!
>>946
レスありがとうございます。ラムダはC#のをちょっとかじったくらいなのでよくわからないです。

950デフォルトの名無しさん2018/12/02(日) 00:28:38.87ID:D1PcOCmT
>>947
v8でjavascriptは?
自作アプリに組み込んでるけどwindows環境でも簡単に導入できる。

951はちみつ餃子 ◆8X2XSCHEME 2018/12/02(日) 01:23:40.96ID:AEdnuZu9
Windows なら WSH がすごく良い仕組みなので、
その枠組みをぜひ活用して欲しいと思ってる。

952デフォルトの名無しさん2018/12/02(日) 15:34:26.54ID:6M/RvafZ
>>933
時代を感じるな:-|

953デフォルトの名無しさん2018/12/02(日) 16:20:56.00ID:qwr+Mk5T
今は日本語や漢字にとどまらず、Unicodeで許されるあらゆる言語の文字を使ってるから、表現性はとても豊か(何がだ)

954デフォルトの名無しさん2018/12/02(日) 16:34:18.61ID:FIqRJPSc
[](){}と括弧揃い踏みなところがラムダ式の素晴らしいところ
キャプチャの必要性が分かるまで15時間も掛かった

955デフォルトの名無しさん2018/12/02(日) 19:18:33.98ID:dV4bdQkD
>>950>>951
今思えば全く勉強不足だった...
階層的データ構造(CADとか)はS式と思い込んでいたのよ

956デフォルトの名無しさん2018/12/03(月) 00:53:09.20ID:G9VPwKeW
#include <iostream>
#include <string>

using namespace std;

int main(void)
{
string x;
cin >> x;

for (int i = 0; i != x.size() - 1; ++i)
{
cout << stoi(x[i]) << endl;
}
}

957デフォルトの名無しさん2018/12/03(月) 00:54:55.68ID:G9VPwKeW
⬆が動かないのですがどこが間違っているのかご教示下さい

C11は対応しています

958さまよえる蟻人間 ◆T6xkBnTXz7B0 2018/12/03(月) 01:19:47.71ID:djmRhrD0
iはsize_t型にする。
文字コードや整数値に対しては、stoiは使えない。別の関数を使う必要がある。

959はちみつ餃子 ◆8X2XSCHEME 2018/12/03(月) 01:54:00.97ID:8f3NbPLB
>>957
念のために確認するけど C11 って書いてるのは C++11 の間違いだよね?

960デフォルトの名無しさん2018/12/03(月) 06:05:42.99ID:szUqPRvW
>>956 が動かないってのはコンパイルエラーということだよね。

string x; だから x[i] の型は char で、
一方 stoi() が要求する引数は string であるからして...

961デフォルトの名無しさん2018/12/03(月) 15:49:30.56ID:bFjQrMvM
こういうことをしたいのではないか?

ここを    cout << stoi(x[i]) << endl;
こうする   cout << (isdigit(x[i])? x[i] - '0': 0) << endl;

962デフォルトの名無しさん2018/12/05(水) 04:14:09.40ID:yf36y6mU
クラスの中の宣言部分で
var a = new classA(32);
がある時にこの生成時間を測るには
p1out = 1;
var a = new classA(32);
p1out = 0;
ってやってP1.1をオシロで確認したらいいのだろうか?

963デフォルトの名無しさん2018/12/05(水) 07:38:40.57ID:NuamTKdf
>>962
varは使えない

964デフォルトの名無しさん2018/12/05(水) 10:48:56.15ID:oN9rDST1
スタック領域と静的領域の違いがよくわかりません

965デフォルトの名無しさん2018/12/05(水) 11:50:29.68ID:UMfTWITZ
スタック領域に確保した変数のメモリはその変数のスコープ終了時に開放される
静的領域はスコープが終了しても開放されない

966デフォルトの名無しさん2018/12/05(水) 14:18:35.25ID:2sSegHBZ
だがちょっとまってほしい
本当にそれだけだろうか?

967デフォルトの名無しさん2018/12/05(水) 15:25:13.20ID:sPX0/PdA
質問はヒープには触れてないのでそれでいい

968デフォルトの名無しさん2018/12/05(水) 16:03:55.84ID:ccXzaFBs
静的領域は、アプリの実行前に確保する。
サイズも変動しない

スタック領域は、アプリの実行中に確保・解放する。
サイズも変動するし、領域を使い果たすと、stack overflow というエラーが起きる

事前にサイズがわからず、サイズが変動して、エラーが起きる可能性もあるので、
組み込み制御装置では、制限される事もある

969デフォルトの名無しさん2018/12/05(水) 16:06:30.86ID:OoPTOqyP
スタックの理解はCPUの動作原理から学んでいくとわかりやすいよ

970デフォルトの名無しさん2018/12/05(水) 17:12:15.31ID:ifntcr/4
組込だとスタック4つまでとかあるね。
下手に関数の中で関数呼び出し出来ない。

今はだいぶ緩和されてるけど、数が増えただけでPCほど緩くはない。

971デフォルトの名無しさん2018/12/05(水) 21:08:04.50ID:vV3Kttot
int num;
unordered_set<int> ust;
auto itr = ust.find(num);
itr == ust.end() ? ust.insert(num) : ust.erase(num);
とすると、
error: operands to ?: have different types
というエラーがでます
三項間演算子を使わずにif文を使って書くと普通に上手く行くのですが、なぜエラーがでるのでしょうか

972デフォルトの名無しさん2018/12/05(水) 21:30:51.95ID:8vnwU0Eo
この前パソコンで100回くらいの再帰を書いたけど大丈夫だった
それともgccがよしなにやってんの?

973さまよえる蟻人間 ◆T6xkBnTXz7B0 2018/12/05(水) 21:33:08.67ID:wa0lRPZw
>>971
insertとeraseの戻り値の型が違うんじゃね?

974デフォルトの名無しさん2018/12/06(木) 06:42:35.96ID:6JYs1FEy
三項演算子が絡んだ式の (条件 ? 値A : 値B) 部分で
値Aと値Bの型が異なると、三項式(と言う呼び方で良いものか)全体としての
結果の型が確定しないからダメって感じかねぇ。

どうせ値を使っていない式文だからいいじゃん、は通らないと。

975デフォルトの名無しさん2018/12/06(木) 08:07:06.33ID:puhZa8TL
>>974
そうだね。
値A、値Bともに(void)でキャストすればコンパイルできた気がする。
そんなことするくらいなら素直にif/elseにすべきだけど。

976デフォルトの名無しさん2018/12/06(木) 08:18:42.80ID:n6QuFYEH
コンマ演算子?は使えないのかしら

977デフォルトの名無しさん2018/12/06(木) 08:20:40.49ID:A1HJrZlC
条件A ? (値A, 0) : (値B, 0)

とか?

if で良いだろ

978デフォルトの名無しさん2018/12/06(木) 09:05:40.26ID:THHCczvq
スタック領域は同じコンパイラでもオプションで変えられる事も多い(組み込みには言及しない)
末尾再帰だとループに展開されたりもするから(外から見た挙動が同じならC/C++はコンパイル後の表現を縛らない)、再帰イコールしぬとは限らない

979デフォルトの名無しさん2018/12/06(木) 21:02:47.97ID:H1lCEtqj
副作用しかないときと値がある時で使い分けないとな

980デフォルトの名無しさん2018/12/06(木) 23:32:58.57ID:/m41z1tb
そう言えばC++20では[ , ]って形は多次元配列のために使われるんだな

981デフォルトの名無しさん2018/12/07(金) 14:38:45.55ID:lkrG/qbb
型の違いでっていうのも判るが
結局評価だけして代入しないなら
(副作用を期待しないって条件付きだが)
最適化で消される行かも知れんな

982デフォルトの名無しさん2018/12/13(木) 22:22:08.57ID:JDKMBsk/
https://ideone.com/pUrvlb
VisualStudioCommunity2017 ver15.9.4でこのコードをビルドすると
「error C2440: '<function-style-cast>': 'int' から 'Lit' に変換できません。」
というエラーが10行目で出るんだけど、何が悪いんだろうか。

983デフォルトの名無しさん2018/12/14(金) 01:28:14.98ID:l0obV/M9
Parser() { reg(Lit{ 1 }); } → Parser() { ::reg(Lit{ 1 }); }
コレでいける
理由は知らん

984デフォルトの名無しさん2018/12/14(金) 05:31:56.42ID:Op4CRLIg
ありがとう
この方法で凌ぐことにします

新着レスの表示
レス数が950を超えています。1000を超えると書き込みができなくなります。
レスを投稿する