小编doc*_*doc的帖子

在C++中仅对空私有构造函数使用声明是否正确?

例如这是正确的:

class C 
{
   private: 
     C();
     C(const & C other);
}
Run Code Online (Sandbox Code Playgroud)

或者您应该提供定义:

class C 
{
   private: 
     C() {};
     C(const & C other) {};
}
Run Code Online (Sandbox Code Playgroud)

?谢谢你目前的答案.让我们扩展这个问题 - 编译器是否在其中一个示例中生成了更好的代码?我可以想象为ctor强制编译器提供体在编译单元中包含一些(空)代码?这对于自动生成的代码也是如此吗?

c++ constructor declaration copy-constructor default-constructor

4
推荐指数
3
解决办法
1536
查看次数

这段代码在C++中是否合法

我刚刚发现,当涉及到模板时,这个代码在g ++ 3.4.2中编译,并且除非不调用m(),否则它可以工作:

template <typename T>
class C
{
     T e;

     public:
        C(): e(0) {};

    void m()
    {
        e = 0;
    };
 };
Run Code Online (Sandbox Code Playgroud)

现在可以创建和使用实例

C<const int> c;
Run Code Online (Sandbox Code Playgroud)

直到c.m()没有被称为没有编译错误,但这是合法的吗?

c++ templates const const-correctness

4
推荐指数
1
解决办法
251
查看次数

Qt Creator - 代码正在运行,但我收到来自IDE的错误消息

一旦我运行我的代码(请注意我只使用C,没有QT和没有C++),我从IDE中的应用程序输出中获得以下消息:

无法获得劣质的句柄:参数不正确.

当我删除makefile和debug/release文件夹时它正在运行,但过了一段时间后我仍然收到错误.这不是一个问题,代码运行,一切都很好,但这个错误弹出,这是非常烦人的.

.pro文件的内容是:

TEMPLATE = app
CONFIG += console
CONFIG -= app_bundle
CONFIG -= qt
QMAKE_CC = gcc -std=c99
SOURCES += main.c
Run Code Online (Sandbox Code Playgroud)

提前致谢!


编辑:我添加了C++标记,因为在我的情况下,C++控制台应用程序也会发生此错误.

c c++ ide qt qt-creator

4
推荐指数
1
解决办法
3514
查看次数

类模板中的Typedef评估

下面的代码用g ++编译,但无法用clang编译.

struct X;

template <typename T>
struct Traits
{
    typedef typename Traits<T>::Container Container;
};

template <>
struct Traits<X>
{
    typedef std::vector<X *> Container;
};

int main()
{
    Traits<X>::Container container;
    return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)

clang错误信息:

main.cpp:9:30: error: no type named 'Container' in 'Traits<T>'
Run Code Online (Sandbox Code Playgroud)

编译器是否应该评估typedef而不用实际类型替换template参数?哪个编译器是对的?

clang:http://coliru.stacked-crooked.com/a/fef7725827074e4f

gcc:http://coliru.stacked-crooked.com/a/79e17031fcabcd83

c++ templates typedef language-lawyer

4
推荐指数
1
解决办法
158
查看次数

构造函数中的静态变量,有任何缺点或副作用吗?

我想做什么:每当要在程序中使用类的实例时运行一些先决条件代码.此代码将检查要求等,并且只应运行一次.

我发现这可以使用另一个对象作为构造函数内的静态变量来实现.这是一个更好的图片示例:

class Prerequisites
{
     public:
         Prerequisites() {
              std::cout << "checking requirements of C, ";
              std::cout << "registering C in dictionary, etc." << std::endl;
         }
};


class C
{
    public:
         C() {
             static Prerequisites prerequisites;
             std::cout << "normal initialization of C object" << std::endl;
         }
};
Run Code Online (Sandbox Code Playgroud)

困扰我的是,到目前为止我还没有看到类似的静态变量.是否有任何缺点或副作用或我遗失了什么?或者也许有更好的解决方案?欢迎任何建议.

c++ constructor initialization static-variables

3
推荐指数
1
解决办法
7249
查看次数

是否有一个C++等同于Java的STL容器类的Collection接口?

我想传递任意容器作为函数的参数并迭代它(没有擦除也没有推送元素).不幸的是,似乎没有标准的方法来做到这一点.

我想到的第一个解决方案是一个接口(让我们称之为CollectionInterface),它将由包装STL容器的类实现.所以函数声明看起来像:

f(const CollectionInterface * collection);
Run Code Online (Sandbox Code Playgroud)

或者,我正在考虑方法模板,它具有在编译时保持绑定的优点:

template <class CONTAINER> void f(const CONTAINER & collection);
Run Code Online (Sandbox Code Playgroud)

你认为哪种方式更好?

c++ collections containers stl function-templates

3
推荐指数
1
解决办法
2026
查看次数

我是否应该使用互斥锁保护基本类型的操作,以便在C++中具有线程安全性?

对于相当简单的操作,实现线程安全的最佳方法是什么?

考虑一对功能:

void setVal(int val)
{
    this->_val = val;
}

int getVal() {
     return this->_val;
}
Run Code Online (Sandbox Code Playgroud)

因为即使基本类型的赋值也不保证是原子的,我应该以下列方式修改程序中的每个getter和setter是否是线程安全的?

void setVal(int val)
{
    this->_mutex.lock();
    this->_val = val;
    this->_mutex.unlock();
}

int getVal() {
     this->_mutex.lock();
     int result = this->_val;
     this->_mutex.unlock();
     return result;
}
Run Code Online (Sandbox Code Playgroud)

c++ mutex locking atomic thread-safety

3
推荐指数
1
解决办法
1750
查看次数

搜索QVariantList?

我有一份SKU(SKU - Stock Keeping Unit)列表QVariantList.

有没有办法搜索列表并从列表中获取数据?

例如,我想在列表中搜索"sku 0001"并获取SKU的相关标题.

谢谢

c++ qt

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

是否有任何替代方法来制作const版本的类?

在C++中,我经常面临一种情况,当我需要编写const和非const版本的类,类似于const_iterator和标准库中的迭代器.

class const_MyClass
{
  public:
      const_MyClass(const int * arr):
         m_arr(arr)
      {
      }

      int method() const;  //does something with m_arr without modifying it

  private:
      const int * m_arr;
}

class MyClass
{
  public:
      MyClass(int * arr):
         m_arr(arr)
      {
      }

      int method() const;  //does something with m_arr without modifying it

      void modify(int i);  //modify m_arr

  private:
      int * m_arr;
}
Run Code Online (Sandbox Code Playgroud)

这里的问题是,我需要重复的整个代码const_MyClass中MyClass的API和分发任何变化这两个类.因此,有时我会继承const_MyClass并做一些const_casts,这也不是完美和漂亮的解决方案.仍然当我想const_MyClass通过引用传递实例时,它看起来很蠢:

void func(const const_MyClass & param)
Run Code Online (Sandbox Code Playgroud)

实例参数标有两个"consts",它只有const方法......

这是const构造函数的用武之地,但是有没有现有的替代方案?


有些人用例子来更好地解释问题:

//ok to modify data
void …
Run Code Online (Sandbox Code Playgroud)

c++ const-correctness

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

为什么在C++中使用if-else?

如果你可以创建另一个if语句,为什么要使用if-else语句?

多个ifs的示例:

input = getInputFromUser()
if input is "Hello"
    greet()

if input is "Bye"
    sayGoodbye()

if input is "Hey"
    sayHi()
Run Code Online (Sandbox Code Playgroud)

使用else-if的示例:

input = getInputFromUser()
if input is "Hello"
    greet()

else if input is "Bye"
    sayGoodbye()

else if input is "Hey"
    sayHi()
Run Code Online (Sandbox Code Playgroud)

c++ if-statement

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

编译器是否能够对从dll导入的函数进行过程集成?

我知道,现代编译器不仅可以对内联定义的函数进行过程集成,还可以对驻留在目标文件中的函数进行过程集成.但是当您针对共享库(尤其是dll)编译程序时,这也是正确的吗?粗略地说:将函数代码从dll复制到可执行文件中,如果这是可取的吗?

c c++ dll inline

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

-std = c ++ 11编译器标志会在某些时候默认吗?

如标题.它是默认的还是使用我们将不得不添加的C++ 11功能-std=c++11?

现在,由于这个选项,C++ 11仍然感觉像一些额外的,非标准的东西.

要指定编译器,-std=c++11clang,g ++甚至ICC都使用flag.

c++ compiler-flags c++11

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

sizeof(unsigned char)也保证为1吗?

我认为标题是不言自明的,但更好的格式.

难道sizeof(unsigned char)还保证是1?


我不相信这个问题是重复的,因为:

  • C与C++(标签摘录:)不同...It was originally designed as an extension to C, and keeps a similar syntax, but is now a completely different language....
  • char可以是签名或未签名.除非你得到标准的保证,否则没有理由假设sizeof(unsigned char)== sizeof(char)因此问题.
  • 即使您将C与C++混淆,答案也不会重叠.

c++ sizeof

0
推荐指数
2
解决办法
846
查看次数