相关疑难解决方法(0)

const-correctness的定义是什么?

我认为"const-correctness"的概念定义得很明确,但当我与其他人谈论它时,似乎我们对它的含义有不同的看法.有人说它是关于在尽可能多的地方有"const"注释的程序.其他人将程序定义为const-correct,当且仅当使用const注释时没有违反constness(即,它是编译器为您检查的属性).

所以我想知道,这些函数中哪些是正确的:

struct Person {
    string getName1() const { return _name; }
    string getName2() { return _name; }
    string getName3() const { _name = "John"; return _name; }
    string getName4() { _name = "John"; return _name; }

    string _name;
};
Run Code Online (Sandbox Code Playgroud)

我在互联网上搜索了定义,但实际上找不到明确的答案,我也怀疑可能存在一个发生过中的柑橘生成案例.那么任何人都可以为定义提供任何可靠的引用吗?

c++ const

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

如何在类中添加函数但不在C++的头文件中添加?

我目前正在练习用C++编写类和头文件.我有一个问题:让我们说在我的头文件中我有一个客户端可以使用的公共函数,我知道如何在相应的类中实现它.但是,让我们说这个功能分为几个步骤,可以写成我不希望用户看到的独立功能(保护知识产权).通常,对于头文件中的每个已定义函数,我都会在.cpp文件中的myClassName :: myFunctionName(参数1 ..)中编写.有没有办法只在.cpp文件中定义和使用函数?例如,我写了一个程序来查看两个单词是否是字谜(具有相同的字母).

我的头文件是:

#ifndef _Anagrams_h
#define _Anagrams_h
#include <string>
using namespace std;

class Anagrams{
    public:
        Anagrams(string &s);
        static bool areTwoWordsAnagrams(string s1, string s2) ; 
        string getWord()const; 
        void setWord(string &s);

    private:
        string word;

};
#endif
Run Code Online (Sandbox Code Playgroud)

我的班级是:

#include "Anagrams.h"
#include <string>
using namespace std;

Anagrams::Anagrams(string &s){
    word = s;
}

bool Anagrams::areTwoWordsAnagrams(string word1, string word2){
    int sizeOfWord1 = word1.size();
    int sizeOfWord2 = word2.size();

    int array1[26];
    int array2[26];

    for (int i = 0; i < 26; i++){ //Initialize both arrays
        array1[i] …
Run Code Online (Sandbox Code Playgroud)

c++ scope function

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

如何将可变参数参数传递给 std::thread?

我想通过包装 C++11 中的 std::thread 类来使用我自己的 Thread 实现,这样我就可以像我想要的那样处理异常。

这是我的包装类:

#include <Types.hpp>
#include <thread>
#include <exception>
#include <functional>

class Thread
{
    private:

        std::exception_ptr exceptionPtr;
        std::thread thread;

    public:

        using Id = std::thread::id;

        using NativeHandleType = std::thread::native_handle_type;

        Thread() noexcept = default;
        Thread(Thread &&t) noexcept :
            exceptionPtr(std::move(t.exceptionPtr)),
            thread(std::move(t.thread))
        {
        }

        Thread &operator =(Thread &&t) noexcept
        {
            exceptionPtr = std::move(t.exceptionPtr);
            thread = std::move(t.thread);
            return *this;
        }

        template<typename Callable, typename... Args>
        Thread(Callable &&f, Args &&... args) :
            exceptionPtr(nullptr),
            thread([&](Callable &&f, Args &&... args)
            {
                try
                {
                    std::once_flag …
Run Code Online (Sandbox Code Playgroud)

c++ multithreading templates c++11 stdthread

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

将std :: array与传统的数组C++进行比较

我正在尝试对以下元素进行比较:

std::vector<std::array<uint8_t, 6> > _targets =
{
  { 0x00, 0x00, 0x00, 0x00, 0x00, 0x11 }
  { 0x00, 0x00, 0x00, 0x00, 0x00, 0x22 }
};
Run Code Online (Sandbox Code Playgroud)

传统阵列:

 uint8_t _traditional[6] =  { 0x00, 0x00, 0x00, 0x00, 0x00, 0x33 }
Run Code Online (Sandbox Code Playgroud)

如:

  for (auto target : _targets) 
  {

     if (! memcmp(target, _traditional, 6)) {
        known = 1;
     } 
  }
Run Code Online (Sandbox Code Playgroud)

并收到数据转换错误:

error: cannot convert 'std::array<unsigned char, 6u>' to 'const void*' for argument '1' to 'int memcmp(const 
void*, const void*, size_t)
Run Code Online (Sandbox Code Playgroud)

我可以执行什么属性字节比较操作来完成平等评估?

c++ arrays c++11

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

我可以在头文件中定义宏吗?

我在 中有一个宏定义MyClass.h,如下所示:

#define _BufferSize_ 64
Run Code Online (Sandbox Code Playgroud)

我将 include 指令放置在MyClass.h以下内部main.cpp

#include "MyClass.h"
Run Code Online (Sandbox Code Playgroud)

这是否意味着我可以_BufferSize_main.cppand中使用MyClass.h?另外,这是好的做法吗?

c++ header

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

RSA_private_decrypt返回-1

我尝试用RSA算法加密简单文本.我的代码有问题.

RSA        *_RSA ;
unsigned char text[2560] = "A";
unsigned char sectext[2560];
unsigned char decrypttext[2560];
int i = 0;

_RSA = RSA_generate_key ( 1024, 65537, NULL, NULL );
i = RSA_public_encrypt ( 1, text,    sectext,     _RSA, RSA_PKCS1_OAEP_PADDING );
i = RSA_private_decrypt( 1, sectext, decrypttext, _RSA, RSA_PKCS1_OAEP_PADDING);
RSA_free ( _RSA );
Run Code Online (Sandbox Code Playgroud)

返回值RSA_public_encrypt是128,这是密文的大小.RSA_private_decrypt返回-1,这是一个错误.如果我尝试显示恢复的文本,那么我什么也得不到.

为什么RSA_private_decrypt返回-1?

c security encryption openssl

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

VS2010中的"重定义;不同类型修饰符"

我正在尝试编译我在visual studio中下载的一些代码.该代码适用于msvc 6,我将其导入VS2010.该代码用于通过编译DLL为labview提供ASIO支持.看到这里整个代码.

构建时出现以下错误:"错误C2373:'_ pctype':重定义;不同的类型修饰符."

代码段如下:

unsigned short _Ints[ 512 ];
unsigned short *_pctype = _Ints;

如果有人将从我提供的链接引用代码包,则来自文件GenMonCIN.c

c++ visual-c++ asio

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

核心数据:modelURL有效时模型为零

__managedObjectModel即使是modelURL也存在.有一个类似的帖子,但接受的答案(重命名模型文件和重新启动Xcode)对我不起作用.

- (NSManagedObjectModel *)managedObjectModel
{
    if (__managedObjectModel != nil) {
        return __managedObjectModel;
    }
    NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"Failed" withExtension:@"momd"];

    __managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];

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

modelURL在控制台

(lldb) po modelURL
(NSURL *) $4 = 0x088832f0 file://localhost/Users/philip/Library/Application%20Support/iPhone%20Simulator/5.1/Applications/9E59167C-8D9E-4ADE-BBD7-0BE9A33A6A86/Failed.app/Failed.momd/
Run Code Online (Sandbox Code Playgroud)

core-data objective-c ios

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

为什么在C++枚举定义中需要typedef

我在头文件中看到了以下内容

typedef enum Test__tag {
    foo,
    bar
} Test;
Run Code Online (Sandbox Code Playgroud)

我想知道为什么要使用typedef; 我可以用

enum Test{
    foo,
    bar
};
Run Code Online (Sandbox Code Playgroud)

是对的吗?

c++ gcc visual-c++

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

定义为"_end [LEN]"的数组导致C/C++中的分段错误

我试图在C/C++中定义一个名为_end的全局数组,大小约为1000,但即使我只是迭代它,我也会遇到分段错误.名称"_end"在C/C++中是否非常特殊导致此类问题?或者这可能是一个非常严重的错误...(代码附在下面,它在g ++ 4.3.2,4.5.2,4.9.2等中断)

#include <iostream>
using namespace std;

int _end[1111];

int main() {
    for (int i=0; i<1111; i++) {
        cout << i << endl;
        _end[i]++;
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

您可以在https://ideone.com/XAcUeZ上查看结果.另请参阅此处的C编译器.

c++ arrays segmentation-fault

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