我需要使用一个std::string来存储检索到的数据fgets().要做到这一点,我需要将转换char*返回值从fgets()到std::string阵列中的存储.如何才能做到这一点?
我知道没有具体的命名约定,但是在使用SQlite时你推荐什么扩展?
最常见的似乎是.sqlite,.db或.db3?.sqlite最有意义,但它只是个人选择?
我正在准备我的CPP考试,其中一个问题是:你能否删除默认的类构造函数,如果是,那么这样做的原因是什么?好的,显然你可以这样做:
class MyClass
{
public:
MyClass() = delete;
};
Run Code Online (Sandbox Code Playgroud)
但我不明白你为什么要这样做?
假设我有这样的代码:
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) 这可能是一个简单的问题,但我有这个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一般都没有签名?我可以举例说明它可能有编译和/或运行时错误吗?
我想知道Larry Page和Sergey Brin用Google编写的语言是什么?
我不是在谈论今天使用的语言,而是关于他们从宿舍发布的版本.
谁能告诉我是否可以清除 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。
我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++版本是错误的吗?
我有以下简单的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,并且正在尝试构建一个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吗?