小编mas*_*oud的帖子

Scanner.reset()不起作用

这段代码应该从用户获得一个整数,然后完成程序.如果用户输入的号码无效,则会再次询问用户.

捕获异常后,它用于Scanner.reset()重置扫描仪,但它不起作用.并重新抛出先前的异常.

Scanner in = new Scanner(System.in);
while (true) {
    try {
        System.out.print("Enter an integer number: ");
        long i = in.nextLong();
        System.out.print("Thanks, you entered: ");
        System.out.println(i);
        break;
    } catch (InputMismatchException ex) {
        System.out.println("Error in your input");
        in.reset(); // <----------------------------- [The reset is here]
    }
}
Run Code Online (Sandbox Code Playgroud)

我以为Scanner.reset()会重置一切并忘记异常.我在询问用户输入新内容之前先说了一下.

如果我说错了,那么正确的方法是什么?

java

6
推荐指数
1
解决办法
5365
查看次数

初始化列表,用于初始化2D std :: array成员

如何std::array通过初始化列表初始化嵌套(2D)?

template <std::size_t W, std::size_t H>
class Block
{
    std::array<std::array<int, W>, H> block;
public:

    template <typename ...E>
    Block(E&&...e) : block {{std::forward<E>(e)...}} {}
};
Run Code Online (Sandbox Code Playgroud)

该类Block应该能够初始化block成员,如下所示:

Block<3, 2> b {{ {1, 2, 3}, {4, 5, 6} }};
Run Code Online (Sandbox Code Playgroud)

注意:我们可以std::array直接在C++ 11中初始化:

std::array<std::array<int, 3>, 2> b {{ {1, 2, 3}, {4, 5, 6} }};
Run Code Online (Sandbox Code Playgroud)

我正在使用gcc-4.9.0

c++ arrays c++11

6
推荐指数
1
解决办法
908
查看次数

C++中(base - >*&Func)()的含义是什么?

这是简单的类定义,如

class Base{
    public:
        virtual void Func(){
            cout<<"Func in Base"<<endl;
        }
 };

 class Derived : public Base{
     public:
         virtual void Func(){
             cout<<"Func in Derived"<<endl;
         }
 }

 Base *b = new Derived();
Run Code Online (Sandbox Code Playgroud)

和声明

 (b->*&Base::Func)();
Run Code Online (Sandbox Code Playgroud)

调用Func的派生版本,不同于b-> Base :: Func(),它按预期调用基本版本,为什么会发生这种情况,这个调用的含义到底是什么?

c++ polymorphism vtable

6
推荐指数
2
解决办法
208
查看次数

针对Qt项目的Netbeans"-O3"优化

我在Netbeans 7.0中编写Qt/C++编码,我希望-O3为我的项目启用编译器切换.构建项目的默认优化级别是-O2Netbeans.

我这样添加-O3:

属性>构建> Qt>专家>自定义定义>添加QMAKE_CXXFLAGS += -O3.

但是在重建项目时,我会看到每个.cpp文件:

g ++.exe -c -O3 -O2 -frtti -fexceptions -mthreads -Wall ...... test.cpp

我认为第一个-O3是第二个-O2和优化级别-O2

如何配置我的项目通过Properties > Build > ....-O3?或者,我该如何删除-O2

c++ qt netbeans

5
推荐指数
1
解决办法
2521
查看次数

Qt内存管理容器

我知道在Qt中有很多关于内存管理的问题.我也读了这些问题:

但就我而言,我再次感到困惑!

我有一个QTableWidget名字myTable.我通过以下方式添加运行时小部件setCellWidget:

void MyClass::build()
{
    for (int i=LOW; i<HIGH; i++)
    {
        QWidget *widget = new QWidget(myTable);
        //
        // ...
        //
        myTable->setCellWidget(i, 0, widget);
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,我删除所有项目,如下所示:

void MyClass::destroy()
{
    for (int i = myTable->rowCount(); i >= 0; --i)
        myTable->removeRow(i);
}
Run Code Online (Sandbox Code Playgroud)

这些方法在很长一段时间内多次调用.而且myTable,这些小部件的父母将按照程序的生命周期生活.

剂量方法destroy()相当自动释放内存?或者我必须自己delete分配小部件,如下所示?

void MyClass::destroy2() // This maybe causes to crash !!
{
    for (int i = myTable->rowCount(); i >= 0; --i)
    {
        QWidget *w …
Run Code Online (Sandbox Code Playgroud)

c++ qt memory-leaks memory-management

5
推荐指数
1
解决办法
1212
查看次数

滚动非常大的GtkDrawingArea

我有一个GtkDrawingArea用于可视化数据.根据数据库和用户输入,绘图可能会变得非常大(大于允许的最大GtkDrawingArea大小).因此,我想使用与当前窗口一样大的绘图区域,并在滚动时手动更新它.

如果我使用ScrolledWindow + Viewport方法将滚动条添加到绘图区域,它显然不起作用,因为绘图区域不够大,不需要滚动条.

有没有什么方法可以让视口欺骗认为底层小部件比实际大?如果不是什么是解决这个问题的最佳方法?

注意:我使用Gtk2并且不可能切换到Gtk3.

c c++ gtk gtk2

5
推荐指数
1
解决办法
631
查看次数

初始化指针

我目前对以下语句感到困惑 - 虽然这个语句在编译期间会产生错误,但事实并非如此.

// statement 1:
someclass* q(someclass());
Run Code Online (Sandbox Code Playgroud)

我理解这句话是否是这样的

// statement 2:
someclass* q(&someclass());
Run Code Online (Sandbox Code Playgroud)

我想知道为什么语句1不会产生错误,或者即使它有效(我在幕后有什么遗漏?)

c++

5
推荐指数
1
解决办法
157
查看次数

带有默认目录的QFileDialog

如何QFileDialog使用默认目录创建跨平台?

我有一个代码

QFileDialog::getSaveFileName(this,"Save File","/home",tr("Any File (*.*);;Text file (*.txt);;Compressed file (*.zip *.tar *.rar);;Image (*.png *.xpm *.jpg *.tiff)"))
Run Code Online (Sandbox Code Playgroud)

这适用于Linux.但在windows中,用户目录将是"C:\Users".我不知道在Mac.我需要使用默认目录作为用户文件夹进行此对话.怎么做?

我看到了,toNativeSeparators()但这需要更多代码.有没有最简单的方法呢?

c++ user-interface qt cross-platform qt4

5
推荐指数
1
解决办法
6683
查看次数

二进制兼容更改返回类型C++

我有一个关于二进制兼容性的问题.我有一个类A,它包含一个公共方法foo()和一个属性字符串_foo;

const string foo() {return _foo;}
Run Code Online (Sandbox Code Playgroud)

当我改为

const string& foo(){return _foo;}
Run Code Online (Sandbox Code Playgroud)

它仍然是二进制兼容的吗?谢谢你的帮助!

c++ binary-compatibility

5
推荐指数
2
解决办法
228
查看次数

这是一个nullptr吗?

阅读这个 Q&A,我认为p不应该是一个nullptr即使x0.我明白了吗?

int main()
{
    int x = 0;

    std::cin >> x; // Enter `0`

    void *p = (void *)x; // or: void *p = reinterpret_cast<void*>(x);


    if (!p)
        std::cout << "p is nullptr" << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

输入0标准输入后,该消息p is nullptr将显示在我的GCC中.根据链接,它不应该评估nullptr,但结果不是我的期望.

代码是否未定义行为?或未指明的结果?为什么要评估nullptr

c++

5
推荐指数
1
解决办法
464
查看次数