也许我错过了一些明显的东西,但是下面的编译和运行,我不知道为什么.我知道这一点,但在下面的示例中,参数包的位置和默认参数是相反的.它是否违反了默认参数必须最后出现的规则?参数包不能具有默认值.
#include <iostream>
#include <string>
#include <tuple>
template<typename ... Ts>
struct Test
{
int i;
std::string str;
Test(int _i = 0, Ts&& ... _ts)
:
i(_i),
str(std::get<0>(std::forward_as_tuple(std::forward<Ts>(_ts)...)))
{}
};
int main()
{
Test<std::string> t(1, "huh??");
std::cout << "t.i = " << t.i << ", t.str = " << t.str << "\n";
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这产生了
t.i = 1, t.str = huh??
Run Code Online (Sandbox Code Playgroud) 当我尝试使用strcpy复制字符串时,它给了我一个编译错误.
error C4996 'strcpy': This function or variable may be unsafe.
Run Code Online (Sandbox Code Playgroud)
考虑strcpy_s改用.要禁用弃用,请使用_CRT_SECURE_NO_WARNINGS.详细信息请参见在线帮助.
strcpy和之间有什么区别strcpy_s?
typedef说明符的语法:
typedef <existing_name> <alias_name>
Run Code Online (Sandbox Code Playgroud)
例如:
typedef long unsigned int Int;
Run Code Online (Sandbox Code Playgroud)
它工作正常.
但是,如果我typedef在宣言中的任何地方放置,像这样:
long unsigned typedef int Int;
Run Code Online (Sandbox Code Playgroud)
然后,它也工作正常.
为什么?我们typedef可以在宣言中放置任何地方吗?
我有代码,我想有两种模式,debug和verbose.我在我的头文件中定义它们,
#define verbose TRUE
#define debug TRUE
Run Code Online (Sandbox Code Playgroud)
到目前为止,在我的代码中,我刚刚使用过
#if(debug)
//code
#endif
Run Code Online (Sandbox Code Playgroud)
但使用起来更合适
#ifdef debug
// code
#endif
Run Code Online (Sandbox Code Playgroud)
我读了一些关于预处理器宏的内容,但当时没有意义.所以,我有疑问,#if defined MACRO相当于#ifdef MACRO?哪个更好地启用/禁用特定代码段?
这是初始化数组的一种不常见的方法:
int a[3] = {[2] 5, [0] 10, [1] 15};
Run Code Online (Sandbox Code Playgroud)
在程序中使用此数组,
#include <stdio.h>
int main() {
//code
int a[3] = {[2] 5, [0] 10, [1] 15};
printf("a[0] = %d a[1] = %d a[2] = %d\n", a[0], a[1], a[2]);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
a[0] = 10 a[1] = 15 a[2] = 5
Run Code Online (Sandbox Code Playgroud)
在线编译链接: http ://code.geeksforgeeks.org/4onQAI
所以,我有一个问题:
这是初始化数组的正确方法吗?
在C++入门中,我发现const int &可以用int对象绑定.我不明白,因为我认为const int &应该绑定一个const int不是一个int对象,int对象可以改变,本书解释了这个问题,当const int &对象绑定时int; 两者之间有一个临时对象,例如:
int a=0;
const int &r=a;
Run Code Online (Sandbox Code Playgroud)
我们可以使用b临时值,所以上面等于:
const int b=a;
const int &r=b;
Run Code Online (Sandbox Code Playgroud)
但是我认为这本书不对,因为如果有一个临时的b存在之间,a并且r,价值r无法改变,但是当我在visual studio中调试以下编码时,我发现它不对:
int a=0;
const int &r=a;
a=3;
cout<<r<<endl;
Run Code Online (Sandbox Code Playgroud)
输出是可以改变r=3;的值r,为什么?我不明白.
我看到std::result_of在C++中被弃用了17.
std::result_of在C++ 17中弃用的原因是什么?std::result_of和std::invoke_result.