相关疑难解决方法(0)

为什么"使用命名空间std"被认为是不好的做法?

我已经告诉别人,编写using namespace std;代码是错误的,我应该用std::coutstd::cin直接代替.

为什么被using namespace std;认为是不好的做法?是低效还是冒着声明模糊变量(与名称std空间中的函数具有相同名称的变量)的风险?它会影响性能吗?

c++ namespaces using-directives std c++-faq

2486
推荐指数
36
解决办法
78万
查看次数

如何在C++中正确使用名称空间?

我来自Java背景,使用包,而不是命名空间.我习惯于将一起工作的类放在一起形成一个完整的对象,然后再从该包中重用它们.但现在我在使用C++.

你如何在C++中使用命名空间?您是为整个应用程序创建单个名称空间,还是为主要组件创建名称空间?如果是这样,如何从其他命名空间中的类创建对象?

c++ namespaces

229
推荐指数
10
解决办法
18万
查看次数

使用std命名空间

关于std命名空间使用'using'似乎有不同的看法.

有人说使用' using namespace std',其他人说不要,而是先加上与' std::' 一起使用的std函数,而其他人则说使用这样的东西:

using std::string;
using std::cout;
using std::cin;
using std::endl;
using std::vector;
Run Code Online (Sandbox Code Playgroud)

对于要使用的所有std函数.

各自的优点和缺点是什么?

c++ namespaces

105
推荐指数
4
解决办法
9万
查看次数

ios_base :: sync_with_stdio的意义(假); cin.tie(NULL);

包括什么意义

ios_base::sync_with_stdio(false);
cin.tie(NULL);
Run Code Online (Sandbox Code Playgroud)

在C++程序中?

在我的测试中,它加快了执行时间,但有一个测试用例,我应该担心包含这个吗?

这两个陈述总是必须在一起,或者第一个是否足够,即忽略cin.tie(NULL)

此外,如果其值已设置为false?允许同时使用C和C++命令吗?

https://www.codechef.com/viewsolution/7316085

上面的代码运行正常,直到我scanf/printf在C++程序中使用值为true.在这种情况下,它给出了分段错误.可能的解释是什么?

c c++

105
推荐指数
4
解决办法
6万
查看次数

将cout和stdout重定向到C++中用于单元测试的字符串

我正在努力在单元测试下获取一些遗留代码,有时感知现有程序行为的唯一方法是从控制台输出.

我在网上看到很多关于如何将stdout重定向到C++中的另一个文件的例子,但有没有办法可以将它重定向到内存中的流,这样我的测试就不必依赖磁盘了?

我希望将遗留代码发送到stdout的任何内容转换为std :: string,这样我就可以轻松地查找输出.

编辑

遗留代码是如此糟糕,以至于用户混合使用cout << ..printf.这是我到目前为止:

void TestSuite::setUp(void)
{
    oldStdoutBuf = std::cout.rdbuf();
    std::cout.rdbuf(consoleOutput.rdbuf());
}
void TestSuite::tearDown(void)
{
    std::cout.rdbuf(oldStdoutBuf);
}
Run Code Online (Sandbox Code Playgroud)

问题是,这并没有用printf捕捉输出.我想要两件兼得的东西.有任何想法吗?

c++ unit-testing stdout legacy-code

28
推荐指数
1
解决办法
2万
查看次数

Visual Studio - 如何在非控制台应用程序中查看cout输出?

输出到调试窗口似乎相当繁琐.cout如果我正在编写非控制台信息,我在哪里可以找到输出?

喜欢:

double i = a / b;
cout << b << endl;//I want to check out whether b is zero. It seems the output cannot be found anywhere.
Run Code Online (Sandbox Code Playgroud)

c++ visual-studio

26
推荐指数
5
解决办法
5万
查看次数

freopen()等效于c ++流

使用c-style i/o进行编程时,我有时会使用freopen()重新打开stdin进行测试,这样我就不必重复输入输入.我想知道是否有相当于c ++的i/o流.此外,我知道我可以使用管道在命令行/终端/任何炎症上重定向它但我想知道是否有办法在我的代码中执行它(因为你可以看到,我不是很了解CL/T/W).

c c++ io

19
推荐指数
2
解决办法
2万
查看次数

C++ Cout&Cin&System"模糊"

我只是用c ++编程,突然之间所有的"cout"和"cin"都是错误和"不明确".包括系统.

我不知道为什么会这样.一切都很好,我正在编写相同的程序大约2个小时,当它刚刚发生时.

编辑

我仍然可以毫无错误地运行程序,但它们在文本上显示为错误,红色涂鸦线.发生了什么?

我正在使用Visual Studio 2013 IDE,无论它是什么.

#include <iostream>
#include <ctime>
#include <string>
#include <Windows.h>
#include <cstdlib>
#include <stdlib.h>

using namespace std;

int main()
{

struct Gun
{
    string name;
    int damage;
    int cost;
    bool purchased;
    bool equipped;

} M4A1, FAMAS;

//WEAPONS INFO
M4A1.cost = 50;
M4A1.damage = 5;
M4A1.purchased = false;
M4A1.equipped = false;

FAMAS.cost = 300;
FAMAS.damage = 10;
FAMAS.purchased = false;
FAMAS.equipped = false;
//WEAPONS INFO

//-----PLAYER(BEGIN)-----

struct Player
{
    int health;
    string name;
    int …
Run Code Online (Sandbox Code Playgroud)

c++

15
推荐指数
1
解决办法
8万
查看次数

如何解决C++命名空间和全局函数之间的名称冲突?

如果我在log某处定义名称空间并使其在全局范围内可访问,则会与double log(double)标准cmath标题冲突.实际上,大多数编译器似乎也同意它 - 大多数版本的SunCC,MSVC,GCC - 但GCC 4.1.2没有.

不幸的是,似乎没有办法解决歧义,因为using声明对于命名空间标识符是不合法的.你知道我可以log::Log在全局命名空间中编写任何方式cmath吗?

谢谢.

编辑:有人会知道C++ 03标准对此有何看法?我原以为范围运算符足以消除log下面代码示例中的使用歧义.

#include <cmath>

namespace foo
{

namespace log
{

struct Log { };

} // namespace log

} // namespace foo


using namespace foo;

int main()
{
    log::Log x;

    return 0;
}

// g++ (GCC) 4.1.2 20070115 (SUSE Linux)

// log.cpp: In function `int main()':
// log.cpp:20: error: reference to `log' is ambiguous
// /usr/include/bits/mathcalls.h:110: …
Run Code Online (Sandbox Code Playgroud)

c++ namespaces name-conflict

10
推荐指数
2
解决办法
1万
查看次数

将cin重定向到字符串

我希望cin从字符串中读取输入.

有没有办法让它这样做?

像这样的东西:

const char * s = "123 ab";
cin.readFrom(s);//<---- I want something like this

int i;
cin>>i;

cout<<i; //123
Run Code Online (Sandbox Code Playgroud)

c++ iostream

10
推荐指数
2
解决办法
4059
查看次数