相关疑难解决方法(0)

用户定义的文字为C++添加了哪些新功能?

C++ 11引入了用户定义的文字,这将允许基于现有文本(采用新的文本语法的int,hex,string,float),使得任何类型的将能够具有字介绍.

例子:

// imaginary numbers
std::complex<long double> operator "" _i(long double d) // cooked form
{ 
    return std::complex<long double>(0, d); 
}
auto val = 3.14_i; // val = complex<long double>(0, 3.14)

// binary values
int operator "" _B(const char*); // raw form
int answer = 101010_B; // answer = 42

// std::string
std::string operator "" _s(const char* str, size_t /*length*/) 
{ 
    return std::string(str); 
}

auto hi = "hello"_s …
Run Code Online (Sandbox Code Playgroud)

c++ user-defined-literals c++11

138
推荐指数
8
解决办法
3万
查看次数

用于启用详尽且详细的g ++警告的标志

通常在C下gcc,我将从以下一组警告标志开始(从多个来源痛苦地组装):

-Wall -Wextra -Wformat-nonliteral -Wcast-align -Wpointer-arith -Wbad-function-cast \
-Wmissing-prototypes -Wstrict-prototypes -Wmissing-declarations -Winline -Wundef \
-Wnested-externs -Wcast-qual -Wshadow -Wwrite-strings -Wno-unused-parameter \
-Wfloat-equal -pedantic -ansi
Run Code Online (Sandbox Code Playgroud)

我将使用这组警告构建(至少我的调试版本)并修复我可能做的所有事情(通常是一切),然后只删除标记,如果它们不相关或不可修复(几乎从不这样).有时,-Werror如果我必须在编译时离开,我也会添加.

我只是拿起C++(是的,我落后了15年),我想从右脚开始.

我的问题是:是否有人为C++预先编译了类似的完整警告标志集g++?(我知道其中很多都是一样的.)

c++ warnings g++

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

C++字符串文字的规则转义字符

\字符串文字中的转义字符有哪些规则?是否有所有转义字符的列表?

特别是,当我\在gedit中的字符串文字中使用并按任意三个数字跟随它时,它会以不同的方式对它们进行着色.

我试图std::string用文字创建一个构造,其中0后跟空字符(\0)后跟字符0.然而,语法突出显示警告我,这可能会创建类似于0后跟空字符(\00,aka \0)的字符,也就是说,只有两个字符.

对于这个问题的解决方案,这是最好的方法:

std::string ("0\0" "0", 3)  // String concatenation 
Run Code Online (Sandbox Code Playgroud)

并且是否存在一些关于转义字符在字符串文字中的作用的参考?例如,'\ a'是什么?

c++ string escaping

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

为什么C不使用特殊的转义字符串终止字符终止字符串?

在C中,字符串以null(\ 0)结尾,当您想在字符串中放置null时会导致问题.为什么不使用特殊的转义字符,例如\ $或其他东西?

我完全清楚这个问题是多么愚蠢,但我很好奇.

c string null escaping

17
推荐指数
2
解决办法
3575
查看次数

C++如何从std :: string中删除\ 0 char

\0从给定字符串中删除char 的正确方法是什么.

我没有成功:

std::string msg(data); // Data comes from a remote system connected via socket...
msg.erase(std::remove(msg.begin(), msg.end(), '\0'), msg.end());
Run Code Online (Sandbox Code Playgroud)

这给出了编译错误:

error: cannot convert ‘std::__cxx11::basic_string<char>::iterator {aka __gnu_cxx::__normal_iterator<char*, std::__cxx11::basic_string<char> >}’ to ‘const char*’ for argument ‘1’ to ‘int remove(const char*)’
Run Code Online (Sandbox Code Playgroud)

data来自使用套接字的远程系统,并且/0由于源逻辑而在中间包含几段代码.

c++ stdstring

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

我可以在C#中使用stringstream作为内存流,如`MemoryStream`吗?

在C/C++中,字符串以NULL结尾.

我可以stringstreamMemoryStreamC#一样用作内存流吗?

内存流的数据可能\0在数据中间具有值,但C++字符串以NULL结尾.

c++ stringstream

9
推荐指数
2
解决办法
9505
查看次数

用C++创建二进制(自定义长度)字符串

我正在使用Apache Thrift RPC(Compiled to C++)机制与Apache Flume进行通信.我必须使用此平台提供的特定API.
我想发送二进制数据,但RPC函数只接受std :: string作为参数.因此,我只能发送第一次出现0x00之前的二进制数据.

u_char bin[10] = {'a','b',1,'d','e',0,'2','3','4','5'};
// Takes only the first 5 bytes, and sets a length of 5
string art_test((const char *)bin);
Run Code Online (Sandbox Code Playgroud)

我搜索了源代码,我调用的函数将str.data()转换为(uint8_t*)并发送长度为str.size()的数据.

uint32_t ssize = static_cast<uint32_t>(str.size());
trans_->write((uint8_t*)str.data(), ssize);
Run Code Online (Sandbox Code Playgroud)

有没有办法创建一个'二进制字符串',uint8_t作为数据并具有指定的长度?甚至可能用所需的二进制数据创建我自己的字符串的内存表示.

c++ thrift thrift-protocol c++11

5
推荐指数
0
解决办法
70
查看次数

std :: string在\ 0处停止

我有问题std::string..

问题是'\0'被识别为字符串的结尾,就像在类似C的字符串中一样.

例如以下代码:

#include <iostream>
#include <string>

int main ()
{
    std::string s ("String!\0 This is a string too!");
    std::cout << s.length(); // same result as with s.size()
    std::cout << std::endl << s;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

7
String!
Run Code Online (Sandbox Code Playgroud)

这里有什么问题?不应该像任何其他角色一样std::string对待'\0'

c++ string

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

使用协议缓冲区发送图标/小图像

我有一个关于std :: string和google协议缓冲库的简单问题.我已经定义了这样的消息:

message Source
{
    required string Name = 1;
    required uint32 Id = 2;
    optional string ImplementationDLL = 3;
    optional bytes  Icon = 4;
}
Run Code Online (Sandbox Code Playgroud)

我想使用Icon字段发送图像,它很可能是一个png图像.在将其提供给protobuf编译器后,我得到了类似的东西来访问/操作Icon字段.

inline bool has_icon() const;
inline void clear_icon();
static const int kIconFieldNumber = 4;
inline const ::std::string& icon() const;
inline void set_icon(const ::std::string& value);
inline void set_icon(const char* value);
inline void set_icon(const void* value, size_t size);
inline ::std::string* mutable_icon();
Run Code Online (Sandbox Code Playgroud)

std :: string*mutable_icon()函数让我很头疼.它返回一个std :: string,但我相信字符串不能保存二进制数据!或者他们可以吗?

我可以使用set_icon(const void*,size_t)函数来放置二进制数据,但是我如何在另一端获取它?

我认为std :: string可能能够保存二进制数据,但是如何????

c++ stl protocol-buffers

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