小编NoS*_*tAl的帖子

C++ 11自动和函数返回类型

我知道之间的区别的auto,auto&,const autoconst auto&(例如在"每个"循环),但有一两件事令我惊讶的是:

std::string bla;
const std::string& cf()
{
    return bla;
}


int main (int argc, char *argv[])
{
    auto s1=cf();
    const std::string& s2=cf();
    s1+="XXX"; // not an error
    s2+="YYY"; //error as expected
}
Run Code Online (Sandbox Code Playgroud)

那么有人可以告诉我何时x表达式auto x = fun();中的类型与返回值的类型不是同一类型fun()

c++ type-inference c++11

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

std :: unique_ptr <>作为基于节点的结构中的指针

由于大多数人都喜欢谜题,我会用一个(拼写错误:)开始这个问题.想得到介绍,请注意,如果你不关心它,你可以跳过热身(JG问题)并阅读G问题,因为那是我的"真正的问题".

在审查潜在新员工提供的代码示例时,您偶然发现了一个链接列表,其实现使用了现代C++ 11特性,即std :: unique_ptr <>.

template <typename T> 
struct Node { 
   T data; 
   std::unique_ptr<Node<T>> next; 
   Node () {} 
   Node(const T& data_): data(data_) {} 
   Node(Node& other) { std::static_assert(false,"OH NOES"); } 
   Node& operator= (const Node& other) { 
     std::static_assert(false,"OH NOES"); 
     return *new Node(); 
   } 
public: 
   void addNext(const T& t) { 
      next.reset(new Node<T>(t)); 
   }
};

template<typename T>
class FwdList
{
    std::unique_ptr<Node<T>> head;
public:
    void add(const T& t)
    {
        if (head == nullptr)
            head.reset( new Node<T>(t));
        else {
            Node<T>* curr_node = head.get(); …
Run Code Online (Sandbox Code Playgroud)

c++ unique-ptr c++11

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

Visual Studio 2010 vs 2012编译时C++用户的性能和稳定性比较

作为VS 2010 SP1的C++用户我经常因为编译速度慢(在QC机器上)和臭名昭着的"等待内部操作......"很长时间(有时很长时间也称为无限:()冻结而烦恼:)
所以我想知道:

  1. 什么是VS 10 VS VS的编译速度(我主要对Debug编译速度感兴趣)
  2. 编译器在VS11中更稳定吗?

编辑:我更喜欢真实数据1)而不是"感觉好多了"或"看起来一样"......

c++ visual-studio

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

是否有相当于 C# TryParse 的 boost lexical_cast?

介绍(来自 Eric Lippert 博客):

令人烦恼的异常是不幸的设计决策的结果。恼人的异常是在完全非异常的情况下抛出的,因此必须一直被捕获和处理。

令人烦恼的异常的经典示例是 Int32.Parse,如果给它一个无法解析为整数的字符串,它就会抛出异常。但是此方法的 99% 用例是转换用户输入的字符串,这可能是任何旧事物,因此解析失败绝不是例外。更糟糕的是,如果不自己实现整个方法,调用者就无法提前确定他们的参数是否错误,在这种情况下,他们不需要首先调用它。

现在重要的部分:

这个不幸的设计决定非常令人烦恼,因此框架团队当然在此后不久实施了 TryParse,它做了正确的事情。

来自 MSDN Int32.TryParse:

返回值 类型:System.Boolean 如果 s 转换成功,则为 true;否则为假。

所以同事最近正在研究一些需要检查字符串是否是数字的小代码,所以在考虑之后并意识到没有好的 C++ 解决方案(基本上它是一个 for__each/find_if 或 boost:lexical_cast try catch)我想拥有is_convertible或来自 boost 的东西会有多好?

Ofc 我可以包装 boostlexical_cast并在 try 块的末尾返回 true 并在 catch 块的末尾返回 false 但我更喜欢现有的做法:) 解决方案。

c# c++ boost exception

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

我可以在向量的实例上使用value_type,而不是在其类型上

在玩和尝试计算向量的总大小时,我尝试了类似的东西

vector<double> vd;
auto area = vd.size()* sizeof (vd::value_type); 
//Ive seen Stepanov use area as name for this kind of size, idk if he adds the sizeof vd also to area :)
Run Code Online (Sandbox Code Playgroud)

不幸的是,这不起作用......我需要使用,vector<double>::value_type但这会使代码的可读性降低.可以使它工作吗?我不喜欢sizeof vd.front()因为它写起来看起来很难看front().
编辑:decltype变体也适合我称之为丑陋的类别...

c++ sizeof

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

传递(在构造函数中)指向包含一个糟糕设计的类的指针,如果是,那么解决方案是什么

经常我会遇到类似的代码

/*initializer list of some class*/:m_member(some_param,/* --> */ *this)
Run Code Online (Sandbox Code Playgroud)

这样做的原因是m_member可以从包含它的类中调用成员函数... aka

//code in class that is m_member instance of

    m_parent->some_function();
Run Code Online (Sandbox Code Playgroud)

我个人不喜欢它,因为我认为它是可怜的设计("亲爱的孩子,你知道你在做什么对你的课程封装"),但我想知道一般这种行为不好,如果是这样,如何避免这种设计.

编辑:请不要把重点放在initalizer列表中,让我们说它是在ctor体内.

c++ object-design

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

声明const全局变量时是否需要静态?

经常在我看到的标题中

//global namespace, not in class
static const int my_global =1984;
Run Code Online (Sandbox Code Playgroud)

但最近我了解到const意味着内部联系,所以我想知道不会使静态不必要吗?

c++ static linkage

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

声明模板时是否需要typename/class

当声明模板参数是typename/ class必要的时(因为语言无法使用我在下面建议的diff语法).我知道模板参数可以是整数,所以你必须选择默认为int或typename/ class但仍然.

即为什么不呢

template <T>
T max(T a, T b) {
    return a > b ? a : b;
}
Run Code Online (Sandbox Code Playgroud)

代替

template <typename T>
T max(T a, T b) {
    return a > b ? a : b;
}
Run Code Online (Sandbox Code Playgroud)

template<T, size_t n>
size_t array_size(const T (&)[n]) {
    return n;
}
Run Code Online (Sandbox Code Playgroud)

代替

template<typename T, size_t n>
size_t array_size(const T (&)[n]) {
    return n;
}
Run Code Online (Sandbox Code Playgroud)

c++ template-meta-programming

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

如何实现等距"迭代器"

如何实现泛型(也适用于多图,有序矢量......)等范围迭代器?我的意思是它是一个迭代器,它是一对迭代器(特定equal_range的开始和结束)

这样做的动机是我有一个名为sortedword2word的multimap,我用它来检测字符串数组中的字谜.所以我想有一种方法可以轻松地迭代每个相等的范围(很容易就像LOC /可读性方式 - 我知道我可以通过手动检查.end()轻松完成它,如果下一个与当前相同... )

如果boost已经实现了这样的功能,那也是可以接受的.

c++ iterator stl equal-range

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

char数组上的C++内存模型和竞争条件

基本上我无法理解这一点:(来自Bjarne FAQ)

但是,大多数现代处理器不能读取或写入单个字符,它必须读取或写入整个单词,因此对c的赋值实际上是"读取包含c的单词,替换c部分,然后再将单词写回". '由于对b的赋值是相似的,所以即使线程没有(根据它们的源文本)共享数据,两个线程也有很多机会相互冲突!

那么char数组如何在元素之间没有3(7?)字节填充的情况下存在?

c++ memory-model race-condition c++11

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