小编elv*_*kaj的帖子

c ++ 11返回值优化还是移动?

我不明白何时应该使用std::move,何时应该让编译器优化...例如:

using SerialBuffer = vector< unsigned char >;

// let compiler optimize it
SerialBuffer read( size_t size ) const
{
    SerialBuffer buffer( size );
    read( begin( buffer ), end( buffer ) );
    // Return Value Optimization
    return buffer;
}

// explicit move
SerialBuffer read( size_t size ) const
{
    SerialBuffer buffer( size );
    read( begin( buffer ), end( buffer ) );
    return move( buffer );
}
Run Code Online (Sandbox Code Playgroud)

我应该使用哪个?

c++ move return-value-optimization rvo c++11

166
推荐指数
4
解决办法
8万
查看次数

Win-builds与MinGW-builds之间的区别

有谁知道Win-buildsMinGW-builds之间的区别?我对Windows的C++ 11(14)编译器非常感兴趣,但遗憾的是MSVC尚未完全符合C++ 11标准.

c++ windows gcc mingw c++11

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

gmtime_r和gmtime_s之间的区别

这两个功能有什么区别?我正在使用MinGW 4.8.0.

我知道这gmtime_r是线程安全的(但如果从同一个线程多次调用,则不安全),但我不明白gmtime_s

c++ time thread-safety

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

return {}和return Object {}之间的区别

这两个功能之间有什么显着差异吗?

struct Object {
    Object(int i) : i{i}
    {
    }

    int i;
};

Object f() { return {1}; }
Object g() { return Object{1}; }
Run Code Online (Sandbox Code Playgroud)

c++ initialization c++11 list-initialization

18
推荐指数
2
解决办法
1078
查看次数

为什么从一个具体的类派生出来是一个糟糕的设计

我正在阅读有关非虚拟接口模式的内容:Herb Sutter正在讨论为什么虚拟功能在大多数情况下必须是私有的,在某些情况下受到保护而从不公开.

但在文章的最后他写道:

不要来自具体的课程.或者,正如Scott Meyers在更有效的C++第33项中所述,[8]"使非叶类抽象化".(不可否认,它可能在实践中发生 - 在其他人编写的代码中,当然不是由您自己编写! - 在这种情况下,您可能必须拥有一个公共虚拟析构函数,以适应已经很糟糕的设计.更好地重构但是,如果可以的话,修复设计.)

但我不明白为什么这是一个糟糕的设计

c++ inheritance

16
推荐指数
4
解决办法
3219
查看次数

timegm跨平台

我正在使用Visual Studio c ++ Compiler(2010),但该库具有不同的ANSI C和POSIX库函数的实现.

ANSI C函数和Windows CRT实现有什么区别?例如tzset()和/ _tzset()setenv()ans有_setenv()什么区别?似乎以同样的方式做同样的事情......

我正在使用msvc(2010),我是否更喜欢Windows CRT实现?

编辑1

好吧,我希望以可移植的方式转换一个以UTC表示的结构tm time_t,但是没有可移植的方法来做到这一点.我要为不同的平台(Android,Linux,Windows,Windows CE)编写功能.

我已经看过这个使用的stackoverflow帖子setenv,getenvtzset

EDIT2

不幸的是,经过一些测试,我发现getenv("TZ")在Windows上返回一个空指针.但为什么如此困难将UTC时间结构转换为time_t

编辑3

从Boost中我发现了boost/chrono/io/time_point_io.hpp中的这段代码.希望这对我有所帮助.

inline int32_t is_leap(int32_t year)
{
  if(year % 400 == 0)
  return 1;
  if(year % 100 == 0)
  return 0;
  if(year % 4 == 0)
  return 1;
  return 0;
}
inline int32_t days_from_0(int32_t year)
{
  year--;
  return 365 * year …
Run Code Online (Sandbox Code Playgroud)

c++ crt msvcrt visual-c++

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

如何将Boost.Log重定向到文件

我想在并发应用程序中使用简单的日志文件.我已经下载了Boost.Logv2.0并使用编译它Boost 1.53.0.

问题是Boost.Log控制台上的输出.我正在使用BOOST_LOG_TRIVIAL(trace).

有没有一种很好的方法来重定向BOOST_LOG_TRIVIAL到文件?

c++ logging boost-log

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

在枚举中转换整数的安全方法

如果我将一个整数转换为枚举类会发生什么,但枚举中不存在该值?例如:我想要一个函数来测试整数是否具有来自枚举类的某个值:

enum class EnumClass { A, B = 4, C = 9, D = 60 };

bool checkEnumClass( int v )
{
    switch( static_cast< EnumClass >( v ) )
    {
    case EnumClass::A:
    case EnumClass::B:
    case EnumClass::C:
    case EnumClass::D:
        return true;
    default:
        return false;
    }
}

checkEnumClass( 0 ) == true;
checkEnumClass( 7 ) == false;   // is this true?
Run Code Online (Sandbox Code Playgroud)

这是检查整数是否可以转换为枚举的正确方法吗?

c++ c++11

13
推荐指数
3
解决办法
6716
查看次数

boost c ++无锁队列vs共享队列

我是多线程编程的新手,我只知道最常见的Producer-Consumer-Queue.我正在使用boost c ++库,我不知道是否更好地使用boost :: lockfree :: queue或使用`mutex`和`condition_variable`的std :: queue周围的包装类.

哪里更好地使用无锁数据结构哪里更好是使用基于`mutex`和`condition_variables`的简单实现?

c++ multithreading boost producer-consumer lock-free

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

std :: thread.join()死锁

我不明白为什么这个简单的代码片段有死锁:

#include <atomic>
#include <thread>
#include <memory>

using namespace std;
class Test {
public:

    Test() : mExit( false )
    {
        mThread = thread( bind( &Test::func, this ) );
    }

    ~Test()
    {
        if ( mThread.joinable() )
        {
            mExit = true;
            mThread.join();
        }
    }

private:
    void func() 
    {
        while ( !mExit )
        {
            // do something
        }
    }

private:
    atomic< bool > mExit;
    thread mThread;
};

typedef unique_ptr< Test > TestPtr;
TestPtr gTest;

int main()
{
    gTest = TestPtr( new Test ); …
Run Code Online (Sandbox Code Playgroud)

c++ multithreading

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