1、字符串原始字面量
R“()”用于取消转义,可用于路径表示
运行成功
这两个RawValue起到描述作用(可以不写),并不参与输出
注意,这里输出中文乱码
2、nullptr
NULL在C++中表示0,在非C++中表示万能指针
nullptr是空指针,而不是0,能兼容各种类型的指针,但为空
3、constexpr
在定义常量时,const与constexpr是等价的
constexpr修饰函数时,函数应尽可能精简:
1、不能出现非常量表达式之外的语句(using指令、typedef指令、static_assert、return语句除外)
例如,不能出现for循环
场景:简单的计算
4、auto 与 decltype 类型推导
auto不能去定义数组:
auto a[10] = { 1, 2, 3 };//为错误写法
auto推导的对象必须声明和赋值同时进行,例如auto a = 3;而不能直接auto a;因为是通过这个3来推导a的类型的,而decltype不需要
在UE4中:
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "list"
#include "iostream"
#include "GlobeAwareDefaultPawn.h"
#include "GlobeAwareActor.generated.h"
UCLASS()
class UNREALEARTHLIBRARY_API AGlobeAwareActor : public AGlobeAwareDefaultPawn
{
GENERATED_BODY()
public:
// Sets default values for this actor's properties
AGlobeAwareActor();
virtual void BeginPlay() override;
private:
std::list<int> int_list;
};
template<typename T>
class Test {
public:
void Print(T a) {
for (templateIter = a.begin(); templateIter != a.end(); templateIter++) {
PrintNumOnScreen(*templateIter);
}
}
void PrintNumOnScreen(FString str) {
GEngine->AddOnScreeenDebugMessage(-1, 10.f, FColor::Red, str);
}
void PrintNumOnScreen(int value) {
GEngine->AddOnScreenDebugMessage(-1, 10.f, FColor::Red, FString::FromInt(value));
}
private:
decltype(T().begin()) templateIter;
};
// Fill out your copyright notice in the Description page of Project Settings.
#include "GlobeAwareActor.h"
AGlobeAwareActor::AGlobeAwareActor()
{
// Set this actor to call Tick() every frame. You can turn this off to improve performance if you don't need it.
PrimaryActorTick.bCanEverTick = true;
int_list = { 1, 2, 3, 4 };
}
void AGlobeAwareActor::BeginPlay() {
Super::BeginPlay();
Test<std::list<int>> *test = new Test<std::list<int>>();
test->Print(int_list);
}
编译成功,运行效果如下:
当T没有构造函数时,需要对函数进行返回值后置:这里以TArray<int>为例
auto Function->decltype(TArray<int>) {}