小编Arn*_*rah的帖子

将char*转换为std :: string

我需要使用一个std::string来存储检索到的数据fgets().要做到这一点,我需要将转换char*返回值从fgets()std::string阵列中的存储.如何才能做到这一点?

c++ stdstring

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

什么是最好的扩展名SQlite数据库文件?

我知道没有具体的命名约定,但是在使用SQlite时你推荐什么扩展?

最常见的似乎是.sqlite,.db或.db3?.sqlite最有意义,但它只是个人选择?

sqlite

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

删除默认类构造函数有什么意义?

我正在准备我的CPP考试,其中一个问题是:你能否删除默认的类构造函数,如果是,那么这样做的原因是什么?好的,显然你可以这样做:

class MyClass 
{ 
  public: 
    MyClass() = delete; 
};
Run Code Online (Sandbox Code Playgroud)

但我不明白你为什么要这样做?

c++ default-constructor

50
推荐指数
4
解决办法
6609
查看次数

调用C++函数时指定默认参数

假设我有这样的代码:

void f(int a = 0, int b = 0, int c = 0)
{
    //...Some Code...
}
Run Code Online (Sandbox Code Playgroud)

正如您可以在上面看到我的代码,参数a,b以及c默认参数值为0.现在看看我的主要功能如下:

int main()
{
   //Here are 4 ways of calling the above function:
   int a = 2;
   int b = 3;
   int c = -1;

   f(a, b, c);
   f(a, b);
   f(a); 
   f();
   //note the above parameters could be changed for the other variables
   //as well.
}
Run Code Online (Sandbox Code Playgroud)

现在我知道我不能只跳过一个参数,并让它具有默认值,因为该值将作为该位置的参数进行评估.我的意思是,我不能,比如说f(a,c),因为,c将被评估为b,这是我不想要的,特别是如果c是错误的类型.有没有一种方法让调用函数在C++中指定,在任何给定的位置使用函数的任何默认参数值,而不限于从最后一个参数向后转到无?是否有任何保留关键字来实现这一目标,或者至少是解决方法?我可以给出一个例子:

f(a, …
Run Code Online (Sandbox Code Playgroud)

c++ language-construct default-value c++11

14
推荐指数
3
解决办法
4561
查看次数

不安全的模板数组构造函数

这可能是一个简单的问题,但我有这个template class:

template<typename Type>
class Array {
    size_t n;
    Type* buff;
public:
    Array(size_t n_): n(n_), buff(new Type[n]) {}
};
Run Code Online (Sandbox Code Playgroud)

该代码来自课程pdf文件,其中说它buff(new Type[n])不安全.我不明白为什么它不安全,是不是size_t一般都没有签名?我可以举例说明它可能有编译和/或运行时错误吗?

c++

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

谷歌一开始用什么语言写的?

我想知道Larry Page和Sergey Brin用Google编写的语言是什么?

我不是在谈论今天使用的语言,而是关于他们从宿舍发布的版本.

google-search

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

清除 Intellij-idea 中的控制台

谁能告诉我是否可以清除 intellij-idea 中的控制台以及如何清除?

到目前为止,我已经尝试过:

System.out.print("\033[H\033[2J");
System.out.flush();
Run Code Online (Sandbox Code Playgroud)

和:

Runtime.getRuntime().exec("clear");
Run Code Online (Sandbox Code Playgroud)

但其中任何一个都有效。

我正在使用 Intellij-idea Ultimate 2017 2.4 和 Linux Mint。

java intellij-idea

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

Visual C++和gcc之间从std :: isblank返回的不一致.哪一个错了?

std::isblank在Windows上的Visual C++和Ubuntu上的gcc之间的调用中看到不一致的行为,我想知道哪一个是正确的.

在两个编译器上 - 当默认语言环境是"C"语言环境时 - 以下调用返回false

std::isblank('\n');  
Run Code Online (Sandbox Code Playgroud)

这就是我的期望.它与我在cppreference.com上看到的相符

在默认的C语言环境中,只有空格(0x20)和水平制表符(0x09)被归类为空白字符.

但是对于C++,我们还有一个带std::locale参数的版本

std::isblank('\n', std::locale::classic()); 
Run Code Online (Sandbox Code Playgroud)

在这里,我供应std::locale::classic.这不应该等同于之前的电话吗?因为当我在Windows上调用第二个版本时,它返回true.它认为换行符是空白字符.Linux仍然说错误.

我的理解(约std::locale::classic)是否正确?如果是这样,Visual C++版本是错误的吗?

c++ gcc locale visual-studio

8
推荐指数
1
解决办法
152
查看次数

如何在CMake中输出生成器表达式的结果?

我有以下简单的CMake代码:

cmake_minimum_required(VERSION 3.1)

project(PrintGenerators)

set(TEST_OR_GENERATOR "$<$<OR:0,0,1>:YAY!>")

message(STATUS ${TEST_OR_GENERATOR}) # Print out the result of the build
Run Code Online (Sandbox Code Playgroud)

我希望这段代码可以打印出来YAY!,但事实并非如此.我改为$<$<OR:0,0,1>:YAY!>输出.如何在配置期间打印评估的生成器表达式的结果?

cmake

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

如何使用CMake将C++应用程序入口点设置为Windows上的main()?

我最近开始使用CMake,并且正在尝试构建一个GUI应用程序,它在Windows上没有控制台窗口.所以在我的CMakeLists.txt文件中,我这样做了:

if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
    add_executable(${EXECUTABLE_NAME} main.cpp)
elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
    add_executable(${EXECUTABLE_NAME} WIN32 main.cpp) #WIN32 So the console window does not open on Windows
endif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
Run Code Online (Sandbox Code Playgroud)

有了这个,解决方案工作,并且控制台窗口无法在Windows上打开.然而,这需要付出代价.当我尝试构建解决方案时,我意识到我必须将函数的签名更改为WinMain,所以我将主代码更改为以下内容:

#ifdef _WIN32
#include <Windows.h>
int WINAPI WinMain(HINSTANCE, HINSTANCE, PSTR, int) //Windows signature since creating WIN32 application without console
#else
int main()
#endif
{
    // ... GUI code
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,我绝对厌恶这一点,因为它破坏了使用CMake的全部意义.我不想在我的代码中更改基于不同平台的任何内容.这引出了我的问题.如何main()在制作GUI应用程序时将C++应用程序入口点设置为Windows,而无需在Visual Studio中手动设置它?我可以使用跨平台方法直接在CMake中执行此操作吗?或者我必须使用该#if/#else/#endif解决方案吗?上述解决方案的唯一改进是使用一个宏MAIN_FUNCTION来执行预处理器条件.我也想避免这种情况.

另一方面,还有另一种方法可以摆脱Windows上的GUI应用程序中的控制台窗口,我不知道在不使用WIN32选项的情况下使用CMake吗?

c++ windows winapi cross-platform cmake

7
推荐指数
2
解决办法
2875
查看次数