小编BЈо*_*вић的帖子

如何使我的自定义类型与"基于范围的for循环"一起使用?

像许多人一样,我一直在尝试C + 11带来的不同功能.我最喜欢的一个是"基于范围的循环".

我明白那个:

for(Type& v : a) { ... }
Run Code Online (Sandbox Code Playgroud)

相当于:

for(auto iv = begin(a); iv != end(a); ++iv)
{
  Type& v = *iv;
  ...
}
Run Code Online (Sandbox Code Playgroud)

而这begin()只是返回a.begin()标准容器.

但是,如果我想让我的自定义类型"基于范围的循环" - 意识到什么?

如果我只是专注begin()end()

如果我的自定义类型属于命名空间xml,我应该定义xml::begin()还是std::begin()

简而言之,这样做的准则是什么?

c++ customization for-loop c++11

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

如何将wstring转换为字符串?

问题是如何将wstring转换为字符串?

我有下一个例子:

#include <string>
#include <iostream>

int main()
{
    std::wstring ws = L"Hello";
    std::string s( ws.begin(), ws.end() );

  //std::cout <<"std::string =     "<<s<<std::endl;
    std::wcout<<"std::wstring =    "<<ws<<std::endl;
    std::cout <<"std::string =     "<<s<<std::endl;
}
Run Code Online (Sandbox Code Playgroud)

注释掉的输出是:

std::string =     Hello
std::wstring =    Hello
std::string =     Hello
Run Code Online (Sandbox Code Playgroud)

但不仅仅是:

std::wstring =    Hello
Run Code Online (Sandbox Code Playgroud)

这个例子有什么不对吗?我可以像上面那样进行转换吗?

编辑

新的例子(考虑到一些答案)是

#include <string>
#include <iostream>
#include <sstream>
#include <locale>

int main()
{
    setlocale(LC_CTYPE, "");

    const std::wstring ws = L"Hello";
    const std::string s( ws.begin(), ws.end() );

    std::cout<<"std::string =     "<<s<<std::endl;
    std::wcout<<"std::wstring =    "<<ws<<std::endl;

    std::stringstream ss;
    ss …
Run Code Online (Sandbox Code Playgroud)

c++ unicode stl wstring

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

noreturn有什么意义?

[dcl.attr.noreturn]提供以下示例:

[[ noreturn ]] void f() {
    throw "error";
    // OK
}
Run Code Online (Sandbox Code Playgroud)

但我不明白有什么意义[[noreturn]],因为函数的返回类型已经存在void.

那么,该noreturn属性的重点是什么?它应该如何使用?

c++ attributes c++11 noreturn

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

如何自动将强类型枚举转换为int?

#include <iostream>

struct a {
  enum LOCAL_A { A1, A2 };
};
enum class b { B1, B2 };

int foo(int input) { return input; }

int main(void) {
  std::cout << foo(a::A1) << std::endl;
  std::cout << foo(static_cast<int>(b::B2)) << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

a::LOCAL_A是强类型枚举试图实现的,但有一个小的区别:普通枚举可以转换为整数类型,而强类型枚举不能没有强制转换.

那么,有没有办法将强类型的枚举值转换为没有强制转换的整数类型?如果有,怎么样?

c++ c++11 strongly-typed-enum

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

在GDB中运行应用程序,直到发生异常

我正在研究多线程应用程序,我想使用GDB进行调试.

问题是,我的一个线程一直在消息中消失:

pure virtual method called
terminate called without an active exception
Abort
Run Code Online (Sandbox Code Playgroud)

我知道该消息的原因,但我不知道我的帖子在哪里发生.回溯真的很有帮助.

当我在GDB中运行我的应用程序时,每次线程暂停或恢复时它都会暂停.我希望我的应用程序继续正常运行,直到其中一个线程因该异常而死亡,此时所有内容都应该暂停,以便我可以获得回溯.

c++ debugging polymorphism gdb multicore

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

Octave/Matlab:扩展一个向量使其重复的向量?

有没有办法通过使矢量重复来扩展矢量?

>v = [1 2];
>v10 = v x 5; %x represents some function. Something like "1 2" x 5 in perl
Run Code Online (Sandbox Code Playgroud)

然后v10将是:

>v10
     1 2 1 2 1 2 1 2 1 2
Run Code Online (Sandbox Code Playgroud)

这应该适用于一般情况,而不仅仅是[1 2]

matlab vector octave

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

通过值时,"const"不是多余的吗?

当我遇到计算立方体体积的函数时,我正在阅读我的C++书籍(Deitel).代码如下:

double cube (const double side){
    return side * side * side;
}
Run Code Online (Sandbox Code Playgroud)

使用"const"限定符的解释是这样的:"const限定应该用于强制执行最小特权原则,告诉编译器函数不修改变量端".

我的问题:这里不是使用"const"冗余/不必要的,因为变量是通过值传递的,所以函数无论如何都不能修改它?

c++ const pass-by-value

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

string :: c_str()在C++ 11中不再以null结尾吗?

在C++中,11 basic_string::c_str被定义为完全相同basic_string::data,而后者又定义为*(begin() + n)*(&*begin() + n)(when 0 <= n < size())完全相同.

我找不到任何要求字符串在其末尾始终具有空字符的内容.

这是否意味着c_str()不再保证生成以null结尾的字符串?

c++ string c++11

72
推荐指数
3
解决办法
8440
查看次数

谷歌测试中阵列的比较?

我想在谷歌测试中比较两个数组.在UnitTest ++中,这是通过CHECK_ARRAY_EQUAL完成的.你是如何在谷歌测试中做到的?

c++ unit-testing googletest

70
推荐指数
7
解决办法
6万
查看次数

什么是次正规浮点数?

isnormal()参考页面告诉:

确定给定的浮点数arg是否正常,即既不是零,也不是正常,无限,也不是NaN.

数字为零,无限或NaN很清楚它意味着什么.但它也说低于正常.什么时候是一个数字次正常?

c++ floating-point ieee-754 c++11

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